首页 > 其他分享 >如何用C语言做一个三子棋游戏

如何用C语言做一个三子棋游戏

时间:2023-05-27 21:01:37浏览次数:39  
标签:玩家 字符 游戏 创建 C语言 空格 三子 棋盘 函数

如何来做一个三子棋游戏呢,首先老规矩先来做一个简易的菜单

如何用C语言做一个三子棋游戏_数组名

下一步让这个菜单能够实现它的功能,选则 1 就开始游戏,选择 0 就退出游戏,不是 1 不是 0 那就是选错了提示选择错误。

创建一个变量 input 用来存放我们输入的数字,利用 do  while (因为do while 循环最少可以循环一次,比较符合我们打印菜单的需求)循环来完成重复选择的实现,switch 多分支语句来进行判断。(建议到这的时候就可以测试一下了哦,可以为后期找BUG节省时间,如果要测试的话把 game()  函数换成 printf("开始游戏\n"): 就可以了)

如何用C语言做一个三子棋游戏_分割线_02

好了现在我们菜单已经做好了开始做游戏内容,这里我们创建一个 game() 函数,创建一个字符的二维数组(因为要用字符的形式打印)代表我们的棋盘大小,这里的 ROW 和 COL 是全局变量,分别是行和列的意思。创建函数 InitBoard() 初始化棋盘把数组名和参数给它就行了。( 因为我这里是多文件编程,所以我放在头文件里了,不想多文件写的可以自行更改。)

如何用C语言做一个三子棋游戏_for循环_03

如何用C语言做一个三子棋游戏_数组名_04

这里我们用 for 循环创建 i 行 j 列,因为这里的棋盘不需要接收数值只需要创建好就行所以用void,这里用字符 '空格'来创建棋盘

如何用C语言做一个三子棋游戏_for循环_05

虽然棋盘创建好了但是光是空格玩起来效果不好,所以我们优化一下棋盘,加上分割线。效果如下(技术有限有点简陋,见谅☺)

老样子用 for 循环创建 i 行 j 列的分各线,最终创建的分割线会多一条所以我们要减一行一列的分割线,为了让我们输入的字符在在中间我们要在棋盘上打印空格字符空格,这里我们创建 DispiayBoard()  函数来打印棋盘,一样的把数组名和棋盘参数传给函数就行

如何用C语言做一个三子棋游戏_分割线_06

如何用C语言做一个三子棋游戏_分割线_07

如何用C语言做一个三子棋游戏_分割线_08

好了棋盘已经做好了,现在我们需要开始下棋了,创建一个函数 PlayerMove()来表示玩家下棋,这里我们下棋用坐标来完成,先两个变量 x , y 来代表横坐标和纵坐标,并且存放玩家输入的坐标,然后提示玩家下棋,因为我们在获胜或者棋盘结束之前要一直落子,所以我们这里用一个while 循环来重复下棋,提示玩家需要输入坐标中间要用空格分开,因为不是所有的玩家都是程序员,我们知道下标是从0开始的,但是有些人是不知道的,所以我们要符合大众群体,给玩家把坐标改成从1开始,然后设置两个限定条件,一、落子不能超过棋盘  二、不能在落过子的地方重复落子。这里我们用if 判断如果输入的坐标里放的是字符 ‘空格’ 那么我们就可以落子,这里我们用 * 来代表玩家的棋子,如果不是 ‘空格’ 那么就说明已经有棋子了,提示坐标被占用,如果超出了棋盘提示坐标越界。

如何用C语言做一个三子棋游戏_数组名_09

如何用C语言做一个三子棋游戏_分割线_10

下一步创建一个对手,让电脑来和我们下棋,创建一个函数ComputerMove() 代表电脑下的棋子,同样电脑也需要坐标来下棋 (x , y)提示这是电脑下的棋,一样的结束之前重复下棋,用while循环实现,给电脑一个随机数,这里用到函数rand()用srand ()把电脑的时间戳传给rand() ,生成的随机数要给它一个限制不能超过棋盘,就是 0~row-1 和 0~col-1,一样的条件,空格可以落子,不是就继续找直到找到空格,落完子后退出循环,电脑棋子就用 #  来表达(建议这里就可以测试一下了哦)

如何用C语言做一个三子棋游戏_数组名_11

如何用C语言做一个三子棋游戏_数组名_12

如何用C语言做一个三子棋游戏_分割线_13

最后就是判断输赢了,假设玩家赢就返回 * 电脑赢了就返回 # 平局就返回 Q ,还没结束继续游戏就返回 C 来表示

如何用C语言做一个三子棋游戏_for循环_14

下一步创建一个字符变量接收判断后返回的字符

如何用C语言做一个三子棋游戏_分割线_15

我们这里创建一个函数IsWin()用来判断谁赢,还是平局因为玩家和电脑下完都需要判断,所以两个都要用函数返回的值来对比一下,如果不等于我们的字符C那么就说明游戏结束了,那么就开始判断,根据前面的假设,如果是字符*那么玩家赢,是字符#就是电脑赢,最后只剩下字符Q那么就是平局。

