详解三子棋教程——附源码

目录

游戏基本思路

      1.菜单

      2.初始化一个棋盘

      3.打印棋盘

      4.玩家下棋和电脑下棋

       5.判断输赢

实现思路

1.主函数部分和菜单部分

2.写一个game函数,进入游戏部分,这里的game函数就是我们游戏的主要实现部分

 3.初始化棋盘

 4.打印初始化好的棋盘

 5.玩家下棋

 6.电脑下棋

 7.判断输赢

 8.判断游戏的情况就写好了,但我们要让程序知道这些情况并做出反应

 9.函数声明

源代码

                                                                


相信大家都玩过或者听说过三子棋这个游戏,那么这篇文章我就详细的讲解一下三子棋的实现,在这之前大家要掌握好基本的语法还有二维数组和函数的内容,不过都是简单的应用,我相信大家都可以很快就学会的,在这里是一个人机对战的小游戏

首先我给大家梳理一下整个过程的思路,因为很多朋友在刚开始时不知道怎么下手的。

游戏基本思路

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")
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值