windows经典地雷小游戏(C语言实现)
地雷小游戏
- 实现游戏的流程
- 1.如何使用C语言表示双重身份的地雷图
- 2.打印一下showMap
- 3.让玩家输入坐标(row,col)
- 4.判断玩家是否踩雷
- 5.更新地图
- 6.如何判断玩家获胜
- 代码区域
实现游戏的流程
1.如何使用C语言表示双重身份的地雷图
我们可以使用一个showMap 并将它全部初始化为 * 并且每打印9个就换行
来表示对外显示的效果
再使用一个mineMap表示地雷地图
2.打印一下showMap
使用memset函数来直接赋初值 memset包含在string.h头文件中
memset(showMap, ‘*’, MAX_ROW * MAX_COL);
memset(mineMap, ‘0’, MAX_ROW * MAX_COL);
并且随机在mineMap中随机生成10个’1’表示地雷
使用rand 函数随机生成 row和col
int row = rand() % 9
int col = rand() % 9
3.让玩家输入坐标(row,col)
判断玩家输入的是否合法
如果row>MAX_ROW或者row<0
col>MAX_COL或者col<0
代表用户输入的不合法让用户重新输入
如果用户输入的位置已经被翻开了 也提示用户重新输入
4.判断玩家是否踩雷
5.更新地图
用户输入的坐标为(row,col)那么在他周围的坐标为:
那么我们只需要两重循环就可以判断出在(row,col)坐标周围有多少个地雷了并且将他表上’0’~‘8’
当然最重要的是如何将表更新
定义一个count 当旁边有雷就加1
那么就可以更新为:
showMap[row][col] = ‘0’ + count;
6.如何判断玩家获胜
其实这种方法很笨,是将不是雷的格子要全部翻开.
但是很可惜目前还没有学到使用第三方库,来显示扫雷中那种翻开是0的话旁边是0的格子全部自动翻开的样子
代码区域
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 10
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {memset(showMap, '*', MAX_ROW * MAX_COL);memset(mineMap, '0', MAX_ROW * MAX_COL);srand( (unsigned int) time(0));int count = 0;while (count < MINE_COUNT){int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (mineMap[row][col] == '1') {continue;}mineMap[row][col] = '1';count++;}
}
void printMap(char map[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {for (int col = 0; col < MAX_ROW; col++) {printf("%c ", map[row][col]);}printf("\n");}
}void updateMap(char showMap[MAX_ROW][MAX_COL],char mineMap[MAX_ROW][MAX_COL],int row, int col) {// count 表示翻开的位置的周围的地雷个数int count = 0;for (int r = row - 1; r <= row + 1; r++) {for (int c = col - 1; c <= col + 1; c++) {if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {// 坐标不合法 直接跳过continue;}if (r == row && c == col) {// 中间的位置不需要判断continue;}if (mineMap[r][c] == '1') {count++;}}}showMap[row][col] = '0' + count;
}
int main() {char showMap[MAX_ROW][MAX_COL] = { 0 };char mineMap[MAX_ROW][MAX_COL] = { 0 };init(showMap, mineMap);int openedCount = 0;while (1) {system("cls");printMap(showMap);// 打印地图int row = 0;int col = 0;// 让玩家输入地址来翻开printf("请输入一个坐标: (row col) \n");scanf("%d %d", &row, &col);// 判断玩家输入的坐标是否合法if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL) {printf("您输入的坐标不合法,请重新输入!\n");continue;}if (showMap[row][col] != '*') {printf("您输入的位置已经翻开了! 请重新输入!\n");continue;}// 判断玩家是否踩雷if (mineMap[row][col] == '1') {printf("您踩雷了 game over\n");break;}// 更新地图updateMap(showMap, mineMap, row, col);openedCount++;if (openedCount == MAX_ROW * MAX_COL - MINE_COUNT) {printf("恭喜您终于获胜了!\n");}}system("pause");return 0;
}
windows经典地雷小游戏(C语言实现)相关推荐
- C\C++开发的经典魔塔小游戏--(1)图形库的使用
最近突发奇想,想起了当年和小伙伴们一起奋斗在村里黑网吧的日子.于是乎,萌发了动手写一个小游戏的念头.这个经典的小游戏名字叫"魔塔".大致就是你是一个骑士什么的,深入魔塔拯救大妹子的 ...
- C语言可以敲哪些小游戏,C语言可以写哪些小游戏?
C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...
- CocosCreator 经典飞刀小游戏 (实战)
这是一款比较经典的小游戏了,新手可以做些这种工程量比较小的游戏来练练手! 项目下载链接:https://download.csdn.net/download/qq_45021180/12172205 ...
- 各种热门经典Scratch小游戏,这里应有尽有(2)
这是 各种热门经典Scratch小游戏,这里应有尽有(1) 续作,如有需要,请关注Scratch 热门作品专栏 更多惊喜等着你,记得给作者点个赞. 废话不多说,看以下 Scratch 小游戏资源网址 ...
- html实现经典赛车小游戏
文章目录 1.设计来源 1.1 主界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151 ...
- 控制台推箱子小游戏C语言
自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...
- C语言初学者复刻经典扫雷小游戏(图形界面,非黑白窗口)(含源码)
注:除计时器和剩余雷数显示外,其他功能完美还原. 目录 一.程序演示 二.程序信息 1.基础信息 2.前言 3.所需文件 三.代码解析 1.头文件 2.变量声明 3.随机生成雷 4.生成雷位置矩阵 5 ...
- 各种经典java小游戏_Java是这个世界上最好的语言!
为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...
- 经典c语言程序创意,49个经典年会小游戏(绝对有创意)C
33.爆竹声响,瞎子吞蛋 道具:气球15.蒙眼布3.小方凳3.小盘3.鸡蛋 参加人员:分成若干组 游戏规则:各队抽出二名队员,比赛开始一队员用最快速度吹爆5个气球,吹完后另一队员蒙住双眼寻找鸡蛋,找到 ...
最新文章
- Eigen矩阵运算的混淆问题
- Expo大作战(十八)--expo如何发布成独立应用程序,打包成apk或者ipa,发布到对应应用商店...
- 【Linux 线程】常用线程函数复习《一》
- 编码服务正在步入云端
- C. Safe Distance(二分 + 并查集)
- 开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索
- 表格中建一个按钮_CAD | CAD和Excel的表格互换教程
- java vm for mac_Java VisualVM for Mac 构建方法
- Xcode9.0、Xcode9.1修改模拟器尺寸
- 2016考研数学四轮进阶复习规划
- mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
- 你所学的专业是怎么回事——摄影测量与遥感
- 如何启用计算机的休眠,电脑休眠
- unity 动态修改粒子特效
- css 如何选择同一个class下的第一个div?
- 原生js实现上拉加载
- 什么样的故障让阿里云换了总裁?
- NAS 详细搭建方案 - 安装NAS操作系统
- ubuntu换阿里源
- QQ2005 SP5貌似不错