一.实现效果
1.游戏可以通过菜单实现继续玩或者退出游戏
2.
扫雷的棋盘是9*9的格⼦
3.默认随机布置10个雷
4.可以排查雷
5.可以排查雷
如果位置不是雷,就显⽰周围有⼏个雷
如果位置是雷,就炸死游戏结束
把除10个雷之外的所有雷都找出来,排雷成功,游戏结束
游戏的界⾯:
1.数据结构分析
扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存 储这些
信息。
因为我们需要在9*9的棋盘上布置雷的信息和排查雷,我们⾸先想到的就是创建⼀个9*9的数组来存放 信息。
2.创建文件
我们需要分模块来写不同作用的文件,在实现扫雷时我们需要分三个文件分别是:1.头文件ls.h
2.源文件text.c以及实现其他功能的ls.c
2.1头文件
1.#include <stdio.h>
2.#include <stdlib.h>
3.#include <time.h>
2.2 define定义的行,列以及雷的个数
1.#define EASY_COUNT 80
2.#define ROW 9
3.#define COL 9
4.#define ROWS ROW+2
5.#define COLS COL+2
2.3函数的声明
//初始化棋盘
1.void InitBoard(char arr[ROWS][COLS],int rows,int cols, char set);
//打印棋盘
2.void DisplayBoard(char arr[ROWS][COLS], int row,int col);
//布置雷
3.void SetMine(char arr[ROWS][COLS], int row, int col);
//排查雷
4.void FindMine (char mine[ROWS][COLS], char show[ROWS][COLS],int row, int col);
3.源(主)程序设计
3.1先实现正常的输入输出退出游戏
1.int main()
2. {
3. int input = 0;
4. srand((unsigned int)time(NULL));
5. do
6. {
7. menu();
8. printf("请输入:");
9. scanf("%d", &input);
10. switch (input)
11. {
12. case 1:
13. game();
14. break;
15. case 0:
16. break;
17. printf("退出游戏\n");
18. default:
19. printf("选择错误,重新选择!\n");
20. break;
21. }
22. } while (input);
23. return 0;
24. }
3.2打印菜单选择并引入头文件
1.#include <stdio.h>
2.#include "ls.h"
1.void menu()
2.{
3. printf("***********************\n");
4. printf("***** 1. play *****\n");
5. printf("***** 0. exit *****\n");
6. printf("***********************\n");
7.}
3.3 game()功能实现
1.void game()
2.{
3. char mine[ROWS][COLS];
4. char show[ROWS][COLS];
5. //初始化
6. InitBoard(mine,ROWS, COLS, '0');//0
7. InitBoard(show, ROWS, COLS, '*');//*
8. //打印棋牌
9. DisplayBoard(show, ROW,COL);
10. //1.布置雷
11. SetMine(mine, ROW, COL);
12. //DisplayBoard(mine, ROW, COL);
13.//排查雷
14. FindMine(mine,show, ROW, COL);
15.}
4.函数程序声明的实现
4.1 引入头文件ls.h 并初始化棋盘
1.void InitBoard(char arr[ROWS][COLS], int rows, int cols,char set)
2.{
3. int i = 0;
4.
5. for (i = 0; i < rows; i++)
6. {
7. int j = 0;
8. for (j = 0; j < cols; j++)
9. {
10. arr[i][j] = set;
11. }
12.
13. }
14. }
4.2打印棋盘
1.void DisplayBoard(char arr[ROWS][COLS], int row, int col)
2.{
3. int i = 1;
4. printf("********扫雷********\n");
5. //打印列号
6. for (i = 0; i <=row; i++)
7. {
8. printf("%d ", i);
9. }
10. printf("\n");
11. for (i = 1; i <= row; i++)
12. {
13. int j = 0;
14. printf("%d ", i);
15. for (j = 1; j <=col; j++)
16. {
17. printf("%c ", arr[i][j]);
18. }
19. printf("\n");
20. }
21. printf("********扫雷********\n");
22.}
4.3布置雷
1. void SetMine(char arr[ROWS][COLS], int row, int col)
2.{
3. //布置雷
4. int count = EASY_COUNT;
5. while (count)
6 {
7. int x = rand()%row+1;//1~9
8. int y = rand()%col+1;//1~9
9.
10. //布置一个雷,count--
11. if (arr[x][y] == '0')
12. {
13. arr[x][y] = '1';
14. count--;
15. }
16. }
17.}
18. static int GetMineCount(char mine[ROWS][COLS],int x, int y)
19.{
20. return (mine[x-1][y]+mine[x-1][y-1]+mine[x][y - 1]+mine[x+1][y-1]+mine[x
21. mine[x+1][y+1]+mine[x][y+1]+mine[x-1][y+1] - 8 * '0');
23.
24.}
4.4排查雷
1.void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row, int col)
2.{
3. int x = 0;
4. int y = 0;
5. int win = 0;
6. while (win< row * col - EASY_COUNT)
7. {
8. printf("请输入要排查的坐标:");
9. scanf("%d %d", &x, &y);
10.
11. if (x >= 1 && x <= row && y >= 1 && y <= col)
12. {
13. if (mine[x][y] == '1')
14 {
15. printf("很遗憾,你被炸死了\n");
16 DisplayBoard(show, ROW, COL);
17. break;
18. }
19. else
20. {
21. int n = GetMineCount(mine, x, y);
22. show[x][y] = n + '0';
23. DisplayBoard(show, ROW, COL);
24. win++;
25. }
26. }
27. else
28. {
29. printf("坐标非法,请重新输入\n");
30. }
31. }
32. if (win = row * col - EASY_COUNT)
33. {
34. printf("恭喜你,排雷成功\n");
35. DisplayBoard(mine, ROW, COL);
36. }
37. }
4.5 查找如下实现排雷查找
扫雷成功