四、微小优化
在电脑布雷的时候我们定义了count,让他等于10,
玩家输入坐标并判断输赢时候,我们也用到了数字10
我们为了方便,在game.h里可#define COT 10
到时候可以直接用COT来代替10
五、测试
5.1排完雷结果测试
由于有10个雷,71个空格我们一一排查需耗费大量时间,所以我们将雷设置为80,此时只有一个位置没有雷,这时候我们选中这个位置
此时7,7这个地方没有雷,当我们选中时,告诉我们排雷成功
5.2踩到雷结果测试
将雷数量重新设置回10
此时踩到了雷,宣布被炸死
5.3未踩到雷结果测试
4,4坐标显示没有雷,但其周围8个地方又有2个雷,此时4,4位置打印数字2
六、待优化
待优化点:点开一个不是雷的地方开铺开一大片显示没雷的地方
七、代码部分
game.h
#pragma once #include<stdio.h> #include<time.h> #include<stdlib.h> #define ROW 9 #define COL 9 #define COT 10 #define COLS COL+2 #define ROWS ROW+2 Itnboard(char board[ROWS][COLS], int rows, int cols, char set); Displayboard(char board[ROWS][COLS], int row, int col); ComputerSet(char board[ROWS][COLS], int row, int col); Playmove(char board[ROWS][COLS],char mine[ROWS][COLS], int row, int col);//玩家排雷
test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() { printf("**********************************\n"); printf("***********1.play*****************\n"); printf("***********0.exit*****************\n"); printf("**********************************\n"); } void game() { char board[ROWS][COLS] = { 0 }; char mine[ROWS][COLS] = { 0 }; Itnboard(board, ROWS, COLS, '0'); Itnboard(mine, ROWS, COLS, '*'); //初始化棋盘 Displayboard(mine, ROW, COL);//打印棋盘 ComputerSet(board,ROW,COL); Playmove(board,mine, ROW, COL); } int main() { srand((unsigned int)time(NULL)); int input; while (1) { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: printf("扫雷游戏:\n"); game(); break; case 0: printf("退出菜单"); break; default: printf("输入错误请重新输入:"); } } }
game.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" Itnboard(char board[ROWS][COLS], int rows, int cols, char set) { int i; int j; for (i = 0; i < rows; i++) for (j = 0; j < cols; j++) board[i][j] = set; } int fun(char board[ROWS][COLS], int x, int y) { return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + board[x][y - 1] + board[x][y + 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0'; } Displayboard(char board[ROWS][COLS], int row, int col) { int i; int j; printf("---------------- 扫雷游戏----------------------\n"); for (i = 0; i <=row; i++) printf("%d ", i); printf("\n"); for (i = 1; i <=row ; i++) { printf("%d ", i); for (j = 1; j <=col ; j++) { printf("%c ", board[i][j]); } printf("\n"); } printf("---------------- 扫雷游戏----------------------\n"); } Playmove(char board[ROWS][COLS],char mine[ROWS][COLS], int row, int col) { int x; int y; int count=0; while (count< row*col- COT) { printf("请输入坐标:"); scanf("%d%d", &x, &y); if (x >= 1 && x <= 9 && y >= 1 && y <= 9) { if (board[x][y] == '1') { printf("你被炸死了:"); break; } else { int ch = fun(board, x, y); mine[x][y] = ch + '0'; Displayboard(mine,row,col); count++; } } else { printf("输入错误,请重新输入"); } } if (count == row * col - COT) printf("恭喜你,排雷成功"); } ComputerSet(char board[ROWS][COLS], int row, int col) { int x; int y; int count = COT; while(count) { x = rand() % row + 1; y = rand() % col + 1; if (board[x][y] == '0') { board[x][y] = '1'; count--; } } Displayboard(board, row, col); }