地雷小游戏

  • 实现游戏的流程
    • 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语言实现)相关推荐

  1. C\C++开发的经典魔塔小游戏--(1)图形库的使用

    最近突发奇想,想起了当年和小伙伴们一起奋斗在村里黑网吧的日子.于是乎,萌发了动手写一个小游戏的念头.这个经典的小游戏名字叫"魔塔".大致就是你是一个骑士什么的,深入魔塔拯救大妹子的 ...

  2. C语言可以敲哪些小游戏,C语言可以写哪些小游戏?

    C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...

  3. CocosCreator 经典飞刀小游戏 (实战)

    这是一款比较经典的小游戏了,新手可以做些这种工程量比较小的游戏来练练手! 项目下载链接:https://download.csdn.net/download/qq_45021180/12172205 ...

  4. 各种热门经典Scratch小游戏,这里应有尽有(2)

    这是 各种热门经典Scratch小游戏,这里应有尽有(1) 续作,如有需要,请关注Scratch 热门作品专栏 更多惊喜等着你,记得给作者点个赞. 废话不多说,看以下 Scratch 小游戏资源网址 ...

  5. html实现经典赛车小游戏

    文章目录 1.设计来源 1.1 主界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151 ...

  6. 控制台推箱子小游戏C语言

    自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...

  7. C语言初学者复刻经典扫雷小游戏(图形界面,非黑白窗口)(含源码)

    注:除计时器和剩余雷数显示外,其他功能完美还原. 目录 一.程序演示 二.程序信息 1.基础信息 2.前言 3.所需文件 三.代码解析 1.头文件 2.变量声明 3.随机生成雷 4.生成雷位置矩阵 5 ...

  8. 各种经典java小游戏_Java是这个世界上最好的语言!

    为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...

  9. 经典c语言程序创意,49个经典年会小游戏(绝对有创意)C

    33.爆竹声响,瞎子吞蛋 道具:气球15.蒙眼布3.小方凳3.小盘3.鸡蛋 参加人员:分成若干组 游戏规则:各队抽出二名队员,比赛开始一队员用最快速度吹爆5个气球,吹完后另一队员蒙住双眼寻找鸡蛋,找到 ...

最新文章

  1. Eigen矩阵运算的混淆问题
  2. Expo大作战(十八)--expo如何发布成独立应用程序,打包成apk或者ipa,发布到对应应用商店...
  3. 【Linux 线程】常用线程函数复习《一》
  4. 编码服务正在步入云端
  5. C. Safe Distance(二分 + 并查集)
  6. 开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索
  7. 表格中建一个按钮_CAD | CAD和Excel的表格互换教程
  8. java vm for mac_Java VisualVM for Mac 构建方法
  9. Xcode9.0、Xcode9.1修改模拟器尺寸
  10. 2016考研数学四轮进阶复习规划
  11. mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
  12. 你所学的专业是怎么回事——摄影测量与遥感
  13. 如何启用计算机的休眠,电脑休眠
  14. unity 动态修改粒子特效
  15. css 如何选择同一个class下的第一个div?
  16. 原生js实现上拉加载
  17. 什么样的故障让阿里云换了总裁?
  18. NAS 详细搭建方案 - 安装NAS操作系统
  19. ubuntu换阿里源
  20. QQ2005 SP5貌似不错

热门文章

  1. 推荐系统中的召回算法--协同过滤
  2. Scala操作外部数据
  3. 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)
  4. TensorFlow在windows 下的安装
  5. 数字图像处理---有关特征提取的相关概念
  6. Python入门100题 | 第058题
  7. 【Linux】23_网络管理物理层详解
  8. Windows任务管理器 explorer 进程
  9. github关联域名,创建个人网站教程终结篇
  10. lucene join解决父子关系索引