三子棋的创建

简介: 三子棋的创建

1.1三子棋的创建

大家好,我是晓星航,今天为大家带来的知识是三子棋的创建以及运行过程。

下面是为写三子棋代码而先创建好的源文件以及头文件:

他们的作用如上述图可知game.h主要是函数声明,game.c是函数逻辑的实现,test.c主要用来创建函数以及使用函数。

在创建好3个文件后,我们先写主函数:

然后再制作一份菜单,方便使用者进行选择:

菜单制作完毕后便是我们test函数的逻辑实现了:

游戏的基本逻辑----输入1:开始游戏。 输入0:退出游戏。 输入default:输入错误,重新输入。

逻辑写好后我们将需要引用的头文件都放在game.h中,然后直接引用我们自己的头文件:

之后我们引用函数需要的头文件全部放在game.h中即可!

2.1上述基本工作做完后我们便可以开始三子棋棋盘的打印了!

2.1.1首先我们创建一个字符数组接受棋盘的内容:

然后定义两个符号常量用来规定棋盘大小:

将字符数组中全部元素初始化为’ ‘。(’'中为空格)

这里先自己定义一个函数InitBoard,在test.c中创建及运行,在game.h中声明,最后在game.c中实现。

声明:

实现:

以上操作完成之后我们将棋盘初始化好了。

2.1.2接下来我们完成棋盘的打印,打印棋盘我们自己创建DisplayBoard函数,过程和上述相同,实现过程如下:

用循环的方法来写的好处是当行和列改变时棋盘也会自己跟着改变不需要我们重新编写代码。

坚持住就快完成了!😆

3.1玩家下棋的实现

棋盘创建以及初始化好后我们就要开始写玩家下棋的代码了。

玩家下棋我们创建player_move();函数,实现过程如下:

我们先要输入坐标然后判断坐标合法性以及该坐标又没有被占用,如果合法且没被占用我们即用*填入该位置。

玩家下棋后便是电脑下棋了。

4.1电脑下棋的实现

电脑下棋我们创建函数:computer_move();其实现过程如下:

注:电脑下棋需要生成随机数rand(); 而rand();函数的引用可以按如下步骤实现:

srand((unsigned int(time)NULL)); ---- 引头文件: #include #include

上述一写二引用完成后,再用随机数只需要写成: rand();即可

电脑下棋我们填入’#’

电脑和玩家都下完棋后我们就要开始考虑三子棋输赢的逻辑了。

5.1三子棋输赢的判断

5.1.1在这里我们这样规定:

1‘玩家赢----‘*’

2’电脑赢----‘#’

3‘平局-------‘Q’

4’继续-------‘C’

用is_win函数来判断输赢,is_win函数再test.c中实现逻辑为:

注意:判断输赢是没下一步棋判断一次,不论是玩家走还是电脑走都个要判断一次,不要漏写!(作者一开始就不小心漏写了,哈哈哈😂)

is_win的内部实现逻辑为:

它主要判断了三子棋 横竖斜 三种情况下有没有全部相同的符号,如果有通过返回一个字符来判断是电脑赢还是玩家赢。*----玩家赢。#----电脑赢。

若三种情况下没有相同元素且棋盘上位置全部占满则为平局。

5.1.2在上面函数中我们还用到了判断函数三子棋是否全部填满的is_full函数,他的实现逻辑如下:

is_full函数的实现逻辑很简单,它将二维数组的每个元素和 (空格符号)进行比较,如果每个元素都不为 (空格符号),那么棋盘就全部下满了,此时返回1为真即三子棋全部下满还没有分出胜负,返回’Q’----平局。

6.1运行三子棋游戏

此时我们的三子棋代码便大功告成,我们可以开始运行他了!!!😉

一不小心就让电脑赢了呢。

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

目录
相关文章
|
SQL 时序数据库
Influx Sql系列教程六:insert 修改数据
在influxdb中没有专门的修改数据的update语句,对于influxdb而言,如果想修改数据,还是得使用我们前面的说到的insert来实现,那么怎么判断一条insert语句是插入还是修改呢?
938 0
|
数据安全/隐私保护 iOS开发 开发者
hbuilderx打包应用上传到app store构建版本的教程
hbuilderx打包应用上传到app store构建版本的教程
292 0
|
算法 Java Go
运行时管理GO与Java的概要对比
【5月更文挑战第17天】本文介绍Go、Python和Java的运行时机制各异。Go是编译型语言,其runtime负责内存管理、GC和协程调度,强调性能和低延迟。Java的JVM兼顾跨平台和性能,使用字节码和JIT编译,其GC策略复杂且高效。三种语言在设计和优化上各有侧重,适用不同场景。
343 3
|
监控 数据可视化 安全
JVM工作原理与实战(二):字节码编辑器jclasslib
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了字节码编辑器jclasslib的安装和使用等内容。
442 4
|
数据采集 弹性计算 供应链
阿里云服务器ECS收费方式:节省计划、按量付费、抢占式实例、包年包月区别及选择参考
阿里云服务器ECS提供灵活的计费方式,在通过云服务器ECS产品页面购买的时候,默认可选的付费类型为包年包月、按量付费和抢占式实例,而节省计划是在已经持有一定数量的按量付费实例,希望进行成本优化时通过“节省计划购买方案测算”选择的计费模式。本文来为大家介绍一下这些付费类型的主要区别及选择参考。
阿里云服务器ECS收费方式:节省计划、按量付费、抢占式实例、包年包月区别及选择参考
|
消息中间件 缓存 Dubbo
java线程池ThreadPoolExecutor八种拒绝策略浅析
java线程池ThreadPoolExecutor八种拒绝策略浅析
495 0
java中Stream流中的forEach、filter、map、count、limit、skip、concat
java中Stream流中的forEach、filter、map、count、limit、skip、concat
589 0
|
前端开发
css用法 :is()、:where()和:has()的用法
【4月更文挑战第2天】 css用法 :is()、:where()和:has()的用法
301 12
|
缓存 Linux
[cmake] ---- set_property
[cmake] ---- set_property
509 1