C语言初阶之三子棋小游戏

文章详细介绍了三子棋游戏的规则,包括棋盘创建、初始化、打印、玩家和电脑下棋的逻辑,以及判断输赢的算法。通过宏定义增强代码可读性和扩展性,使用多文件结构组织代码,分别在game.h、game.c和test.c中定义变量、函数声明和实现。文章还讨论了电脑随机下棋的策略和判断胜负的方法,包括行、列和对角线的检查,以及如何处理平局和游戏继续的情况。
摘要由CSDN通过智能技术生成

三子棋游戏规则

三子棋,用“井”字分出3×3的格子,双方轮流下棋子,可以用O和X来区别,也可以用 * 和#区别,在行,列,对角线将自己的三个棋子走成一条线,就算获胜。

例图:
在这里插入图片描述
在这里插入图片描述

主框架的搭建

1:先准备好游戏菜单,规则为 1 为玩游戏 0 为退出游戏。
2:打印完菜单,准备输入数字,如果1,就开始游戏,如果0,就退出游戏,如果是其他,则选择错误,返回并重新输入数字。这时候就需要循环了,因为至少需要执行一次,所以用do,while循环,条件为输入的那个数。

在这里插入图片描述

游戏的实现

创建棋盘

我们需要准备一个二维数组来存放一个三乘三的棋盘,棋盘使用3行3列的二维数组来表示,元素类型是char。

#define ROW 3  //行
#define COL 3  //列
char board[ROW][COL];//棋盘数组

使用宏定义的原因:
1.推高代码可读性,后续代码中遇到3,方便理解含义。
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。

初始化棋盘

定义函数与参数,并且在头文件中声明。
棋盘初始化时,需要看起来是空白的,所以把棋盘初始化为空格。

在这里插入图片描述

打印棋盘

1,声明和定义打印棋盘的函数。
2,棋盘可以看为两部分,数据为一部分,分隔符为一部分,打印数据时,打印数据和“ | ”,如果最后一列的时候,就不需要打印“ | ”了。
接下来打印分隔信息,打印“—”与“ | ”,同上,在最后一行的时候不需要打印分隔符,打印完换行。

在这里插入图片描述

玩家下棋

1,玩家下棋需要输入下标,检查坐标是否在范围之内。
2,坐标合法需要看这个范围内有没有被占用,如果没有被占用则等于 ‘ * ’ , ‘ * ’ 表示玩家下棋。
3,注意的是,数组下标从0开始,输入的坐标和数组的坐标是相差的,需要减一才能相等。

在这里插入图片描述
玩家落子时注意事项:
1.玩家落子需要在棋盘范围内。
2.玩家要在棋盘上空的地方落子。
3.如果输入的坐标不满足要重新输入。

电脑下棋

电脑随机下棋,’ # ’表示电脑下棋。
因为电脑是随机下棋,所以我们需要产生一个随机坐标,所以我们需要一个随机值。

电脑下棋注意事项:
1.要在主函数中使用srand((unsigned int)time(NULL))。
将时间戳作为随机数的起点(头文件:#include <time.h>),确保得到的行列坐标是真随机。
2.在函数中使用rand()函数产生随机坐标(头文件:#include <stdlib.h>),还要确保坐标在棋盘范围内。
3.要在棋盘上空的地方下棋。

在这里插入图片描述

判断输赢

当玩家输入一个棋子需要判断一下玩家是否赢了,利用返回结果判断胜负:
当电脑输入一个棋子需要判断一下电脑是否赢了,利用返回结果判断胜负:

要返回4种不同的状态:

玩家获胜—> ‘ * ’
电脑获胜 —> ‘ # ’
平局 —> ‘ Q ’
继续 —> ‘ C ’

1.获胜
(1)判定所有的行(一行字符全部相同,即获胜)
(2)判定所有的列(一列字符全部相同,即获胜)
(3)判定两条对角线(一条对角线字符全部相同,即获胜)
注意:需排除空棋盘的情况(即全为空格,没有下棋子)
2.平局
(1)使用IsFull函数判断棋盘是否已满。
(2)返回1,表示棋盘满了,返回0,表示棋盘没满。
(3)如果棋盘满了未分出胜负,平局。
(4)如果棋盘没满,游戏继续。

写代码判断行,列,对角线时,固定写死了3行,3列,此处可以修改,让游戏不局限于三子棋。
在这里插入图片描述

玩家赢,如下图:
在这里插入图片描述

电脑赢,如下图:
在这里插入图片描述

平局,如下图:
在这里插入图片描述

如果电脑太笨怎么办,总是玩家赢,如何让玩家赢不了电脑。俗话说没有笨的电脑,只有笨的程序员,这个代码在这里只是小白版本,还有很大的改进空间。

总代码

我们平常写代码的时候,如果程序比较大,直接包含在一个文件中就会非常容易混乱,并且不容易维护,这个时候就需要用到多文件。使用多文件的时候可以将整个程序拆分开来,比方说分为头文件、函数文件、主函数文件。当然如果有需要的话,还可以继续细分。
我们可以将上方三子棋代码进行分块来写:
首先我们可以创建3个文件:一个头文件game.h,两个源文件game.ctest.c
game.h是三子棋游戏代码的声明,game.c是三子棋游戏代码的实现,test.c是主函数文件,测试三子棋游戏的逻辑。
在这里插入图片描述

game.h
在game.h里可以先声明一些变量如(ROW和COL)和头文件,和要定义的函数的声明。
在这里插入图片描述

game.c
在game.c里引用 #include “game.h”,引用后可以使用game.h里面的定义的变量和函数。
在这里插入图片描述

test.c
然后在test.c主函数文件里引用 #include “game.h”,引用后可以使用game.h里面的定义的变量和函数。
在这里插入图片描述

总结

感谢观看,欢迎三连,如有错误,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值