- 显示该点周围雷的个数坐标周围没雷,可以实现展开结束时显示用时
#define ROW 11 // 9 #define COL 11 // 9 #define NUMS 20 #include主函数,主菜单设计#include #include // 1.初始化棋盘 void InitsBoard(char board[ROW][COL], int row, int col); //2. 布置雷 void PutDanger(char board[ROW][COL], int row, int col, int nums); // 打印棋盘 void DisplayBoard(char board[ROW][COL], int row, int col); //拆除雷 char DeleteDanger(char rboard[ROW][COL], char sboard[ROW][COL], int row, int col);
#include"game.h" // 包含的头文件 double start, finish; // 定义时间的来时和结束 void meau() { printf("#####################################n"); printf("########## 1.play ########n"); printf("########## 0.exit ########n"); printf("#####################################n"); } void game() { // 扫雷 char sboard[ROW][COL]; char rboard[ROW][COL] = { 0 }; //初始化展示棋盘 InitsBoard(sboard, ROW, COL); //布置雷 PutDanger(rboard, ROW, COL,NUMS); // 打印棋盘 DisplayBoard(sboard, ROW, COL); int times = ((ROW - 2) * (COL - 2) - NUMS) ; while (times) { //拆除雷 char ret = DeleteDanger(rboard, sboard, ROW, COL); if (ret == 'D') { // 打印棋盘 DisplayBoard(rboard, ROW, COL); printf("你被炸死了 "); finish = clock();//取结束时间 printf("用时%d 秒n", (int)(finish - start) / CLOCKS_PER_SEC); break; } else if(ret == 'C') { // 打印棋盘 DisplayBoard(sboard, ROW, COL); times--; } } if (times == 0) { // 打印棋盘 DisplayBoard(rboard, ROW, COL); printf("你赢了 "); finish = clock();//取结束时间 printf("用时%d 秒n", (int)(finish - start) / CLOCKS_PER_SEC); } } int main() { srand((unsigned)time(NULL)); int input = 0; do { meau(); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏n"); break; default: printf("输入错误,请重新输入n"); break; } } while (input); return 0; }
必要函数的实现
#include"game.h" // 1.初始化展示棋盘 void InitsBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = '*'; } } } //2.布置雷 void PutDanger(char board[ROW][COL], int row, int col,int nums) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = '0'; } } int count = 0; while(count < nums) { int x = rand() % 9 + 1; int y = rand() % 9 + 1; if (board[x][y] == '0') { board[x][y] = '1'; count++; } } } // 打印棋盘 void DisplayBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row - 1; i++) { printf("%d ", i); } printf("n"); for (int i = 1; i < row - 1; i++) { printf("%d ", i); for (int j = 1; j < col - 1; j++) { printf("%c ", board[i][j]); } printf("n"); } } // 统计雷的数量 int Sum(char sboard[ROW][COL],char rboard[][COL] ,int x,int y) { int Dnums = 0; for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { if (rboard[i][j] == '1') { Dnums++; } } } return Dnums; } void Strech(char sboard[ROW][COL],char rboard[ROW][COL],int x,int y) { if (x < 1 || x > 9 || y < 1 || y > 9) { return; } if (sboard[x][y] != '*')// 碰到已经排查过的就停下 { return; } int Dnums = Sum(sboard, rboard, x, y); if (Dnums != 0) { sboard[x][y] = Dnums + '0'; return; } sboard[x][y] = '0'; // 八个方向延伸 Strech(sboard, rboard, x - 1, y - 1); Strech(sboard, rboard, x - 1, y ); Strech(sboard, rboard, x - 1, y + 1); Strech(sboard, rboard, x , y - 1); Strech(sboard, rboard, x , y + 1); Strech(sboard, rboard, x + 1, y - 1); Strech(sboard, rboard, x + 1, y ); Strech(sboard, rboard, x + 1, y + 1); } //拆除雷 char DeleteDanger(char rboard[ROW][COL], char sboard[ROW][COL], int row, int col) { printf("请输入要排插位置的坐标:n"); while (1) { int x = 0; int y = 0; scanf("%d %d", &x, &y); //int x = rand() % 9 + 1; //int y = rand() % 9 + 1; if (x >= 1 && x < row - 1 && y >= 1 && y < col - 1 && sboard[x][y] == '*') { if (rboard[x][y] == '1') { return 'D'; break; } else { Strech(sboard,rboard, x, y); // 延申 return 'C'; break; } } else { printf("输入坐标有误,请重新输入n"); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)