简易版三子棋小游戏:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Menu(int choice)
{
	printf("==============================\n");
	printf("1    开始游戏\n");
	printf("0    退出游戏\n");
	printf("==============================\n");
	printf("请输入您的选择:\n");
	scanf("%d", &choice);
	return choice;
}
#define ROW 3
#define COL 3
char g_chess_board[ROW][COL];
void Init()
{
	for (int row = 0; row < ROW; ++row)
	{
		for (int col = 0; col < COL; ++col)
		{
			g_chess_board[row][col] = ' ';
		}
	}
}
void Print()
{
	for (int row = 0; row < ROW; ++row)
	{
		printf("| %c | %c | %c |\n", g_chess_board[row][0],g_chess_board[row][1],g_chess_board[row][2]);
		printf("------------\n");
	}
	printf("\n");
		
}
void PlayerMove()
{
	//玩家落子,检查玩家落子是否合理,如果不合理,重新输入,如果合理,检查当前位置是否已经有子,
	//如果有子,请重新输入,如果没有子,就将该位置改为x
	int row = 0;
	int col = 0;
	while (1)
	{
		printf("请玩家落子:(row col)\n");
		scanf("%d %d", &row, &col);
		if (row < 0 || row >= ROW || col < 0 || col >= COL)
		{
			printf("您的输入不合理,请重新输入:\n");
			continue;
		}
		else if (g_chess_board[row][col] != ' ')
		{
			printf("当前位置已经有子,请重新输入\n");
			continue;
		}
		else
		{
			g_chess_board[row][col] = 'x';
			break;
		}
	}
}
void ComputerMove()
{
	printf("请电脑落子:\n");
	int row = 0;
	int col = 0;
	while (1)
	{
		row = rand() % ROW;
		col = rand() % COL;
		if (g_chess_board[row][col] == ' ')
		{
			g_chess_board[row][col] = 'o';
			break;
		}
	}
}
int Isfull()
{
	for (int row = 0; row < ROW; ++row)
	{
		for (int col = 0; col < COL; ++col)
		{
			if (g_chess_board[row][col] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
char CheckWinner()
{
	//检查行是否一样
	//检查列是否一样
	//检查对角线
	//检查是否下满
	for (int col = 0; col < COL; ++col)
	{
		if (g_chess_board[0][col] == g_chess_board[1][col]
			&& g_chess_board[0][col] == g_chess_board[2][col]
			&& g_chess_board[0][col] != ' ')
		{
			return g_chess_board[0][col];
		}
	}
	for (int row = 0; row < ROW; ++row)
	{
		if (g_chess_board[row][0] == g_chess_board[row][1] &&
			g_chess_board[row][0] == g_chess_board[row][2] &&
			g_chess_board[row][0] != ' ')
		{
			return g_chess_board[row][0];
		}
	}
	if (g_chess_board[0][0] == g_chess_board[1][1] &&
		g_chess_board[0][0] == g_chess_board[2][2] &&
		g_chess_board[0][0] != ' ')
	{
		return g_chess_board[0][0];
	}
	if (g_chess_board[0][2] == g_chess_board[1][1] &&
		g_chess_board[0][2] == g_chess_board[2][0] &&
		g_chess_board[0][2] != ' ')
	{
		return g_chess_board[0][2];
	}
	if (Isfull())
	{
		return 'p';
	}
	return ' ';
}
void Game()
{
	char winner = ' ';
	Init();//初始化数组,用空格填充,
	Print();
	while (1)
	{
		PlayerMove();//玩家落子,
		Print();
		winner = CheckWinner();
		if (winner != ' ')
		{
			break;
		}
		ComputerMove();
		Print();
		winner = CheckWinner();
		if (winner != ' ')
		{
			break;
		}
	}
	if (winner == 'x')
	{
		printf("玩家胜利\n");
	}
	else if (winner == 'o')
	{
		printf("电脑获胜\n");
	}
	else if (winner == 'p')
	{
		printf("平局\n");
	}

}
int main()
{
	srand((unsigned int)time(0));
	int choice = 0;
	while (1)
	{
		choice = Menu(choice);
		if (choice == 1)
		{
			Game();
		}
		else if (choice == 0)
		{
			printf("拜拜\n");
			break;
		}
		else
		{
			printf("您的输入有误,请重新输入:\n");
			continue;
		}
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43870213/article/details/84985801