这篇文章主要为大家详细介绍了C语言代码实现简单的扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
C语言+EASYX实现扫雷,供大家参考,具体内容如下
主要思路就是通过一个二维数组存储不同的数来代表0到8等具体的图片,再配合鼠标的位置和点击情况,来改变数组某一项的值,而显示不同的图片。
水平有限,有些地方的代码过于复杂和繁琐,有待优化;有些功能的实现也不是很完整和合理,敬请指正。
#include //标准的输入输出头文件。 #include //EasyX图形界面。 #include #include #include #pragma comment(lib,"winmm.lib")//导入静态库 int f2=0;//标志信号 int flag=0;//标志信号 int ROW = 0; //棋盘行数 int COL = 0; //棋盘列数 int NUM = 0; //雷的个数 int size; //图片尺寸 HWND hwnd1; int count = 0;//已掀开的数量; void BGMPLAY(void)//播放音乐函数 { mciSendString(L"open ./image/XXX.mp3 alias bgm",0,0,0);//XX可替换为自己的歌曲 mciSendString(L"play bgm repeat",0,0,0); } struct rayxy//地雷位置 { int x; int y; }xy[200];//地雷位置 IMAGE img[21];//存储图像 void welcome() { initgraph( 640, 480); loadimage(&img[9], L"./image/开始界面1.jpg-600", 640, 480);//开始界面 loadimage(&img[15], L"./image/菜单界面.jpg-600", 640, 480);//菜单选择界面 if (!flag) { putimage(0, 0, &img[9]); Sleep(1000); } cleardevice(); putimage(0, 0, &img[15]); //模式选择 MOUSEMSG msg = { 0 }; const int x1=9,y1=8, x2=290,y2=8,x3=9,y3=330,x4=290,y4=330, h=306, w=265; int sx = 0, sy = 0; //模式选择 while (1) { HWND hwnd; msg = GetMouseMsg(); if (msg.uMsg == WM_LBUTTONDOWN) { sx = msg.x; sy = msg.y; break; } } if ((sx >= x1 && sy >= y1)&& (sx <= x1+w && sy = x2 && sy >= y2) && (sx <= x2 + w && sy = x3 && sy >= y3) && (sx <= x3 + w && sy = x4 && sy >= y4) && (sx <= x4 + w && sy <= y4 + h)) { MessageBox(hwnd1, L"敬请期待!!!", L"提示", MB_OK); f2 = 1; flag = 1; Sleep(1000); } }//欢迎界面 int map[30][30];//棋盘地图 void imgplay(void) { loadimage(&img[0], L"./image/空白.jpg-600",size, size);//空白 loadimage(&img[1], L"./image/1.jpg-600", size, size); loadimage(&img[2], L"./image/2.jpg-600", size, size); loadimage(&img[3], L"./image/3.jpg-600", size, size); loadimage(&img[4], L"./image/4.jpg-600", size, size); loadimage(&img[5], L"./image/5.jpg-600", size, size); loadimage(&img[6], L"./image/6.jpg-600", size, size); loadimage(&img[7], L"./image/7.jpg-600", size, size); loadimage(&img[8], L"./image/8.jpg-600", size, size);//8 loadimage(&img[16], L"./image/问号.jpg-600", size, size);//问号 loadimage(&img[10], L"./image/覆盖.jpg-600", size, size);//覆盖 loadimage(&img[11], L"./image/标记.jpg-600", size, size);//标记 loadimage(&img[12], L"./image/地雷.jpg-600", size, size);//地雷 loadimage(&img[13], L"./image/胜利.jpg-600", size, size);//胜利 loadimage(&img[14], L"./image/问号.jpg-600", size, size);//问号 loadimage(&img[16], L"./image/9.jpg-600", size, size);//9 loadimage(&img[17], L"./image/0.jpg-600", size, size);//0 loadimage(&img[18], L"./image/冒号.jpg-600", size, size);//冒号 loadimage(&img[20], L"./image/标记错误.jpg-600", size, size);/标记错误 } void gameinit() { int i, j; srand((unsigned int)time(NULL));//为随机布雷提供随机数 for (i = 0; i <row + 2; i++) { for (j=0; j <col>= 0 && map[i][j] = 19 && map[i][j] = 29&&map[i][j]=39&&map[i][j]= 0 && map[i][j] = 19 && map[i][j] = 29&&map[i][j]<=38) { putimage((j - 1) * size, (i - 1) * size, &img[11]);//标记 } else { putimage((j - 1) * size, (i - 1) * size, &img[14]);//问号 } } void blankopen(int r, int c) { int a, b; if (map[r][c] == 20) { count++; map[r][c] -= 20; } for (a = r - 1; a <= r + 1; a++) { for (b = c - 1; b = 1 && a = 1 && b = 20 && map[a][b] = 29&&map[r][c]= 39 && map[r][c] = 19 && map[r][c] = 19 && map[r][c] = 29&&map[r][c]<=38) { map[r][c] += 10; } else { map[r][c] -= 20; } draw(r, c); ret<i style="color:transparent">来源gaodai$ma#com搞$$代**码网</i>urn map[r][c]; //break; } //} } int timerec(void) { time_t timep; struct tm p; time(&timep); gmtime_s(&p, &timep); int t = p.tm_min * 60 + p.tm_sec; return t; } void timeplay(int t) { int min=0 ,sec=0; printf("%d\n", t); min = t / 60; putimage((COL - 3) * size, (ROW)*size, &img[18]); switch (min / 10) { case 0:putimage((COL - 5) * size, (ROW ) * size, &img[17]); break; case 1:putimage((COL - 5) * size, (ROW ) * size, &img[1]); break; case 2:putimage((COL - 5) * size, (ROW ) * size, &img[2]); break; case 3:putimage((COL - 5) * size, (ROW ) * size, &img[3]); break; case 4:putimage((COL - 5) * size, (ROW ) * size, &img[4]); break; case 5:putimage((COL - 5) * size, (ROW ) * size, &img[5]); break; case 6:putimage((COL - 5) * size, (ROW ) * size, &img[6]); break; case 7:putimage((COL - 5) * size, (ROW ) * size, &img[7]); break; case 8:putimage((COL - 5) * size, (ROW ) * size, &img[8]); break; case 9:putimage((COL - 5) * size, (ROW ) * size, &img[16]); break; default:putimage((COL - 5) * size, (ROW ) * size, &img[10]); break; } switch (min % 10) { case 0:putimage((COL - 4) * size, (ROW ) * size, &img[17]); break; case 1:putimage((COL - 4) * size, (ROW ) * size, &img[1]); break; case 2:putimage((COL - 4) * size, (ROW ) * size, &img[2]); break; case 3:putimage((COL - 4) * size, (ROW ) * size, &img[3]); break; case 4:putimage((COL - 4) * size, (ROW ) * size, &img[4]); break; case 5:putimage((COL - 4) * size, (ROW ) * size, &img[5]); break; case 6:putimage((COL - 4) * size, (ROW ) * size, &img[6]); break; case 7:putimage((COL - 4) * size, (ROW ) * size, &img[7]); break; case 8:putimage((COL - 4) * size, (ROW ) * size, &img[8]); break; case 9:putimage((COL - 4) * size, (ROW ) * size, &img[16]); break; default:putimage((COL - 4) * size, (ROW ) * size, &img[10]); break; } sec = t % 60; switch (sec / 10) { case 0:putimage((COL - 2) * size, (ROW ) * size, &img[17]); break; case 1:putimage((COL - 2) * size, (ROW ) * size, &img[1]); break; case 2:putimage((COL - 2) * size, (ROW ) * size, &img[2]); break; case 3:putimage((COL - 2) * size, (ROW ) * size, &img[3]); break; case 4:putimage((COL - 2) * size, (ROW ) * size, &img[4]); break; case 5:putimage((COL - 2) * size, (ROW ) * size, &img[5]); break; case 6:putimage((COL - 2) * size, (ROW ) * size, &img[6]); break; case 7:putimage((COL - 2) * size, (ROW ) * size, &img[7]); break; case 8:putimage((COL - 2) * size, (ROW ) * size, &img[8]); break; case 9:putimage((COL - 2) * size, (ROW ) * size, &img[16]); break; default:putimage((COL - 2) * size, (ROW ) * size, &img[10]); break; } switch (sec % 10) { case 0:putimage((COL - 1) * size, (ROW ) * size, &img[17]); break; case 1:putimage((COL - 1) * size, (ROW ) * size, &img[1]); break; case 2:putimage((COL - 1) * size, (ROW ) * size, &img[2]); break; case 3:putimage((COL - 1) * size, (ROW ) * size, &img[3]); break; case 4:putimage((COL - 1) * size, (ROW ) * size, &img[4]); break; case 5:putimage((COL - 1) * size, (ROW ) * size, &img[5]); break; case 6:putimage((COL - 1) * size, (ROW ) * size, &img[6]); break; case 7:putimage((COL - 1) * size, (ROW ) * size, &img[7]); break; case 8:putimage((COL - 1) * size, (ROW ) * size, &img[8]); break; case 9:putimage((COL - 1) * size, (ROW ) * size, &img[16]); break; default:putimage((COL - 1) * size, (ROW ) * size, &img[10]); break; } for (int i = 0; i <COL-5; i++) { putimage((i) * size, (ROW)*size, &img[20]); } } int main() { BGMPLAY();//播放初始音乐 int i = 0, j = 0, MAX = 0; srand((unsigned int)time(NULL)); loop: loop1: f2 = 0; welcome(); if (f2)goto loop1; imgplay(); count = 0; hwnd1 = initgraph(COL * size, (ROW+1) * size); gameinit(); MAX = ROW * COL - NUM; time_t timep; struct tm p; time(&timep); gmtime_s(&p,&timep); int t1 = timerec(); while (1) { drawgraph(); timeplay(timerec() - t1); if (playgame() == -1) { for (i = 0; i <NUM; i++) { map[xy[i].x][xy[i].y] = -1; } drawgraph(); Sleep(1000); MessageBox(hwnd1, L"很遗憾!", L"提示", MB_OK); int x = MessageBox(hwnd1, L"回到主菜单", L"Minesweeper", MB_OKCANCEL); if (x == 1) { flag = 1; goto loop; } break; } if (count == MAX) { for (i = 0; i <NUM; i++) { map[xy[i].x][xy[i].y] = -2; } drawgraph(); Sleep(1000); MessageBox(hwnd1, L"Very good!!!", L"提示", MB_OK); int y = MessageBox(hwnd1, L"回到主菜单", L"Minesweeper", MB_OKCANCEL); if (y) { flag = 1; goto loop; } else { break; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网。
以上就是C语言代码实现简单的扫雷小游戏的详细内容,更多请关注gaodaima搞代码网其它相关文章!