【C语言/C++】三子棋游戏(数组知识扩充)

文章目录

  • 1、引言
  • 2、代码规划
  • 3、构思代码
  • 4、代码模块实现
    • 1、游戏界面功能
    • 2、初始化棋盘
    • 3、打印棋盘
    • 4、玩家下棋逻辑
    • 5、简易电脑下棋逻辑
    • 6、判断胜负
    • 7、判断游戏是否平局

1、引言

写一个三子棋游戏

2、代码规划

1、创建一个源文件test.c 游戏的测试逻辑
2、创建一个源文件game.c 游戏的实现逻辑
3、创建一个头文件game.h 游戏实现函数的声明

3、构思代码

1、首先我们需要在游戏开始界面实现一个菜单的功能,能够让玩家选择开始游戏或退出游戏
2、开始游戏后我们需要创建并初始化一个棋盘
3、打印出棋盘
4、玩家通过输入行和列的坐标来实现落子
5、判定玩家和电脑的胜负关系(和棋、赢棋、输棋)
6、电脑随机位置落子,但不能落在玩家所下位置
7、判断玩家和电脑的胜负关系

4、代码模块实现

1、游戏界面功能

【C语言/C++】三子棋游戏(数组知识扩充)_第1张图片
首先实现一个简易的菜单【C语言/C++】三子棋游戏(数组知识扩充)_第2张图片

再运用do-while循环来打印出一个菜单,运用switch语句来判断玩家是选择开始游戏或者退出游戏,当玩家选择输入1时,input为真,就会继续do-while循环。输入其他数字时,input为假,就会停止do-while循环。

2、初始化棋盘

创建一个函数InitBoard来初始化棋盘,在头文件game.h中对要创建的函数进行声明
在这里插入图片描述
PS:在头文件中定义ROW和COL,分别为棋盘的行和列,这样当我们未来需要修改棋盘大小的时候就不需要频繁修改行和列的数值,只需要修改ROW和COL定义后面的数值就可以了,这样就不会将代码写的很呆板。

【C语言/C++】三子棋游戏(数组知识扩充)_第3张图片
我们需要将棋盘初始化成空格,方便用来下棋,最后的结果类似这样
【C语言/C++】三子棋游戏(数组知识扩充)_第4张图片

3、打印棋盘

初始化棋盘之后我们需要将棋盘打印出来查看是不是我们需要的效果。然而只经过初始化的棋盘打印出来是一片空白的区域,所以我们要对这些区域进行切割,让他看起来像一个棋盘。

首先我们先创建一个函数DisplayBoard,并在头文件声明这个函数(所有编写的函数都需要在头文件中进行声明,让程序知道有这么一个函数的存在)
【C语言/C++】三子棋游戏(数组知识扩充)_第5张图片

4、玩家下棋逻辑

在头文件中声明player_move函数
1、需要判断落子的合法性,我们需要确保玩家在棋盘内落子,用if-else语句来判断玩家的棋子是否在棋盘内
【C语言/C++】三子棋游戏(数组知识扩充)_第6张图片
2、判断落子是否被占用,所以我们需要判断,若棋盘x-1行y-1列为空格,就可以落子
(这里设置为x-1行和y-1列的原因是二维数组的行和列是从0开始的)

5、简易电脑下棋逻辑

在这里插入图片描述

1、利用时间戳生成的随机数,让电脑下棋(需要记得包含头文件time.h)

【C语言/C++】三子棋游戏(数组知识扩充)_第7张图片

6、判断胜负

创建一个函数is_win
【C语言/C++】三子棋游戏(数组知识扩充)_第8张图片
根据返回的字符来判断游戏是否继续
【C语言/C++】三子棋游戏(数组知识扩充)_第9张图片
因为游戏获胜也有不同的情况
1、同一行的3个棋子相同
【C语言/C++】三子棋游戏(数组知识扩充)_第10张图片
2、同一列的3个棋子相同
【C语言/C++】三子棋游戏(数组知识扩充)_第11张图片
3、对角线上的3个棋子相同
【C语言/C++】三子棋游戏(数组知识扩充)_第12张图片

7、判断游戏是否平局

创建一个函数is_full
判断是否平局的条件很简单,如果棋盘上还有空格,就继续游戏,如果棋盘上已经没有空格,并且没有一方胜出,就可以判断平局
【C语言/C++】三子棋游戏(数组知识扩充)_第13张图片【C语言/C++】三子棋游戏(数组知识扩充)_第14张图片

经过以上这些步骤,我们就实现了三子棋,并实现了不同模块代码的封装。

你可能感兴趣的:(c语言,游戏)