내일배움캠프

틱택톡 C#

우대비 2025. 1. 25. 23:56
반응형
void PrintTTT(char[] board)
{
	Console.WriteLine("     |     |     ");
	Console.WriteLine($"  {board[0]}  |  {board[1]}  |  {board[2]}  ");
	Console.WriteLine("_____|_____|_____");
	Console.WriteLine("     |     |     ");
	Console.WriteLine($"  {board[3]}  |  {board[4]}  |  {board[5]}  ");
	Console.WriteLine("_____|_____|_____");
	Console.WriteLine("     |     |     ");
	Console.WriteLine($"  {board[6]}  |  {board[7]}  |  {board[8]}  ");
	Console.WriteLine("     |     |     ");
}

보드판을 출력하는 함수입니다.

 

 

int GetWinerID(char[] board)
{
	for (int i = 0; i < 3; i++)
	{
		int y = 3 * i;

		if (board[0 + y] == board[1 + y] && board[1 + y] == board[2 + y])
			return board[0 + y] == 'O' ? 1 : 2;

		if (board[0 + i] == board[3 +i] && board[3 + i] == board[6 + i])
			return board[0 + i] == 'O' ? 1 : 2;
	}

	if (board[0] == board[4] && board[4] == board[8])
		return board[0] == 'O' ? 1 : 2;

	if (board[2] == board[4] && board[4] == board[6])
		return board[2] == 'O' ? 1 : 2;

	return -1;
}

보드를 체크하여 누가 승리했는지 체크하고, 승리 조건에 부합하지 않는다면 -1을 반환합니다.

 

 

char[] board = new char[9] { '1', '2', '3', '4', '5', '6', '7', '8', '9'};

bool isPlayer1Turn = true;

while (true)
{
	int winner = GetWinerID(board);

	Console.Clear();
	Console.WriteLine("플레이어 1 : O 와 플레이어 2 : X");
	Console.WriteLine();

	if (winner == -1)
		Console.WriteLine($"플레이어 {(isPlayer1Turn ? 1 : 2)}의 차례");
	
	PrintTTT(board);

	if (winner != -1)
	{
		Console.WriteLine($"==== {winner}번 플레이어가 승리했습니다! ====");
		break;
	}

	int idx = -1;
	while (idx == -1)
	{
		Console.Write($"위치를 입력해주세요 : ");
		idx = int.Parse(Console.ReadLine())-1;
		if (board[idx] == 'O' || board[idx] == 'X')
		{
			Console.WriteLine("이미 사용된 자리입니다.");
			idx = -1;
		}
	}

	board[idx] = (isPlayer1Turn ? 'O' : 'X');
	isPlayer1Turn = !isPlayer1Turn;
}

 

Console.Clear 함수를 통해 콘솔창을 비워주고 매번 새롭게 작성합니다.

 

플레이어는 1~9 사이의 숫자를 입력하여 게임을 진행하게 됩니다.

입력받은 숫자를 인덱스로 board 배열을 업데이트 해주었습니다.

 

만약 GetWinerID가 반환한 값이 -1이라면 승부가 나지 않은것으로 판단하여 계속 진행되도록 하였고

1이거나 2라면 승부가 났다고 판단하여 종료되도록 했습니다.

 

 

 

 

 

반응형
LIST

'내일배움캠프' 카테고리의 다른 글

LINQ 정리  (0) 2025.01.27
내일배움캠프 카드 배치 기능 구현  (0) 2025.01.22
행맨 게임  (0) 2025.01.16
사칙연산간 우선순위  (0) 2025.01.14
Convert와 Parse의 차이점  (0) 2025.01.14