三子棋小游戏设计
整体思路
头文件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天,感觉学习的时候都能听懂,一敲代码就只能发呆,希望通过长久的学习能够尽快入门。