- 效果图
- 源代码
- 源文件及资源
#include源文件及资源#include #include #include //这里调用了Easyx,需要安装 #pragma comment(lib,"winmm.lib") #define SIZE 50//图片的大小 #define NUM 10//地雷的数量 #define ROW 10//行数 #define COL 10//列数 int map[ROW + 2][COL + 2];//地图 int count = 0; IMAGE img[12];//定义图像对象 //游戏初始化 void GameInit() { srand((unsigned int)time(NULL));//创建一个随机数种子 //将数组初始化为0 for (int i = 0; i < ROW + 2; i++) { for (int j = 0; j < COL + 2; j++) { map[i][j] = 0; } } //制作地雷 int n = 0; while (n < NUM) { int r = rand() % ROW + 1;//随机获取行值 int c = rand() % COL + 1;//随机获取列值 if (map[r][c] == 0)//防止重复 { map[r][c] = -1; n++; } } //判断格子周围雷的数量 for (int i = 1; i <= ROW; i++) { for (int j = 1; j <= COL; j++) { if (map[i][j] != -1) { for (int m = i - 1; m <= i + 1; m++) { for (int n = j - 1; n <= j + 1; n++) { if (map[m][n] == -1) { map[i][j]++; } } } } } } for (int i = 1; i < ROW + 1; i++) { for (int j = 1; j < COL + 1; j++) { map[i][j] += 20; } } } void DrawMap() { for (int i = 1; i < ROW + 1; i++) { for (int j = 1; j < COL + 1; j++) { printf("%4d", map[i][j]); if (map[i][j] == -1) { putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[10]);//雷 } else if (map[i][j] >= 0 && map[i][j] <= 8) { putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[map[i][j]]);//数字 } else if (map[i][j] >= 19 && map[i][j] <= 28) { putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[9]);//空白图 } else if (map[i][j] > 30) { putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[11]);//标记 } } printf("n"); } } void OpenZero(int r, int c) { map[r][c] -= 20; count++; for (int m = r - 1; m <= r + 1; m++) { for (int n = c - 1; n <= c + 1; n++) { if (m >= 1 && m <= ROW && n >= 1 && n <= COL) { if (map[m][n] >= 19 && map[m][n] <= 28) { if (map[m][n] != 20) { map[m][n] -= 20; count++; } else { OpenZero(m, n); } } } } } } int PlayGame() { MOUSEMSG msg = { 0 };//定义一个鼠标 int r, c; while (1) { msg = GetMouseMsg();//获取鼠标消息 switch (msg.uMsg) { case WM_LBUTTONDOWN://当左键按下 r = msg.x / SIZE + 1; c = msg.y / SIZE + 1; if (map[r][c] >= 19 && map[r][c] <= 28) { if (map[r][c] == 20) { OpenZero(r, c); } else { map[r][c] -= 20; count++; } } return map[r][c]; break; case WM_RBUTTONDOWN://当鼠标右键按下,可设置或取消标志 r = msg.x / SIZE + 1; c = msg.y / SIZE + 1; if (map[r][c] >= 19 && map[r][c] <= 28) { map[r][c] += 50; } else if (map[r][c] > 30) { map[r][c] -= 50; } return map[r][c]; break; } } } int main() { HWND hwnd = initgraph(ROW*SIZE, COL*SIZE);//创建绘图窗口,加上参数SHOWCONSOLE可以看见控制台 mciSendString(L"open music.mp3 alias music", 0, 0, 0);//打开音乐文件 mciSendString(L"play music", 0, 0, 0);//播放音乐,我这里是告白之夜的BGM loadimage(&img[0], L"0.jpg", SIZE, SIZE);//加载图片 loadimage(&img[1], L"1.jpg", SIZE, SIZE); loadimage(&img[2], L"2.jpg", SIZE, SIZE); loadimage(&img[3], L"3.jpg", SIZE, SIZE); loadimage(&img[4], L"4.jpg", SIZE, SIZE); loadimage(&img[5], L"5.jpg", SIZE, SIZE); loadimage(&img[6], L"6.jpg", SIZE, SIZE); loadimage(&img[7], L"7.jpg", SIZE, SIZE); loadimage(&img[8], L"8.jpg", SIZE, SIZE); loadimage(&img[9], L"9.jpg", SIZE, SIZE); loadimage(&img[10], L"10.jpg", SIZE, SIZE); loadimage(&img[11], L"11.jpg", SIZE, SIZE); GameInit(); while (1) { DrawMap(); if (PlayGame() == -1) { DrawMap(); MessageBox(hwnd, L"很遗憾,你输了!!!", L"", MB_OK);//制作一个消息d窗 break; } if (ROW*COL - NUM == count) { DrawMap(); MessageBox(hwnd, L"真棒,你赢了!!!",L"", MB_OK); break; } } closegraph();//关闭绘图环境 return 0; }
链接:https://pan.baidu.com/s/1iRrU4zIkvgWqslX8QTgIBg
提取码:8k4f
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)