简简单单“三子棋”_C实现三子棋

前言:

知道如何玩三子棋游戏,肯定也知道如何实现三子棋游戏。

该文章将 以"C"语言的形式一步一步解析“三子棋”游戏是如何实现的。

用心完成就很简单哦~

游戏框架

平常所玩的三子棋游戏,是在一个棋盘上实现,按照一人一回合的走法去下棋,直到三连统一,或者棋盘饱满就结束游戏,按照这个思路把游戏的框架先构建起来。

1,屏幕上呈现游戏菜单

2,根据用户输入运行相应的选项

3,游戏具有可玩性

4,设置游戏属性

5,游戏运作

以上就是基本的三子棋游戏思路框架,下面按照这个框架思路一步一步的实现它。

游戏实现
一,游戏菜单

在互联网上运行游戏当然需要展示给玩家看的,游戏开始之前需要提供游戏菜单供玩家进行相应的选择操作。

🌰:简简单单“三子棋”_C实现三子棋_02

这样一个简简单单的游戏菜单用“printf“函数实现即可。

可按照自己喜欢的去款式设计

二,游戏选择与可玩性

游戏菜单供玩家提供相应的选择,在程序员的角度需要根据玩家输入的数让程序进行相应的运行,当然同时还得考虑如果玩家出现输入其它选择的现象。

🌰:简简单单“三子棋”_C实现三子棋_03

完成这一实现除了玩家不想玩的情况下,使游戏具有可玩性,玩玩一把还想玩............

很明显这就是一个循环体制

代码展示:

do
	{

		menu(); //游戏菜单

		printf("\n");
		printf("输入选择:");
		scanf("%d",&input);
		printf("\n");
		
		switch (input)
		{
		case 1:
			Game_Secondos();
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
			Sleep(500);
			system("cls");
			break;
		}
		while (ch = getchar() != '\n')
			;
	} while (input);
}

do while语句设置循环体制,先让菜单,输入什么的运行起来(个人感觉最合适的循环体制)

这里用switch(if else if也可)语句来实现多分支的情况。

以上就是基本的菜单和选择界面。

三,游戏属性

三子棋是在一个3x3的棋盘上进行游戏的。

构建一个三子棋棋盘。

🌰:简简单单“三子棋”_C实现三子棋_04

可以用特殊字符来实现这个棋盘。并用数组来保存棋盘的数据。

代码展示:

1,设置棋盘

#define ROW 3//棋盘的大小(行)
#define LOW 3//棋盘的大小(列)
void game(void)
{
	char board[ROW][LOW];
	initial(board); //初始化棋盘
}
void initial(char board[ROW][LOW]) //初始棋盘
{
	int i = 0, j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < LOW; j++)
		{
			board[i][j] = ' ';
		}
	}
}

用数组保存棋盘数据,并将数据初始化为空格。

想想为什么要初始数组内容?

2、打印棋盘

void print(char board[ROW][LOW])
{
	int i = 0;
	int j = 0;

	for (i = 0; i <=ROW; i++)
	{
		for (j = 0; j < LOW; j++)
		{
			printf("---");
			if(j<LOW-1)
				printf("|");
		}
		printf("\n");
		if (i < ROW )
		{
			for (j = 0; j < LOW; j++)
			{
				printf(" %c ", board[i][j]);
				if (j < LOW - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}

用”---“和”|“来打印棋盘的框架,用数组的数据显示当前棋盘内容,这里就是为什么将数组的内容初始化为空格的原因。

空格在屏幕上自然而然就什么也没有显示。

注意:在打印棋盘时,设置必要的条件让棋盘更好看一点。

3,输赢判断

char GameJudge(char board[ROW][LOW])
{
	int flag = 0;
	int x = 0;
	int y = 0;

	if ((board[0][0] == board[0][1] && board[0][1] == board[0][2]))
		return board[0][0];
	if ((board[1][0] == board[1][1] && board[1][1] == board[1][2]))
		return board[1][0];
	if ((board[2][0] == board[2][1] && board[2][1] == board[2][2]))
		return board[2][0];
	if ((board[0][0] == board[1][0] && board[1][0] == board[2][0]))
		return board[0][0];
	if ((board[0][1] == board[1][1] && board[1][1] == board[2][1]))
		return board[0][1];
	if ((board[0][2] == board[1][2] && board[1][2] == board[2][2]))
		return board[0][2];
	if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]))
		return board[0][0];
	if ((board[2][0] == board[1][1] && board[1][1] == board[0][2]))
		return board[2][0];

	for (x = 0; x < ROW; x++)
	{
		for (y = 0; y < LOW; y++)
		{
			if (board[x][y] == ' ')
				flag = 1;
		}
	}

	if (flag == 1)
		return 'G';
	else
		return 'P';

三子棋判断每行每列以及对角线的棋子是否相等,如果相等返回相应的棋子。

如果都不相等,判断是否平局棋盘是否满棋的情况,不满棋继续对弈。

四,游戏运作

棋盘属性以及游戏判别完成了,下面实现游戏的运作。

三子棋实现一对一的对弈情况,一人一回合进行走棋。

这里将分成玩家与电脑的博弈:

代码展示:

1,玩家走棋

void PlayerMove(char board[ROW][LOW], char ch)
{
	int x = 0;
	int y = 0;
	again:
	printf("请输入坐标:");
	scanf("%d%d", &x, &y);
	if(x>0 && x<=ROW && y>0 && y<=LOW && board[x-1][y-1] == ' ')
	{
		board[x - 1][y - 1] = ch;
	}
	else
	{
		printf("输入错误\n");
		goto again;
	}
}

注意:数组的下标是从0开始,根据玩家的视角对输入的坐标需要相应的减一,且考虑坐标位置是否正确(坐标溢出以及当前坐标有棋子的情况)。

2,电脑走棋

void ComputerMove(char board[ROW][LOW], char ch)
{
	int x = 0;
	int y = 0;

	while (1)
	{
		x = rand() % ROW;
		y = rand() % LOW;
		if (board[x][y] == ' ')
		{
			board[x][y] = ch;
			break;
		}
	}
}

电脑走棋这里用随机数生成坐标实现电脑走棋。同时判断该坐标是否空字符,是的则完成走棋。

3,总体运行

void game(void)
{
	char board[ROW][LOW];
	char ch = 0;

	initial(board); //初始棋盘
	while (1)
	{
		Sleep(500);
		system("cls");
		print(board);
		PlayerMove(board, '*');
		if ('*' == GameJudge(board))
		{
			printf("玩家胜利!\n");
			print(board);
			break;
		}
		else if ('P' == GameJudge(board))
		{
			printf("平局!\n");
			print(board);
			break;
		}
		ComputerMove(board, '#');
		if ('#' == GameJudge(board))
		{
			printf("电脑胜利!\n");
			print(board);
			break;
		}
		else if ('P' == GameJudge(board))
		{
			printf("平局!\n");
			print(board);
			break;
		}
	}

}

将以上各种动作封装成函数,根据玩家电脑交替走棋并判断的方式用循环体制设计此程序,直到判断一方赢或者平来结束游戏。


五,运行效果

1,简简单单“三子棋”_C实现三子棋_05

2,简简单单“三子棋”_C实现三子棋_06

3,简简单单“三子棋”_C实现三子棋_07

✨完结撒花~~~✨

简简单单“三子棋”_C实现三子棋_08