思路一、打印游戏菜单二、创建游戏函数
三、各功能函数的实现四、最终效果总结
思路
1.打印游戏菜单
2.创建游戏函数
3.创建2个二维数组,1个数a_mine组放雷,1个数组a_check放排雷的信息
4.对2个数组初始化
5.设计一个能打印棋盘的函数
6.设计一个布置雷的函数,将雷布置到a_mine数组
7.设计一个排雷的函数,将信息存放到a_check数组
8.判断输赢
void menu() { printf("************************n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); printf("************************n"); printf("请选择:"); } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); scanf("%d", &input); switch (input) { case 1: printf("开始游戏!n"); game(); break; case 0: printf("退出游戏!n"); break; default: printf("输入有误,请重新输入:n"); break; } } while (input); return 0; }二、创建游戏函数
void game() { //创建棋盘 1个放雷 1个放排雷信息 char a_mine[ROWS][COLS] = { 0 }; char a_check[ROWS][COLS] = { 0 }; //初始化棋盘 Init_board(a_mine, '0'); Init_board(a_check, '*'); //打印棋盘 //print_board(a_mine); print_board(a_check); //布置雷 是雷置1 不是雷置0 mine_set(a_mine); //排雷 在a_mine上排雷 信息存放到a_check mine_check(a_mine, a_check); }
三、各功能函数的实现
void Init_board(char board[ROWS][COLS], char set) { int i = 0; int j = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { board[i][j] = set; } } } void print_board(char board[ROWS][COLS]) { int i = 0; int j = 0; printf("------------扫雷游戏-----------n"); printf("0|"); for (i = 1; i <= ROW; i++) { printf("%d ", i); } printf("n"); 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"); } void mine_set(char a_mine[ROWS][COLS]) { int x = 0; int y = 0; int mine_num = 0; while (mine_num < MINE_NUM) { x = rand() % ROW + 1; // 0-8 +1 --- 1-9 y = rand() % COL + 1; if ('0' == a_mine[x][y]) { a_mine[x][y] = '1'; //置1表示雷 mine_num++; } } //print_board(a_mine); } int get_mine_num(char a_mine[ROWS][COLS], int x, int y) { return a_mine[x - 1][y - 1] + a_mine[x - 1][y] + a_mine[x - 1][y + 1] + a_mine[x][y - 1] + a_mine[x][y + 1] + a_mine[x + 1][y - 1] + a_mine[x + 1][y] + a_mine[x + 1][y + 1] - 8 * '0'; } void mine_check(char a_mine[ROWS][COLS], char a_check[ROWS][COLS]) { int x = 0; int y = 0; int count = 0; while (count < ROW*COL - MINE_NUM) { printf("请输入排雷的坐标:"); scanf("%d%d", &x, &y); if (x >= 1 && x <= 9 && y >= 1 && y <= 9) { if ('1' == a_mine[x][y]) { printf("很遗憾,你被炸死了!n"); break; } else { int num = get_mine_num(a_mine, x, y); a_check[x][y] = num + '0'; print_board(a_check); count++; } } else { printf("输入有误,请重新输入n"); } } if (count == ROW * COL - MINE_NUM) { printf("恭喜你,排雷成功!n"); } }
四、最终效果
总结
扫雷游戏相对于三子棋来说要更难一些,需要用到2个二维数组,而且需要有很清晰的思路,一步一步去实现游戏的各项功能。要实现9X9的扫雷,就需要11X11的数组去存放,这样就可以保证在遍历9X9边缘数据的时候不会越界。目前实现的功能只能1个格子1个格子去排雷,不能一下展开一片,还有很多优化的空间,需要更进一步的学习。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)