三子棋思路即代码

在我们学习二维数组的时候,难住了很大一部分人的开始我想就是三子棋了,写代码就像盖房子,我们思路有了不就手到擒来了嘛!!!!.

三子棋顾名思义我们应该都玩过就像是这样的一个小游戏.

 

 对于新手当我们第一次看到这个棋盘我们应该就已经开始害怕了....

don't worry!!!!!

首先我们要有写这个代码的大致思路

一.准备阶段

1.我们需要一个游戏开始的菜单

2.游戏开始时我们需要一个棋盘

3.我们需要把棋盘初始化

4我们当然还要把棋盘打印出来

二.下棋阶段

1.玩家下棋

2.电脑下棋

3.当然还要判断输赢啦

接下来需要我们具体怎么做,直接上代码!!!

void menu()
{
	printf("*************\n");
	printf("*   1.play  *\n");
	printf("*   0.over  *\n");
	printf("*************\n");

}
void test()
{
	int a = 0;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			game();
				break;
		case 0:
					printf("退出游戏\n");
					break;
		default:
			printf("选择错误\n");
			break;
		}

	} while (a);
	
}
int main()
{
	test();
	return 0;
}

这就是关于打印菜单这一段的代码啦,这里面的game()函数内执行的就是我们游戏的主体

当我们选择进入游戏的时候就进入我们的game()函数,接下来的一系列操作全都在game()函数里面了

char arr[3][3];
int i = 0;

	for(i=0;i<3;i++)
	{
		int j = 0;

		for (j = 0; j < 3; j++)
		{
			arr[i][j] = ' ';
		}
	}

这段是进入game()以后,我们初始化棋盘,其实我们可以把棋盘看成一个二维数组,而每个坐标都相当于数组里面的一个元素,由于一开始我们什么都没有,就让每个位置都是空格。


	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf(" %c ", arr[i][j]);
			if (j < 2)
			{
				printf("|");
			}
		}
			printf("\n");
			if(i<2)
			for (j = 0; j < 3; j++)
			{
				printf("---");
				if (j < 2)
				{
					printf("|");
				}
			}
		
			printf("\n");
		
	}

这里我们就是把棋盘打印了出来,我们将每个元素与”|“看成一个整体将“---”与“|”也看成一个整体

但我们要注意的是只有两行的---与两列的|的,所以我们在打印时要加入一些限制条件。

 

while (1)
	{
		int x = 0;
		int y = 0;
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
				printf("输入错误请重新输入\n");
		}
		else
			printf("输入非法\n");
	}

这就到了我们下棋的部分了,假如我们让人先下,我们下的位置就是在数组元素,当我们输入后我们要判断该位置是否存在,是否可以下,如果不满足我们就需要重新输入,直到条件满足为止。

while (1)
	{
		int x = rand() %  3;
		int y = rand() %  3;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '#';
			break;
		}
	}
}

接着就是我们电脑下棋了与人相比唯一不同,就是电脑下棋时需要获取一个随机数,这时候就需要使用我们的rand()函数了(在使用时需要先使用srand(time(NULL))这个函数而参数我们选择时间戳,给它传一个空指针就可以了)但是这个随机数的大小我们要控制在0-2之间,所以我们需要%3来保证。

int i = 0;
	//判断三行
	for (i = 0; i < 3; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
		{
			return arr[i][0];
		}
	}
	//判断三列
	for (i = 0; i < 3; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
		{
			return arr[0][i];
		}
	}
	//对角线
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
	{
		return arr[1][1];
	}
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
	{
		return arr[1][1];
	}

	//平局?
	if (is_full(arr, 3, 3) == 1)
	{
		return 'Q';
	}
	//继续
	//没有玩家或者电脑赢,也没有平局,游戏继续
	return 'C';
int is_full(char arr[3][3], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (arr[i][j] == ' ')
			{
				return 0;
			}
			
		}
	}
	return 1;
}

	//继续
	//没有玩家或者电脑赢,也没有平局,游戏继续
	return 'C';

 接下来我们就是判断输赢啦,如果还没下完游戏还要继续

我们为了方便,以及安全性可以把代码模块化就像

下面这是game.h里面的内容

 这是我们test.c里面的内容包含的是我们整个代码的逻辑

而逻辑部分执行的内容都在我们的game.c中了

 

 

 

 

 

我们为了通用就用#define定义了行和列,这样假如我们想要整个五子棋也不是不可以啦

 这就是我们整个三子棋的完整代码!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿祥也有梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值