C语言编写扫雷
程序员文章站
2022-05-21 10:56:18
扫雷:
定义两个二维数组:mine用来布雷、show用来显示扫雷情况、mine初始化为’0’、show初始化为’*’;开始扫雷输入坐标、如果有雷、提示...
扫雷:
定义两个二维数组:mine用来布雷、show用来显示扫雷情况、mine初始化为’0’、show初始化为’*’;开始扫雷输入坐标、如果有雷、提示你踩雷了,本轮游戏结束,如果没雷继续扫直到扫完所有没有雷的地方,没扫一次会提示其周围有几个雷。因为统计四周,边缘位置不好实现,所以把二维数组的行和列都加二,这样无论是否在边缘都可以当做一种情况来实现。
#include #pragma warning(disable:4996) #include #define row 11 #define col 11 #define default 10 void menu(); void init_board(char mine[row][col], char show[row][col]); //初始化棋盘 void display_board(char show[row][col]); //打印棋盘 void set_mine(char mine[row][col]); //布雷 int get_mine(char mine[row][col], int x, int y); //统计该位置周围雷的个数 void mine_sweep(char mine[row][col], char show[row][col]); //扫雷 void game(); //玩游戏 int main() { int input = 1; menu(); while (input) { printf("请选择:\n"); scanf("%d", &input); switch (input) { case 0: printf("退出程序\n"); break; case 1: game(); break; default: printf("错误指令请重新选择:\n"); break; } } system("pause"); return 0; } void menu() { printf("###########扫雷#########\n"); printf("####0:start||1:exit####\n"); printf("########################\n"); } void init_board(char mine[row][col], char show[row][col]) { int i = 0; int j = 0; for (i = 1; i < row - 1; i++) { for (j = 1; j < col - 1; j++) { mine[i][j] = '0'; } } for (i = 1; i < row - 1; i++) { for (j = 1; j < col - 1; j++) { show [i][j] = '*'; } } } void display_board(char show[row][col]) { int i, j; printf(" "); for (i = 1; i < col - 1; i++) printf("%d ", i); printf("\n"); for (i = 1; i < row - 1; i++) { printf("%d ", i); for (j = 1; j < col - 1; j++) { printf("%c ", show[i][j]); } printf("\n"); } } void set_mine(char mine[row][col]) { int x = 0; int y = 0; int count = default; srand((unsigned)time(null)); while (count) { x = rand() % (row-2) + 1; y = rand() % (col-2) + 1; if (mine[x][y] == '0') { mine[x][y] = '1'; count--; } } } int get_mine(char mine[row][col], int x, int y) { int count = 0; if (mine[x - 1][y - 1] == '1') count++; if (mine[x - 1][y] == '1') count++; if (mine[x-1][y + 1] == '1') count++; if (mine[x][y - 1] == '1') count++; if (mine[x ][y + 1] == '1') count++; if (mine[x + 1][y - 1] == '1') count++; if (mine[x + 1][y] == '1') count++; if (mine[x + 1][y + 1] == '1') count++; return count; } void mine_sweep(char mine[row][col], char show[row][col]) { int x = 0; int y = 0; int count = 0; while (count != (row - 2)*(col - 2) - default) { printf("请输入坐标row(1-9)col(1-9):"); scanf("%d%d", &x, &y); if (mine[x][y] == '1') { printf("踩到雷了:\n"); printf("雷在棋盘的位置:\n"); display_board(mine); return; } else { int ret = get_mine(mine, x, y); show[x][y] = ret + '0'; display_board(show); } } printf("扫雷成功\n"); } void game() { char mine[row][col]; char show[row][col]; init_board(mine, show); display_board(show); set_mine(mine); mine_sweep(mine, show); }
下一篇: C语言socket实现文件下载