반응형
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 |