如何用C语言做一个三子棋游戏_分割线_16

好了逻辑整理好了,开始实现函数IsWin(),先判断 行我们用for循环来判断棋盘的行,如果这一行里字符相同,并且不是空格,那么这一行里是谁的棋子就返回谁的字符( *  或者 # ),除了行相同还有列,再用for循环来判断棋盘的列,如果一列字符相同,并且不是空格,那么也一样返回这一列里是谁的棋子返回谁的字符( * 或者 # ),行和列判断完了就是对角线上的了,那么就是坐标中的第一行第一例,第二行第二列,第三行第三列这一条斜线。以及第一行第三列,第二行第二列,第三行第一列这一条斜线。(有没有大佬教我怎么把他们换成变量啊,嘿嘿)

如何用C语言做一个三子棋游戏_数组名_17

平局需要在创建一个函数来判断IsFull()一样把数组名和棋盘参数传给他for循环在棋盘上找字符空格,如果有那么就继续,没有了就返回 1。如果函数lsFull()返回 1 那么就返回字符Q代表平局。如果都不是就把字符C返回去继续游戏。

如何用C语言做一个三子棋游戏_for循环_18

如何用C语言做一个三子棋游戏_for循环_19

最后附上完整代码,分别是头文件,游戏实现,游戏框架(小白出没大家见谅)

如何用C语言做一个三子棋游戏_分割线_20

如何用C语言做一个三子棋游戏_分割线_21

如何用C语言做一个三子棋游戏_分割线_22

标签:玩家,字符,游戏,创建,C语言,空格,三子,棋盘,函数
From: https://blog.51cto.com/u_16103543/6363075

相关文章

  • C语言猜字游戏记录
    1.猜字游戏的逻辑2.猜字游戏主体结构的实现3.菜单函数4.玩游戏函数##用rand函数和时间戳达到随机......
  • C语言课程设计[2023-05-27]
    C语言课程设计[2023-05-27]C语言课程设计综合性设计实验说明设计要求:(1)功能完备,实现用户需求(2)用户界面友好易用(3)必须调试通过,能够正常运行(4)驼峰命名、合理注释、模块化程序功能实现等规范化编程(5)保证源程序可读性。对系统常量等数据要求规范处理,对于常用......
  • x86游戏逆向之实战游戏线程发包与普通发包的逆向
    网游找Call的过程中难免会遇到不方便通过数据来找的或者仅仅查找数据根本找不到的东西,但是网游中一般的工程肯定要发给服务器,比如你打怪,如果都是在本地处理的话就特别容易产生变态功能,而且不方便与其他玩家通信,所以找到了游戏发包的地方,再找功能就易如反掌了。 在游戏逆向过程......
  • 《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新一期视频教程:DSP视频教程第12期:TI开源分享IQmathDSP源码,适用于所有Cortex-M内核,本期教程做个手把手移植(2022-05-22)https://www.armbbs.cn/forum.php?mod=viewthread&......
  • C语言--检测号码是否合法
    输入号码,检测是否合法intIfTel(constchar*p,intlen){ inti=0; if(len!=13) //号码长度不合法 return1; if(p[0]!='8'&&p[1]!='6') //号码非86开头 return3; for(i=0;i<len;i++) { if(p[i]<'0'||p[i]>&#......
  • 打卡 c语言趣味编程 掷骰子
    问题描述:骰子是一个有六个面的正方体,每个面分别印有1~6之间的小圆点代表点数。假设这个游戏的规则是:两个人轮流掷骰子6次,并将每次投掷的点数累加起来。点数多者获胜:点数相同则为平局。要求编写程序模拟这个游戏的过程,并求出玩100盘之后谁是最终的获胜者。思路:要得到6个......
  • C语言程序设计-谭浩强(第五版)
    第1章程序设计和C语言1.1什么是计算机程序1.2什么是计算机语言1.3C语言的发展及其特点1.4最简单的C语言程序1.4.1最简单的C语言程序举例1.4.2C语言程序的结构1.5运行C程序的步骤与方法1.6程序设计的任务第2章算法——程序的灵魂2.1程序=算法+数据结构2.2什么是算法......
  • C语言函数大全-- y 开头的函数
    (C语言函数大全)y开头的函数1.yperror1.1函数说明函数声明函数功能voidyperror(char*msg);在UNIX和Linux系统中用于将NIS(NetworkInformationService)错误代码转换为相应的错误信息参数:msg:指向一个字符数组的指针,表示附加的消息yperror()函......
  • C语言学习日志07
    现在就是有个疑惑,不知道C语言学习完之后还要不要学习一些衔接的东西还是直接学习python,因为我本身是一个带专哥们,专升本需求python占了60分,现在大一,感觉学习完C语言后就得马不停蹄的学习python了。--------------------------------------------------------------------------然后......
  • Thread Exercises C语言线程
    1/4Assignment4:ThreadsDue11Junby23:59Points10Availableuntil15Junat23:59Assignment4-ThreadExercisesDuedate11:59pm-SundayWeek13.Thisassignmentisdesignedtotestyourunderstandingofthreads,mutexesandsignalling.Download......