void test(void)
{int input = 0;do{menu();printf("请选择: >");scanf("%d", &input);switch (input){menu();case 1:printf("扫雷\n");game();break;case 2:printf("退出游戏\n");break;default:printf("输入错误,请重新输入");break;}} while (input);//0退出游戏}
int main(void)
{test();return 0;
}
1、主函数及游戏开始结束的界面设计
void menu()
{printf("*************************\n");printf("******* 1:开始游戏 *******\n");printf("******* 0:退出游戏 *******\n");printf("*************************\n");}
2、菜单函数
void game()
{char mine[ROWS][COLS] = { 0 };//存雷char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//初始化棋盘 尽量设计成一样的InitBoard(mine,ROWS, COLS,'0');InitBoard(show,ROWS, COLS,'*');//调试时打印该表,玩的时候可以不打印//打印棋盘DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//棋盘雷信息//排查雷FindMine(mine, show, ROW, COL);}
3、游戏模块
头文件参数封装
#define ROW 9 //棋盘显示区域
#define COL 9#define ROWS ROW + 2//棋盘宽度
#define COLS COL + 2#define EASY_COUNT 20//雷的数量void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);void DisplayBoard(char board[ROWS][COLS], int row, int col);//实际显示的棋盘区域void SetMine(char mine[ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row,int col);
初始化棋盘 尽量设计成一样的
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}
打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)//实际显示的棋盘区域
{int i = 0;for (i = 0;i <= col;i++){printf("%d ", i);//打印行列}printf("\n");for (i = 1;i <= row;i++){printf("%d ", i);int j = 0;for (j = 1;j <= col;j++){printf("%c ", board[i][j]);}printf("\n");}}
布置雷
//布置雷是在棋盘上随机的找10个坐标
//x范围1~9
//y范围1~9
void SetMine(char mine[ROWS][COLS], int row, int col)
{ int count = EASY_COUNT;//80个雷int x = 0;int y = 0;srand((unsigned int)time(NULL));//随机数清空while (count){x = rand() % row + 1;//防止出界y = rand() % col + 1;if (mine[x][y] != '1'){mine[x][y] = '1';//判断是否有雷count--;}}
}
排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{int x = 0;int y = 0;int win = 1;while (1){printf("请输入要排查的坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col)//是雷{if (mine[x][y] == '1'){printf("很遗憾,你踩雷了,游戏结束\n");DisplayBoard(mine, ROW, COL);break;}else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);}}else{printf("输入的坐标有误x(1~9),y(1~9) 请重新输入");}//游戏胜利if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");break;}}
}
统计周围有几个雷
目录
1、主函数及游戏开始结束的界面设计
2、菜单函数
3、游戏模块
初始化棋盘 尽量设计成一样的
打印棋盘
布置雷
排查雷
法2 统计周围有几个雷
int GetMineCount(char mine[ROWS][COLS], char x, char y)
{int i = 0;int count = 0;for(i = -1;i <= 1;i++){ int j = 0;for (j = -1;j <= 1;j++){count += mine[x + i][y + j] - '0';}}return count;
}