【三子棋小游戏的设计思路以及代码实现】
目录
一,设计思路
二, 代码实现
首先,欢迎各位点进我的文章。话不多说,正如标题一样,接下来,我来给大家讲解三子棋小游戏的设计思路以及代码实现。
一,设计思路
一. 大家应该都玩过王者荣耀,原神之类的游戏吧,虽然这个三子棋小游戏无法与之相提并论,但它仍然需要一个游戏该有的基本功能 ——选择是否进入游戏,游戏内容,游戏完毕后选择是否退出游戏。(此程序会有很多代码,所以要尽量使用言简意赅,一看就懂的函数来构造)
以上代码便实现了游戏的最外层的框架。
二.在确定了上述框架后,我们要填充游戏的具体内容,而三子棋小游戏需要的内容便是:
1.初始化棋盘
2.打印棋盘
3.玩家下棋
4.打印棋盘
5.判断游戏结果:(输赢,平局或者继续)以下不再赘述。
6.电脑下棋
7.打印棋盘
8.判断游戏结果。
9.打印游戏对局结果。
接下来对以上内容进行分析
其中,1.初始化棋盘 2.打印初始化的棋盘 9.打印游戏对局结果 是在玩家与电脑对峙的内容以外的部分。
而3.4.5.6.7.8是电脑与玩家对峙的部分,而对峙会持续几个回合,所以需要循环结构。
因此,1.2.9要放在循环之外,345678要放在循环内部。
如下,便是代码结构。(我们先假设*代表玩家,#代表电脑,C代表继续游戏,Q代表平局)。
如上图,代码的最终框架终于得到完善,设计思路也跟上面所讨论的相同。即为——1.2.9要放在循环之外,345678要放在循环内部。
接下来,便是整个程序中最难的地方——函数的代码实现。
二, 代码实现
由上图可知,我们创建了以下函数
可见数量之多,然而主函数所在文件(test.c)已经足够复杂,我们最好不要再去增加它的负担,不要破坏它的可读性。
于是,这时候,我们就要创建另外两个文件,分别是:game.c和game.h
game.h用来存放宏定义,头文件和函数声明。
game.c用来存放函数的具体内容(实现)。
接下来,只需要完成game.c和game.h中的内容,并将game.h引入test.c和game.c即可
我们需要依照上图中的函数按顺序一个一个的实现。
第一个函数
它的功能是初始化棋盘,将其全变为空白。因此,不需要返回值,参数需要有:棋盘第一个元素的地址(这里棋盘用二维数组来表示) 棋盘的行数 棋盘的列数
棋盘的行数和列数在头文件中 定义
要将棋盘全初始化为空白,需要遍历行和列,于是想到了用嵌套循环。以下是代码实现。
第二个函数
它的功能是打印棋盘,因此不需要返回值,参数同上。
理想中的三子棋棋盘应该是这个样子:
又因为我们不想把棋盘写死——仅能用于三子棋,所以我们要把棋盘拆分成模块来进行打印。
即:我们要打印n列这个东西,其实就是“ %c ”和“|” (注意%c的前后有空格 )。
但注意最后一列不需要“|”,所以需要判断结构。
然后还要打印分割线,也就是“---”和“|”,当然最后一列同样不需要“|”,需要判断。
并且棋盘最后一行也不需要分割线,也需要判断。
思考了这些之后,得到了如下代码。
第三个函数
它的返回值和参数同上
它的功能是在玩家输入两个坐标之后,在相应的位置打印“*” 。
但是玩家输入的坐标不可以超过棋盘范围,也不可以在已经有棋子的地方落子,因此需要判断结构,并且在输入错误之后,要提醒玩家重新输入,因此需要循环结构。(另外需要注意,玩家输入坐标等于二维数组坐标加一)
代码如下
第四个函数
它的返回值和参数同上
此函数的功能是命令电脑下棋,在随机位置打印“#”
同样的,电脑也不可以在超出棋盘范围下棋,不可以在有棋子的地方下棋。
但随机位置下棋该如何实现呢?
这就要用到<stdlib.h>中的rand()函数生成随机数了
而要用rand()函数还需要用srand()函数设置随机数起点,
要用srand()函数设置起点,还需要一个随机数(笑哭),读者是不是以为要没完了
幸好我们还有时间戳函数,它会根据时间来生成随机数,而使用它还需要包含<time.h>。
这下终于解决了随机数的问题,但是rand()生成的随机数范围过大,需要根据棋盘来限制范围。
也就是说需要这样——x=rand()%col y=rand()%row .
构思完毕,代码如下
这是在game.h中需要包含的。
以下是game.c中需要包含的
第五个函数,也是最后一个,好耶,但是还有点难,坏耶。
这个函数要判断对局的结果,我们需要让他在不同的情况下返回不同的值
1.玩家赢,返回“*”
2.电脑赢,返回“#”
3.平局,返回“Q”
4.对局继续,返回“C”
因此,它的返回值应该设置为char类型。参数同上。
如果有一行或者一列或对角线都是一个字符,则返回这个字符。如果都不是空格就返回“Q”。在此处写了一个函数判断棋盘是否被占满,专门服务于is_win函数。
博主技术力不足,暂时写死了(哭)
OK,以上便是全部内容了,欢迎大家讨论指正批评doge。
【三子棋小游戏的设计思路以及代码实现】相关推荐
- C语言实现三子棋小游戏(编程思路以及代码详解)
目录 前言 一.三子棋游戏的实现逻辑 二.创建菜单并控制游戏开始或游戏结束 三.创建棋盘并且初始化棋盘 四.打印棋盘并验证打印棋盘和初始化棋盘模块的实现 五.玩家下棋 六.电脑下棋 六.输赢判断 七. ...
- 三子棋小游戏思路及代码实现的详解
标题:猜数字小游戏 作者:@Ggggggtm 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 文章目录: 一.三子棋小游戏的简单介绍 二.三子棋的思路及代码实现 1.打印游戏菜单 2. ...
- 扫雷小游戏的设计思路以及实现的细致讲解
大家好,今天博主来介绍扫雷小游戏的设计思路以及实现,会很细致的呦,喜欢的话还请给个三连吧! 目录 设计思路 一,基础框架 二,基础框架的填充和完善 代码实现 一,初始化函数 二,埋雷函数 三,展示雷区 ...
- 三子棋小游戏带你走进编程世界(c语言版)
目录 一.游戏实现的整体思路 二.实现游戏大体框架 二.游戏函数的实现 1.初始化键盘 2.打印棋盘 3.下棋及胜负判断 (1)玩家下棋 (2)电脑下棋 (3)判断输赢 三.结语及源码 三子棋想必大家 ...
- 如何制作三子棋小游戏
首先,一个游戏的制作,必须由大化小,分步完成. 当我们想要制作三子棋小游戏时,必须先搞清楚这个小游戏的逻辑和原理. 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋 ...
- vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)
前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...
- 呆头呆脑的电脑----三子棋小游戏(C语言版)
目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...
- 趣讲用c语言实现三子棋小游戏
目录 直接先看看最后运行效果吧 三子棋如何设计的,及其步骤 1,源文件已经头文件的创建 2.创建主函数 3.test函数的创建 4.game函数的创建和运行 5.五个函数的实现 a.init_boar ...
- 三子棋小游戏(超详细)
目录 一.实现三子棋游戏的基本逻辑 二.具体的函数实现 1. 菜单函数 2. 棋盘的实现 2.1 棋盘的初始化 2.2 棋盘的打印 3. 玩家下棋 4. 电脑下棋 5.判断棋盘状态 三. 三个文件 3 ...
最新文章
- 区块链之比特币的潜在激励
- 麟龙指标通达信指标公式源码_通达信指标公式源码神龙指标公式
- 使用Throwable获得栈信息
- python pandas dataframe 行列选择,切片操作 原创 2017年02月15日 21:43:18 标签: python 30760 python pandas dataframe
- MFC窗口风格 WS_style/WS_EX_style
- 关于iOS里的做动画方法的差别与注意事项
- Cloud Native Infrastructures Meetup 北京 | 活动安排
- mybatis 动态SQL-foreach标签
- 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
- mysql error 1213_webgame中Mysql Deadlock ERROR 1213 (40001)错误的排查历程
- SpringBoot Banner 图片定制修改
- 码农与程序员,就好比哈士奇与狼
- Windows IIS IUSR IWAM 帐户密码同步
- ERR: partial write: points beyond retention policy dropped=10000
- 时差 频差 双星定位 matlab,双星时差频差无源定位系统定位算法工程指标分析
- nvidia nano平台tca9546接入两路imx219调试记录
- Java项目:SSM在线游戏装备交易系统
- openwrt用WEB刷固件型号不对问题强行处理
- 随机生成地址工具使用教程
- P1055 ISBN号码
热门文章
- 创维集团总裁杨东文:智能家居各自为战缺乏统一标准
- cmd命令行窗口运行py文件
- Oracle LAG()函数
- vue3+ts+vite+elementPlus实现文件上传导入excle给后端,并且清空上传文件后的列表,以及formData变成[object FormData]的解决方法
- Spring中StopWatch的使用
- python--plt.hist函数的输入参数和返回值的解释
- 云开发超多功能工具箱组合微信小程序源码/附带流量主功能介绍
- HTTP协议、URI和URL、报文首部
- B站刘二大人-数据集及数据加载 Lecture 8
- Android高性能音频之OpenSL ES录音流程(一)