2024年0608日练习(三子棋)

三子棋小游戏设计

整体思路

头文件game.h写函数声明

源文件game.c写函数定义

源文件test.c写主函数

学习时间4天的小萌新第一次,希望各位大佬能够提出宝贵的珍贵意见,不玻璃心,虚心接受任何批评

首先准备一个菜单,让玩家进行选择,do while循环嵌套switch循环通过玩家输入值进行判断游戏是否进行,通过数组来创建棋盘格式,然后玩家和电脑可以通过坐标确定board[i][j]的位置,从而用符号来赋值,最后设立胜利条件(一条线三个相同),判断玩家和电脑谁胜利,或者平局

一、game.h函数声明

二、main函数

首先通过打印一个菜单,让玩家选择(1)开始游戏还是(0)退出游戏。如果收到输入值1,因为至少得执行一次,这里我选择了通过do-while循环,然后嵌套switch循环,因为这里想到input值为1或0,同时也作为了循环执行的条件,如果case 1就开始游戏,在game.c源文件中编写整个游戏game()代码;如果case 0,就退出游戏;如果default(收到非1或0的数字),会进行提示然后下一次循环重新开始输入。最后while表达式同样是通过input接收到的值判断是否进行下一次循环

二、game()函数定义

1.初始化数组InitBoard()

        对二维数组进行初始化,让其每一个元素都为空格,人为创造空白的样子,防止后续打印三子棋棋盘时排列不规范        

2.利用数组打印棋盘格式DisplayBoard()

                自己想弄出左图这种格式,然后想着用for循环的嵌套,通过空格-数组值-空格-竖线(”  %c  |“)的格式打印三行,又考虑到竖线最右边没有,然后在打印竖线的时候将条件改为了列数-1;接着还得打印分隔符,同上,思路一模一样,不一样的是只需打印两行分隔符,将i的条件同样改为row-1即可

​​​

3.玩家下棋移动Playermove()
       

        这里二维数组的格式为3×3,通过输入scanf()输入坐标的方式来确定board[i][j]的位置,因为害怕超出可输入坐标范围,这里要对输入的值进行一个判断,不能超出列数和行数,而且还得判断是否已经被下过,如果没被下过才能进行赋值成‘*’,如果被下过会进行提醒重新选择下棋区域。又因为数组的下标是从0开始,而一般人会以1作为开始,所以这里通过scanf函数接收到的两个值应该-1。

4.利用随机函数来进行模拟电脑下棋Computermove()

使用随机函数rand()来获得一个随机值,然后分别%上一个行数和列数,来控制他的值在0~2之间

然后循环判断board[x][y]是否为空格,如果不为就赋值为‘#’,直到找到可以赋值的位置为终止,跳出循环。

5.胜利条件判断函数Iswin()

由于我刚学几天没,而且数组只是3×3,所以我将胜利条件全部写出了哈哈哈,这里是先规定'*'表示玩家胜利,‘#’表示玩家胜利,'q'表示平局,'c'表示继续,通过循环判断每一行和每一列以及对角线是否相等,如果都相等就返回这个值。这里判断平局是通过写了另外一个函数来判断数组是否还有空格,如果没有空格,就代表坐标已被写满,就输出'q';如果没有满,就返回‘c’

三、运行效果

如果大佬有修改意见,还请不吝教诲,小弟我必当奉其箴言,学习了c语言差不多4天,感觉学习的时候都能听懂,一敲代码就只能发呆,希望通过长久的学习能够尽快入门。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值