目录
2.写一个game函数,进入游戏部分,这里的game函数就是我们游戏的主要实现部分
8.判断游戏的情况就写好了,但我们要让程序知道这些情况并做出反应
相信大家都玩过或者听说过三子棋这个游戏,那么这篇文章我就详细的讲解一下三子棋的实现,在这之前大家要掌握好基本的语法还有二维数组和函数的内容,不过都是简单的应用,我相信大家都可以很快就学会的,在这里是一个人机对战的小游戏
首先我给大家梳理一下整个过程的思路,因为很多朋友在刚开始时不知道怎么下手的。
游戏基本思路
1.菜单
站在玩家的角度,肯定要让玩家进行选择,然后我们可以先制作一个简易的菜单,来提示玩家进行选择,这个其实是很容易实现的
2.初始化一个棋盘
既然是下棋,那我们肯定要有一个棋盘,还要使用一个变量来存储我们下的那个棋的符号。首先,我们下棋肯定是要从键盘上输入坐标吧,而且一个是横坐标,一个是纵坐标,那么很明显,我们肯定是要用一个二维数组来存储我们要下的棋的符号
为了让游戏更好看,我们使用字符来当棋,所以我们可以定义一个字符型的二维数组,我们还要初始化这个二维数组,因为我们后面打印棋盘的时候肯定也要把数组的内容打印出来吧,如果棋盘并未初始化,就会显示乱码,
像这样子:
最好的办法就是把棋盘初始化为空格,这样打印棋盘时,没有下棋的格子也是没有东西显示在上面的。
3.打印棋盘
如果玩家选择了进入游戏,那我们肯定要把棋盘打印出来,供玩家下棋。
4.玩家下棋和电脑下棋
棋盘打印好之后,就该下棋了,在这里我们先规定玩家先下棋,然后电脑下棋
5.判断输赢
玩家和电脑下了每次下了棋之后,我们都要进行一次输赢的判断,不然就会出现:一方赢了,但游戏还在继续的情况
基本的思路就是这样子,线面我们来一步一步实现这些思路
实现思路
我会对把有些代码分步来写
1.主函数部分和菜单部分
我们可以把玩家对菜单的选择和游戏进行的部分写成一个循环,这样游戏结束后玩家就不用退出游戏再进入游戏后选择,
主函数部分代码如下:(这里我们就先不写全,一步一步来演示)
//打印菜单
void menu()
{
printf("******************************************\n");
printf("*************1.三子棋游戏*****************\n");
printf("*************0.退出游戏*******************\n");
printf("******************************************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择\n"); //这里提示玩家对菜单进行选择
scanf("%d", &input);
switch (input) //这里用switch语句提供多种选择
{
case 1:
printf("进入游戏\n");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n"); //若玩家输入错误,提示玩家重新选择
break;
}
} while (input); //这里是一个妙用,当玩家选择0时,也就是选择退出游戏,也就退出循环了
}
这里使用了do while循环,使玩家在没进行选择之前就可以把菜单打印出来,并让玩家进行选择
2.写一个game函数,进入游戏部分,这里的game函数就是我们游戏的主要实现部分
如果玩家根据菜单选择了1,也就是选择了进入游戏,那我们肯定要提供一个进入游戏的入口,所以我们可以在主函数里调用game函数,很明显,我们要把game函数放在分支语句的case 1里
代码如下
void game()
{
//这里是游戏的主要实现部分
//我们可以在这里写下一步一步实现游戏的函数
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择\n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("进入游戏\n");
game(); //游戏的入口,调用game函数
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
}
3.初始化棋盘
这里再讲一下,为了让我们的代码有更好的延续性,所以我们初始化棋盘时棋盘的大小不是单单的用整型变量去定义,试着想想,如果我们以后把这个代码改成五子棋游戏的实现,那我们要改这个代码就很麻烦了,我们可以使用宏定义来定义棋盘的大小,这样我们只要把宏定义的大小改了,整个游戏里的大小也就该了。
宏定义部分
//我们可以把这段代码放在包含头文件的下面
#define ROW 3 //定义棋盘的行为3
#define COL 3 //定义棋盘的列为3
初始化棋盘的函数部分
//初始化棋盘
void initboard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' '; //将数组每个元素都初始化为空格
}
}
}
把初始化棋盘的函数放在game函数里调用 传参时,我们要把数组和行和列的大小传过去
//游戏实现主体
void game()
{
//定义一个二维数组存储数据
char board[ROW][COL];
//初始化棋盘
initboard(board, ROW, COL); //在game函数里调用实现游戏的函数
这里要说明一下,我们把实现游戏的函数放在别的地方,然后在game函数里调用就好了
4.打印初始化好的棋盘
游戏一进来,我们就要把棋盘打印出来
这里我们就做一个最简易的棋盘吧
void displayboard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%c|%c|%c\n", board[i][0], board[i][1], board[i][2]);
if (i < 2) //-+-+-只需要打印两次
{
printf("-+-+- \n")