C语言实现扫雷小游戏
2019-04-08 12:17
891 查看
大家都玩过扫雷吧!这是我们的童年记忆,今天就带大家用C语言实现扫雷程序的设计。
//1.二维数组表示地图 (1)show_map玩家看到的地图 数字表示已翻开和*表示未翻开(2)mine_map地雷布局图 每个位置标记是否是地雷 0、1 //2.初始化 两个地图 (1)show_map 初始化把每个元素都设为* (2) mine_map 初始化随机生成10个地雷 //3.打印地图 4.提示输入一个坐标 表示翻开某个位置(进行合法性判定) 5.该位置是否是地雷 如果是地雷 游戏结束!6.如果不是地雷 先判定是否胜 //利(把所有不是地雷的格子都翻开)7. 给当前位置格子生成一个数字表示周围有几个雷(不实现翻开一片) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int menu() { printf("*****扫雷*******\n"); printf("****************\n"); printf("***1.开始游戏***\n"); printf("***2.结束游戏***\n"); printf("****************\n"); printf("请输入你的选择:\n"); int choice = 0; scanf("%d", &choice); return choice; } #define MAX_ROW 9 #define MAX_COL 9 #define MINE_COUNT 10 void init(char show_map[MAX_ROW][MAX_COL], char mine_map[MAX_ROW][MAX_COL]) { //对于show_map 都设为* for (int row = 0; row < MAX_ROW; ++row) { for (int col = 0; col < MAX_COL; col++) { show_map[row][col] = '*'; } } //对于mine_map 随机生成地雷 使用0不是地雷 1是地雷 for (int row = 0; row < MAX_ROW; ++row) { for (int col = 0; col < MAX_COL; col++) { mine_map[row][col] = '0';//数字0也可以 } } int n = MINE_COUNT; while (n > 0) { //生成一组随机坐标 int row = rand() % MAX_ROW; int col = rand() % MAX_COL; if (mine_map[row][col] == '1') { //该位置已经是地雷 需要重新生成 continue; } mine_map[row][col] = '1'; --n; } } //打印地图 void PrintMap(char map[MAX_ROW][MAX_COL]) { //不光打印地图 也打印坐标 //先打印第一行 printf(" "); for (int col = 0; col < MAX_COL; ++col) { printf("%d ", col); } printf("\n"); //打印一个分割线 for (int col = 0; col <= MAX_COL - 2; ++col) { printf("---"); } printf("\n"); for (int row = 0; row < MAX_ROW; ++row) { printf(" %d| ", row); //打印本行的每一列 for(int col = 0; col < MAX_COL; col++) { printf("%c ", map[row][col]); } printf("\n"); } } void UpdataShowMap(int row, int col, char show_map[MAX_ROW][MAX_COL], char mine_map[MAX_ROW][MAX_COL]) { //根据当前位置判定这个位置周围8个格子有几个地雷 //并更新到show_map中 int count = 0; if (row - 1 >= 0 && col - 1 >= 0 && row - 1 < MAX_ROW&&col - 1 < MAX_COL&&mine_map[row - 1][col - 1] == '1') { ++count; } if (row - 1 >= 0 && col >= 0 && row - 1 < MAX_ROW&&col < MAX_COL&&mine_map[row - 1][col] == '1') { ++count; } if (row - 1 >= 0 && col + 1 >= 0 && row - 1 < MAX_ROW&&col + 1 < MAX_COL&&mine_map[row - 1][col + 1] == '1') { ++count; } if (row >= 0 && col - 1 >= 0 && row < MAX_ROW&&col - 1 < MAX_COL&&mine_map[row][col - 1] == '1') { ++count; } if (row >= 0 && col + 1 >= 0 && row < MAX_ROW&&col + 1 < MAX_COL&&mine_map[row][col + 1] == '1') { ++count; } if (row + 1 >= 0 && col - 1 >= 0 && row + 1 < MAX_ROW&&col - 1 < MAX_COL&&mine_map[row + 1][col - 1] == '1') { ++count; } if (row + 1 >= 0 && col >= 0 && row + 1 < MAX_ROW&&col < MAX_COL&&mine_map[row + 1][col] == '1') { ++count; } if (row + 1 >= 0 && col + 1 >= 0 && row + 1 < MAX_ROW&&col + 1 < MAX_COL&&mine_map[row + 1][col + 1] == '1') { ++count; } //得到了周围8个格子中的地雷的个数 //假设count为2 实际看到的内容是 show_map[row][col] = '0' + count; } void game() { //1.先创建地图,并初始化 char show_map[MAX_ROW][MAX_COL]; char mine_map[MAX_ROW][MAX_COL]; //已经翻开的空格个数(非地雷) int blank_mine_count_already_show = 0; init(show_map, mine_map); while (1) { PrintMap(show_map); printf("请输入一组坐标(row col):\n"); //PrintMap(mine_map); //调试临时加的 printf(""); int row = 0; int col = 0; scanf("%d %d", &row, &col); //用户输入坐标 并进行合法性检测 system("cls"); if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) { printf("您的输入不合法!请重新输入\n"); continue; } if (show_map[row][col] != '*') { //已翻开 printf("您输入的位置已经翻开了!\n"); continue; } //判定是否是地雷 if (mine_map[row][col] == '1') { printf("您踩雷了!\n"); PrintMap(mine_map); break; } //判断是否胜利 //判定所有非雷位置都被翻开了 ++blank_mine_count_already_show; if (blank_mine_count_already_show == MAX_COL * MAX_ROW - MINE_COUNT) { printf("游戏胜利!\n"); PrintMap(mine_map); break; } //统计当前位置周围雷的个数 UpdataShowMap(row, col, show_map, mine_map); } } int main() { while (1) { int choice = menu(); if (choice == 1) { game(); } else if (choice == 2) { printf("欢迎下次来玩!\n"); break; } else { printf("您的输入有误!\n"); } } return 0; system("pause"); }
程序运行结果如图所示:
大家下去也跟着实现一下吧。多练习练习。
相关文章推荐
- C语言实现扫雷小游戏
- 小游戏---扫雷(C语言实现)
- 【扫雷】编写一个小游戏--扫雷的c语言实现
- 小项目 : C语言实现扫雷小游戏
- C语言实现扫雷小游戏
- [置顶] 小游戏:扫雷 (C语言实现扫雷的基本功能)
- C语言实现小游戏--扫雷
- c语言实现小游戏-扫雷
- 用c语言实现经典小游戏———扫雷
- C语言实现简易2048小游戏
- 小游戏——三子棋(C语言实现)
- C语言实现简单扫雷
- 纯js实现扫雷小游戏
- 小游戏三子棋的C语言代码实现
- 小游戏 | 井字棋(三子棋)的C语言实现
- 使用C语言实现随机小游戏源码
- 用c语言实现扫雷游戏
- c语言实现的扫雷游戏
- C语言实现的一个简单的猜数小游戏
- C语言小游戏:简易版扫雷