좀 더 힌트가 필요해요.
네. 그러면 좀 더 힌트를 드려볼까요? 의사코드 형태로 한번 설명해 보겠습니다.
메인 함수 - main( )
메인 함수는 다음과 같은 흐름으로 작성해볼 겁니다.
- 3 x 3의 보드 생성
- 보드 초기화 (함수)
- 플레이어 배열 (Player 1, Player2) 선언
- 말 배열( 'O', 'X') 선언
- 게임 진행
보드 초기화 함수 - initBoard( )
공백을 3 x 3으로 채우기 위한 함수를 만들어야 겠죠? 이때 보드를 위한 3 x 3 배열을 위해 행과 열의 2차원 배열 형태로 만들어서 초기화 합니다.
- for문을 3 x 3의 격자에 ' '와 같이 빈칸을 채우도록 2중으로 사용
보드 출력 함수 - printBoard( )
다음과 같은 화면을 만들어내기 위해 for, if, print문 등을 적절히 사용합니다.
0 1 2
0 | |
-+-+-
1 | |
-+-+-
2 | |
입력의 범위 검사 - isInRange( )
이제 입력 받은 x, y의 값이 보드 격자내에 있는지 검사하는 함수를 만듭니다.
격자의 칸이 비었는지 검사 - isValid( )
게임을 진행하기 위해 말을 놓으려는 배열이 비어 있는지를 검사하도록 함수를 구성합니다.
특정 격자위치에 말을 놓는 함수 - playerInput( )
이제 다음과 같이 플레이어 턴에 따라 말을 놓을 수 있도록 입력 함수를 만들어 냅니다.
Player 1 입력(줄,칸):
이때 입력의 예는 0, 1과 같이 받으며 콤마(,)를 기준으로 y, x의 변수에 담아야 합니다. 이 x, y는 말을 놓는 위치가 됩니다. 입력을 위해서 readline( )함수를 이용하며 분리를 위해 split( )함수를 이용할 수 있습니다.
승리 기준 검사 - isWin( )
말이 가로, 세로, 대각선 등 모든 방향에서 3칸을 채운형태가 있는지를 파악해 승리 플레이어와 메시지를 출력하도록 합니다.
게임 진행 - play( )
게임 진행을 위해서 턴 라운드와 보드 그리기, 말 입력, 승리 조건 파악 등 위에서 구성한 함수들을 이용해서 게임 진행 함수를 만듭니다. while(true)를 사용해 구성하며 성공 조건의 말이 충족되거나 더이상 그릴 공간이 없게 되면 루프를 중단해 게임을 종료합니다.
자! 그럼 다시한번 시작해 봅시다.