C语言实现简易扫雷
设定一个9x9的棋盘其中包含十个地雷,每次玩家选了一个位置之后那个坐标会返回一个整型数字,代表周围八个坐标内地雷的数量;如果选的为地雷则游戏失败;如果选完了除了地雷所在的坐标,则玩家获胜
首先,需要三个文件
1.game.h 实现大部分函数的声明以及引用的其他的头文件
2.game,c 游戏各种逻辑函数的定义
3.test.c 主函数以及游戏的测试
我的思路是这样的,想让主函数看起来更简洁一些,所以创建一个test()函数,把所有测试都放在内
下一步,设定几种情况:
如果玩家选1则开始游戏
如果玩家选0则退出游戏
如果玩家选了其他选项则输出“选择错误”然后让玩家重新选择
这里可以使用switch()语句:
这里,我们需要一个菜单放在前面,提示玩家选择
由于需要考虑到玩家可能输入错误或者玩不止一盘所以整体需要放在一个do while()循环中
此刻,我们需要两个棋盘一个用来布置雷的信息,一个用来放排查出来的信息。简单的来说,一个棋盘在后台放地雷,制作者可以看出地雷在哪里。这样调试以及运行逻辑都会更加简洁一些,另一个棋盘则为给玩家看的棋盘。
我们把这两个数组先存放在game()函数里,game函数用来实现各种逻辑
接着,思考一个坐标旁边有几个地雷数的逻辑:
由于是9x9的棋盘,但如果玩家输入的坐标再边上(比如1,1),旁边的坐标也应该计算在内
所以在后台写游戏逻辑时需要使用11x11的棋盘
首先需要初始化棋盘
先在game.声明
接着,在game.c写逻辑
接下来,需要打印棋盘让玩家看到,原理同上
有一点不同的是,需要打印坐标在旁边,让玩家更加容易的输入坐标
这样一来玩家可以轻易的知道想选的目标坐标在第几行第几列
下一步,需要布置雷在棋盘中
假设布置十个雷在9x9的棋盘中
然后在game.h中声明
接着,在game.c中定义
由于十个地雷都是随机摆放的,所以我们需要生成两个随机数,并把它们带入到棋盘上的x和y坐标
我们还需要在test()中声明一下
接着,每生成一个随机数就把该坐标中的0换成1
最后,我们需要写游戏里的最后一个主逻辑--排雷
先在game.h中声明
接着,在game.c中定义
如果剩下的行和列相乘,剩下所有没选的坐标总数相加小于地雷数,说明游戏继续
如果该坐标 = 1,则代表踩到地雷了,玩家失败
如果不为1,则使用get_mine_count()函数计算周围的地雷数
如果坐标非法,则让玩家重新输入有效坐标
如果剩下的行和列相乘,剩下所有没选的坐标总数相加等于地雷数,说明玩家已经选完了所有非地雷的坐标,玩家获胜
数字+字符'0'代表该数字的ASCII码值
get_mine_count()函数定义
地雷为'1',非地雷为'0',所以相加在一起再-'0'会得到该数字的ASCII码值
最后,再test.c中game()函数中实现所有函数逻辑
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击