C语言简易实现扫雷小游戏
本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下
经典扫雷游戏规则:
当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,边缘位置同理),就展示数字几.如果该处是雷则直接结束游戏.
用C语言实现基本思路:
假设我们要实现一个9*9棋盘的扫雷,为了计算边缘或者角落雷的个数我们可以将雷区变成12*12的棋盘,将最外围的棋盘全部变为0,这样不论是哪个位置的雷,我们都可以计算其周边8个位置雷个数的和,
1、设置游戏菜单,让用户输入数据选择是否进行游戏.
2、首先创建两个二维数组,一个用来存放雷区信息,另一个则是给用户展示的棋盘.(此处可直接创建两个12*12的数组,最后只给用户展示9*9部分即可)
3、将两个棋盘分别初始化
4、开始在存放雷区信息的棋盘上随机产生雷.
5、.给用户展示棋盘.
6、让用户输入坐标,并进行判断,如果是雷,直接游戏结束,如果不是,则计算周边雷的个数,并将数据展示在棋盘上.
#define _CRT_SECURE_NO_WARNINGS#include #include#include #include #define row 9//宏定义数据方便不局限于玩9*9扫雷#define col 9#define rows row + 2#define cols col+ 2 //创建游戏菜单.void menu() { printf("***********************************\n"); printf("*********** 1.开始游戏 ************\n"); printf("*********** 2.退出游戏 ************\n"); printf("***********************************\n"); } //初始化界面void Init(char arr[][cols], int a, int b,char c) { for (int i = 0; i < a; i++) {for (int j = 0; j < b; j++) {arr[i][j] = c; } }} //打印棋盘(雷区展示)void print(char arr[rows][cols]) { for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {printf("%c ", arr[i][j]); }printf("\n"); }} //设置雷区void leiqu(char arr[rows][cols]) { srand((unsigned int)time(0)); int count = 10; while (count) {int x = rand() % 9 + 1; int y = rand() % 9 + 1; if (arr[x][y] == '0') {arr[x][y] = '1'; count--; } }} //打印棋盘(用户展示)void showboard(char arr[rows][cols]) { for (int a = 0; a <= row; a++) {printf("%d ", a); } printf("\n"); for (int i = 1; i <=row; i++) {printf("%d ", i); for (int j = 1; j <= col; j++) {printf("%c ", arr[i][j]); }printf("\n"); }} //计算输入坐标周围有多少个雷int getlei(char arr[rows][cols], int x, int y) { returnarr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1] +arr[x][y - 1] + arr[x][y + 1] +arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] - 8 * '0'; } void start(char arr[rows][cols],char lei[rows][cols]) { int x = 0; int y = 0; int step = 0; while (step <= (rows * cols - 1)) {printf("请输入坐标(x,y):"); scanf("%d,%d",&x,&y); //判断输入坐标是否合法.if (x <= row && x >= 1 && y <= row && y >= 1) {if (lei[x][y] == '1') {printf("你踩雷啦,游戏结束!\n"); print(lei); //展示雷区信息,便于玩家查询.break; }else {arr[x][y] = getlei(lei, x, y)+'0'; system("cls"); //清屏操作showboard(arr); //再次展现棋盘,更新棋盘信息printf("(%d,%d)周边有%d个雷\n",x,y, getlei(lei, x, y)); //获取周边雷的数量并反馈给玩家step++; }}else {printf("输入坐标有误,请重新输入!!!\n"); } } } void game() { //创建两个二维数组,一个给用户展示,一个存放雷区信息. srand((unsigned int)time(0)); char user[rows][cols]; char lei[rows][cols]; //初始化两个棋盘 Init(user,rows, cols, '*'); //初始化棋盘为全* Init(lei, rows, cols, '0'); //初始化雷区棋盘全部为0 //设置雷 leiqu(lei); //print(lei); 调试时可以放开注释查看结果 //给用户展示棋盘 showboard(user); //用户输入坐标开始游戏 start(user,lei); } int main() { int input = 123; do {menu(); printf("请输入你的选择:"); scanf("%d", &input); switch (input) {case 1:game(); break; case 2:printf("退出游戏!"); input = 0; break; default:printf("输入数据有误,请重新输入!\n"); input = 555; //防止用户输入0,跳出循环.} break; } while (input); return 0; }
【C语言简易实现扫雷小游戏】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 孩子不是实现父母欲望的工具——林哈夫
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- opencv|opencv C++模板匹配的简单实现
- C语言浮点函数中的modf和fmod详解
- Node.js中readline模块实现终端输入