扫雷的实现:
1.雷盘的打印
2.随机布雷
3.安全第地周围雷的个数
4.判断输赢
#ifndef __GAME_H__ #define __GAME_H__ #include<stdio.h> #include<stdlib.h> #define ROW 11 #define COL 11 //在这里可以改变棋盘的大小 void init_board(char arr1[ROW][COL], char arr2[ROW][COL]); void display_board(char arr2[ROW][COL]); void set_lei(char arr1[ROW][COL]); int lei_shu(char arr1[ROW][COL], int x, int y); void player_move(char arr1[ROW][COL], char arr2[ROW][COL]); #endif#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" #include<stdio.h> void init_board(char arr1[ROW][COL], char arr2[ROW][COL]) { memset(arr1, ' ', ROW*COL*sizeof(arr1)); memset(arr2, '*', ROW*COL*sizeof(arr2)); } void display_board(char arr2[ROW][COL]) //打印棋盘 { int i = 0; int j = 0; printf(" "); for (i = 1; i < COL - 1; i++) printf("-", i); printf("\n"); for (i = 1; i < ROW - 1; i++) { printf("- ", i); for (j = 1; j < COL - 1; j++) { printf("%c ", arr2[i][j]); } printf("\n"); } } void set_lei(char arr1[ROW][COL]) //利用srand随机生成雷 { int x = 0; int y = 0; int count = 10; //可以改变雷的个数 srand((unsigned int)time(NULL)); while (count) { x = rand() % (ROW - 2) + 1; y = rand() % (COL - 2) + 1; if (arr1[x][y] = '0') { arr1[x][y] = '1'; count--; } } } int lei_shu(char arr1[ROW][COL], int x, int y) //显示出安全地周围雷的个数 { int count = 0; if (arr1[x + 1][y + 1] == '1') count++; if (arr1[x + 1][y] == '1') count++; if (arr1[x + 1][y - 1] == '1') count++; if (arr1[x][y - 1] == '1') count++; if (arr1[x][y + 1] == '1') count++; if (arr1[x - 1][y - 1] == '1') count++; if (arr1[x - 1][y] == '1') count++; if (arr1[x - 1][y + 1] == '1') count++; return count; }
以下就是扫雷中最重要的部分:如何进行扫雷
void player_move(char arr1[ROW][COL], char arr2[ROW][COL]) { int tmp = 1; int i = 0; int j = 0; int num = 0; while (num != (ROW - 2)*(COL - 2) - 10) { printf(" "); for (i = 1; i<COL - 1; i++) { printf("-", i); } printf("\n"); for (i = 1; i<ROW - 1; i++) { printf("-", i); for (j = 1; j<COL - 1; j++) { printf(",", arr1[i][j]); } printf("\n"); } printf("请输入下子位置:"); scanf("%d%d", &i, &j); int x = 0; int y = 0; if ((i >= 1) && (j >= 1) && (i <= ROW - 2) && (j <= COL - 2)) { while (tmp == 1) { if (arr1[i][j] == '1') { while (tmp == 1) { arr1[i][j] = '0'; y = rand() % 9; x = rand() % 9; if (arr1[x][y] = '0') { arr1[x][y] = '1'; t = 0; } } } else { tmp = 0; } } if (arr1[i][j] == '1') { printf("失败\n"); return; } else { int ret = lei_shu(arr1, i, j); arr2[i][j] = ret + '0'; num++; display_board(arr2); } } else printf("请重新输入:\n"); } printf("恭喜你。\n"); }#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<windows.h> #include<time.h> #include"game.h" void menu() { printf("#######################\n"); printf("##### 1.play #####\n"); printf("##### 0.exit #####\n"); printf("#######################\n"); } void game() { char arr1[ROW][COL] = { 0 }; char arr2[ROW][COL] = { 0 }; init_board(arr1, arr2); display_board(arr2); set_lei(arr1); player_move(arr1, arr2); } int main() { int input; do { menu(); printf("请选择:\n"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("输入错误。\n"); } } while (input); system("pause"); return 0; }
