《 三子棋》

一:需求与大致步骤

1.0 选择是否进入游戏
2.0 形成一个3*3 的棋盘
3.0 玩家下棋并且判断游戏是否结束
4.0 电脑随机下棋并且判断游戏是否结束

二:代码

1.0 选择是否进入游戏

int main()
{
	srand((unsigned int)time(NULL));
	int put = 0;
	do
	{
		nume();

		scanf("%d", &put);
		switch (put)
		{
		case 1:                                                         //这部分自己好好看看   do  while 
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("重新输入\n");
			break;
		}
	} while (put);
	system("pause");
	return 0;

}

在这里选择是否玩这个游戏;选择 1 ,进入游戏界面,也就是进入了game() 函数;
以下是game() 函数的代码

void game()
{
	char arr[POW][LOW] = { 0 };          //  POW  LOW  等于3
	int pow = POW - 1;                   //   2
	int low = LOW - 1;                   //   2
	iti_board(arr, pow, low);          // 初始化arr 数组
	display_board(arr, pow, low);       //打印一个棋盘
	while (1)
	{
		player(arr, pow, low);              //玩家下棋
		char a = judge(arr, pow, low);       //判断玩家是否赢了

		if (a == '*')
		{
			printf("玩家赢\n");
			break;
		}


		int b = is_full(arr, pow, low);       //判断棋盘是否满了,是否平局
		if (b == 1)
		{
			printf("平局\n");
			break;
		}


		computer(arr, pow, low);            //电脑下棋
		a = judge(arr, pow, low);             //判断电脑是否赢了




		if (a == '#')
		{
			printf("电脑赢\n");
			break;
		}




		b = is_full(arr, pow, low);                  //判断棋盘是否满了,是否平局
		if (b == 1)
		{
			printf("平局\n");
			break;
		}
}
}

以下是初始化arr 数组的代码


void iti_board(char arr[POW][LOW], int pow, int low)
{
	int i = 0;
	for (i = 0; i <= pow; i++)
	{
		int j = 0;
		for (j = 0; j <= low; j++)
		{
			arr[i][j] = ' ';
		}
	}
}

以下是打印棋盘的代码

void  display_board(char arr[POW][LOW], int pow, int low)
{
	int i = 0;
	for (i = 0; i <= pow; i++)
	{
		int j = 0;
		for (j = 0; j <= low; j++)
		{
			printf(" %c ", arr[i][j]);
			if (j < low)
				printf("|");
		}
		printf("\n");

		if (i < pow)
		{
			int j = 0;

			for (j = 0; j <= low; j++)
			{
				printf("___");
				if (j < low)
					printf("|");
			}
			printf("\n");
		}
	}
}

以下是玩家下棋的代码


void player(char arr[POW][LOW], int pow, int low)
{

	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家请输入\n");
		scanf("%d %d", &x, &y);

		if (x >= 1 && x <= (pow + 1) && y >= 1 && y <= (low + 1) && arr[x - 1][y - 1] == ' ')
		{
			arr[x - 1][y - 1] = '*';
			display_board(arr, pow, low);
			break;
		}
		else
			printf("输入有误\n");
	}


}

以下是电脑下棋的代码

void computer(char arr[POW][LOW], int pow, int low)
{
	printf("电脑请输入\n");
	while (1)
	{
		int x = rand() % 3;
		int y = rand() % 3;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '#';
			display_board(arr, pow, low);

			break;
		}
	}
}

以下是判断输赢的代码

char judge(char arr[POW][LOW], int pow, int low)
{
	int i = 0;

	for (i = 0; i <= pow; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
		{
			return arr[i][1];
		}
	}

	for (i = 0; i <= low; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[i][1] != ' ')
		{
			return arr[1][i];
		}
	}


	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
	{
		return arr[1][1];
	}


	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
	{

		return arr[1][1];
	}
	return 0;

}

以下是判断是否平局的代码

int is_full(char arr[POW][LOW], int pow, int low)
{
	int i = 0;
	int count = 0;
	for (i = 0; i <= pow; i++)
	{
		int j = 0;
		for (j = 0; j <= low; j++)
		{
			if (arr[i][j] == ' ')
				count++;
		}
	}
	if (count == 0)
		return 1;
	else
		return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41577616/article/details/83796767