1.功能实现思路,我们需要给用户展示扫雷界面,需要埋雷,需要统计用户选择展开位置周围雷的总数目,并在显示界面展示给用户看,需要判断输赢,可重复/退出游戏
2.我们可以通过设置成两种扫雷界面,不给用户看到具体埋雷的那个界面
3.可以通过使用rand进行随机埋雷,需引用头文件stdlib.h,rand的使用前需用srand((unsigned int)time(NULL))
4.time时间戳函数,time(NULL)用来获取系统现在时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数(使用需引用头文件time.h),srand实现随机数需要先给他一个随机值,此处srand函数(需要引用头文件stdlib.h),(unsigned int)是将time转换为无符号整形。
5.真正产生随机数是不可能的,只能产生伪随机数。
6.srand函数的使用是为了rand()使用做准备。rand()用来实现随机埋雷。
#define _CRT_SECURE_NO_WARNINGS #include#define ROW 9 #define ROWS ROW+2//统计雷数用 #define RANK 9 #define RANKS RANK+2//统计雷数用 #define mine 9 #include #include void meau(); void initialize(char chess[ROWS][RANKS],char set); void print(char chess[ROWS][RANKS]); void Mine(char mine1[ROWS][RANKS]); void begscan(char show[ROWS][RANKS], char chess[ROWS][RANKS]); //功能实现 #include "mine.h" void meau() { printf("----------------------n"); printf("------1.开始游戏------n"); printf("------0.退出游戏------n"); printf("----------------------n"); } void initialize(char chess[ROWS][RANKS],char set)//初始化11 { int i; int j; for (i = 0; i < ROWS; i++) { for (j = 0; j < RANKS; j++) { chess[i][j]=set; } } } void print(char chee[ROWS][RANKS])//打印雷盘 { 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 <=RANK; j++) { printf("%c ", chee[i][j]); } printf("n"); } printf("--------扫雷--------n"); } void Mine(char mine1[ROWS][RANKS])//随机埋雷 { int x; int y; int count = mine; while (count) { x = rand() % ROW+1; y = rand() % RANK+1; if (mine1[x][y] == '0') { mine1[x][y] = '1';//雷 count--; } } } int minenumber(char chess[ROWS][RANKS], int x, int y) { return chess[x - 1][y] + chess[x - 1][y - 1] + chess[x][y - 1] + chess[x + 1][y - 1] + chess[x + 1][y] + chess[x + 1][y + 1] + chess[x][y + 1] + chess[x - 1][y + 1]-8*'0'; } void begscan(char show [ROWS][RANKS],char chess[ROWS][RANKS]) { int i; int j; int num=0; while (num 0 && j > 0)//考虑用户习惯没有0 0输入的概念 { if (chess[i][j] == '1') { printf("你输了n"); print(chess); break; } else { int count=minenumber(chess, i, j);//统计周围雷数 show[i][j] = count + '0';// 转型; print(show); num++; } } else { printf("坐标输入错误请重新输入"); } } if (num == ROW * RANK - mine) { printf("你赢了n"); print(chess); } } //测试 #include"mine.h" void game() { char chess[ROWS][RANKS] = { 0 }; char show[ROWS][RANKS] = { 0 }; initialize(chess,'0');//初始化存放布置好的雷的信息 initialize(show,'*');//初始化存放排查出的雷的信息 Mine(chess);//埋雷 print(show);//打印棋盘 begscan(show,chess);//找雷 } int main() { int input = 0; srand((unsigned int)time(NULL)); do { meau(); printf("请输入:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏n"); break; default: printf("选择错误,重新选择!n"); break; } } while (input); return 0; }



