三子棋的实现

对于三子棋的实现,谈一谈我的感想

首先呢,我们要考虑到三子棋的基本框架

  1. 进入界面需要一个菜单

  1. 对游戏的实现

(1). 实现游戏需要一个棋盘,这个棋盘其实就可以用一个二维数组来表示

(2). 我们要把这个棋盘打印出来,开始下棋

(3). 玩家与电脑进行轮流下棋,在下棋的过程中我们要注意去判断谁赢谁输或者是平局还是继续

下面,我们来实现这个三子棋:

我们要在这三个不同的板块里实现三子棋

game.h是进行包含头文件,函数声明用的

game.c是对游戏进行具体实现的

test.c是对游戏进行测试的

test.c:

test.c:c:

这是一个游戏实现的基本框架 首先要有一个菜单menu,然后进行选择

switch语句钟的input就是我们进行游戏或退出游戏的一个选择

do...while语句的input设计的合理性在于:

  1. 当input输入1时,进行游戏,当第一把玩完时还想玩此时input为1,1为真进入循环继续游戏

  1. 当input输入0时,退出游戏,0为假不在进入循环,停止游戏

  1. 当input输入别的数字的时候,输入错误会提示,然后不为0,为真,进入循环继续输入

然后是game游戏的实现:

test.c:

这里的ROW COL是在game.h里定义的 方便修改棋盘的大小

先定义一个二维数组来表示棋盘

这是我们理想中棋盘的样子 中间全部初始化为空格 所以接下来我们要将棋盘初始化全为空格

1.初始化棋盘

test.c

game.h

函数的声明

game.c

函数的具体实现

这里采用的是遍历的方法将数组初始化为空格

2.打印棋盘

test.c

game.h

函数的声明

game.c

函数的具体实现

在打印棋盘的时候 为了用ROW COL来控制我们打印棋盘的大小 以便我们对棋盘进行随时的大小更改

这里我们可以把每一个要输入数据的行和下面的---|---|---|看作是一组 用我们的ROW来控制 最后一行不打印---|---|--- 把---|看作一列来打印 用我们的COL来控制 最后一列不打印|

3.接下来我们开始下棋 下棋是一个循环的过程 所以下面的内容要进行循环

(1).玩家下棋

test.c

game.h

game.c

要创建两个变量来表示坐标

我们在这要判断坐标的合法性 不能随便输入值

所以这里

是判断坐标的合法性的 对于玩家来说不知道数组的下标是从0开始的 他们会以为是1 所以这里的范围就是1~3

其次我们还要判断这个坐标是否被占用了

这个就是判断坐标是否被占用 在这里用到的x-1 y-1是因为电脑直到数组的下标是从0开始的 刚才的x y的范围是1~3 其实下标的范围是0~2 所以这里要-1 如果这块空间 == 空格 那么就没被占用可以改成我们的值

玩家下棋被改成‘*’然后break跳出循环

当玩家下棋之后我们要把玩家下棋的信息显示出来 那么我们就打印一下棋盘就行了

(2).电脑下棋

电脑下棋肯定是电脑随机下棋 所以这里要产生随机数 所以我们用到了rand

在rand之前我们要调用srand 具体用法是

用在主函数里

test.c

game.h

game.c

这里的rand()%row 是产生了0~row-1的范围的随机数

rand()%col 是产生0~col-1的范围的随机数

if语句判断坐标是否被占用 如果没有被占用把该坐标改成‘#’ 跳出循环

如果被占用 那么继续循环产生随机数 直到没有被占用

然后显示打印的棋盘

(3).判断输赢

没下一部棋都要进行判断输赢 所以判断输赢需要在玩家和电脑下棋的每一步进行判断

有4种情况

玩家赢 -- 返回*

电脑赢 -- 返回#

平局 -- 返回Q

继续 -- 返回C

test.c

game.h

game.c

这里判断的是3行和3列如果相等了返回他们相等的值

如果三个*相等了 返回* 玩家赢

如果三个#相等了 返回# 电脑赢

判断对角线是否相等 也是返回对应的值

判断平局 我们用一个函数 IsFull 如果返回1 就是平局 如果返回0就不是 返回1 1为真 进入循环返回Q表示平局 如果返回0 0为假不进入循环 则不返回Q 就不是平局

实现平局的函数 遍历的方法 如果遍历一遍有空格那么棋盘就没满 就没有平局 返回0

如果遍历一遍没有空格 走出循环就说明棋盘被占满 返回1 是平局

这是我们test.c函数下棋判断输赢的测试

if语句中如果IsWin函数的返回值不是C说明游戏出现了其他的三种情况 那么我们break跳出循环在循环外部判断 如果返回C不进入if语句 循环游戏继续 不然我们在循环内部判断需要玩家下棋判断一次 电脑下棋再判断一次 判断次数比较多 所以在函数外部判断一次就够了 具体如下:

返回*玩家赢

返回#电脑赢

返回Q平局

到此 我们的三子棋就基本实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值