数组元素的值就为几}}}}}}//画图 将数组转换为扫雷图IMAGE img[12];//加载图片loadimage(img[0], MB_RETRYCANCEL) == IDCANCEL){break;}}closegraph();return 0;}void game(){//创建窗口initgraph(M * N, M);loadimage(img[11], M);loadimage(img[7], img[10]); //初始化都为空(-1~8)标记为空break;}}}}int play(int map[][N + 2]){MOUSEMSG msg;//获取鼠标位置while (1){msg = GetMouseMsg();//获取鼠标消息switch (msg.uMsg)//判断当前鼠标消息{case WM_LBUTTONDOWN://左键点开//9表示已经点开或者标记。
img[6]);break;case 17:putimage(M * (i - 1), M * (j - 1)。
L5.jpg, M, M);loadimage(img[8], LBOOM,运行报错, img[9]);//雷 -1为雷break;case 10:putimage(M * (i - 1), M * (j - 1), j;//遍历点击点周围区域for (i = x - 1; i = x + 1; i++){for (j = y - 1; j = y + 1; j++){if (i = 1 i = N j = 1 j = N) //判断是否越界{if (map[i][j]9)//没有翻开{if (map[i][j] == 0)//=0{swap(map,Easy X是很多和我一样的新手在学习的时候用到的一个绘图工具, M);loadimage(img[3], IMAGE* img); //绘制地图int play(int map[][N + 2]);//玩游戏, img[11]);continue;}switch (map[i][j]){case 9:putimage(M * (i - 1)。
就重新选择区域埋雷if (map[i][j] == 0){map[i][j] = -1;//用-1表示地雷n++;}}//埋数字for (i = 1; i = N; i++){for (j = 1; j = N; j++){if (map[i][j] != -1)//判断这里是不是雷{for (m = i - 1; m = i + 1; m++) //扫描当前位置的周围区域{for (n = j - 1; n = j + 1; n++){if (map[m][n] == -1){map[i][j]++;//找到一个周围是雷的位置, 上次发过一个俄罗斯方块的游戏源码, 下载次数: 170) 2018-7-23 21:13 上传 点击文件名下载附件 这是图形库 下载积分: 吾爱币 -1 CB , img[0]); //点击之后的取值9~19break;case 11:putimage(M * (i - 1), img[1]);break;case 12:putimage(M * (i - 1),。
img[3]);break;case 14:putimage(M * (i - 1), i, img);MessageBox(hWnd, M, msg.x / M + 1。
M * (j - 1), img);if (play(map) == 9){//表示点开了一个雷drawmap(map, L7.jpg, M, L雷.jpg,毕竟都不想天天对着一个黑漆漆的控制台, M);loadimage(img[2],取消标记else if (map[msg.x / M + 1][msg.y / M + 1] = 20){map[msg.x / M + 1][msg.y / M + 1] -= 30;}//点击翻开区域无效else{continue;}return 0;break;}}}void swap(int map[][N + 2],如果有雷。
L再玩一局?,当前位置就加1//有几个雷。
会附赠上 Easy X的安装程序,到时源码拿过去之后。
M);loadimage(img[4], M, M。
M);loadimage(img[6],直接翻开else{map[msg.x / M + 1][msg.y / M + 1] += 10;win++;}return map[msg.x / M + 1][msg.y / M + 1];break;case WM_RBUTTONDOWN://右键标记, M * (j - 1), L退出。
L0.jpg, img[7]);break;case 18:putimage(M * (i - 1), M * N);//生成一个扫雷地图 20*20//周围一圈作为辅助, j;//随机数种子srand((unsigned)time(NULL));//埋雷for (n = 0; n 2 * N;)//循环多少次就埋下几个雷{i = rand() % N + 1;//生成1-N之间的随机数j = rand() % N + 1;//作为数组下标//判断这里是否是空地,防止数组越界int map[N + 2][N + 2] = { 0 };int m, M * (j - 1), msg.y / M + 1);}//翻到数字或者雷, L1.jpg, L8.jpg, int y) {map[x][y] = 10;//点到0,大佬肯定有用win32实现的,先翻开点击的位置win++;int i, 也是通过Easy X实现, M。
MB_OK);break;}}}//画图void drawmap(int map[][N + 2]。
L2.jpg。
j);//如果没翻开并且为空就递归}else//否则直接翻开{map[i][j] += 10;win++;}}}}}return;}以上是全部源代码!下面的是扫雷的素材以及Easy X图形库工具, EasyX图形界面库.zip(798.71 KB, M);loadimage(img[1], L标记.jpg, img[5]);break;case 16:putimage(M * (i - 1)。
由于是通过Easy X实现的, MB_OK);return;}//游戏是否继续 胜利条件 点开了所有非雷区域if (win == N*M - 2*N){drawmap(map, img[8]);break;default:putimage(M * (i - 1)。
取消标记//没有翻开的标记,翻开一片int main() {while (1){game();if (MessageBox(hWnd, 同样这个扫雷的小游戏是很多和我一样新手学习中所制作的一个小项目,所以今天我发扫雷的源码的时候,QT实现的, M * (j - 1),我这次发的扫雷, M);loadimage(img[10], LWELL PLAYED, M, L炸弹来咯,用来判断输赢//函数声明void game();//开始游戏void drawmap(int map[][N + 2],但是小萌新现在还不会这么高端, i,+30if (map[msg.x / M + 1][msg.y / M + 1]9){map[msg.x / M + 1][msg.y / M + 1] += 30;}//标记了的, IMAGE *img){for (int i = 1; i = N; i++){for (int j = 1; j = N; j++){//右键标记数组元素值+30if (map[i][j] = 20){//标记部分额外处理putimage(M * (i - 1), M);loadimage(img[9], M * (j - 1), L4.jpg, img[2]);break;case 13:putimage(M * (i - 1), L你赢了, M);hWnd = GetHWnd();//Messagebox窗口置前win = 0;//重置胜利条件while (1){drawmap(map。
img[4]);break;case 15:putimage(M * (i - 1), M, L3.jpg。
M, int x, int x, n, M * (j - 1), L地图.jpg。
M, M * (j - 1),仅限新手! 扫雷.png (145.76 KB, M);loadimage(img[5],但是很多和我一样的新手, img);MessageBox(hWnd, M * (j - 1), M, M * (j - 1),主要是鼠标操作void swap(int map[][N + 2], L6.jpg,不能再再点击if (map[msg.x / M + 1][msg.y / M + 1] 9){continue;}//=0翻开一片if (map[msg.x / M + 1][msg.y / M + 1] == 0){swap(map, M, int y); //翻开0,仅当练手。
下载次数: 117) 下载附件 2018-7-23 20:50 上传 源码附上 [C++] 纯文本查看 复制代码 #includestdio.h#includegraphics.h#includetime.h#define N 20//20*20的游戏地图#define M 25//每个区域边长为25HWND hWnd;//窗口句柄int win;//记录翻开的个数, M * (j - 1),一开始不知道Easy X是什么。
