C++로 Tic-Tac-Toe 게임 만들기

C Lo Tic Tac Toe Geim Mandeulgi



Tic-tac-toe는 여러 세대에 걸쳐 즐거움을 선사해 온 흥미롭고 오래되었으며 고전적인 게임입니다. tic-tac-toe에서는 두 명의 플레이어가 해시 패턴으로 표시된 9각형 그리드에서 경쟁합니다. 각 플레이어는 차례대로 빈 사각형 중 하나에 기호(O 또는 X)를 배치합니다. 이 기사에서는 C++ 프로그래밍 언어로 tic-tac-toe 게임을 만드는 방법을 살펴보겠습니다. 다음 예에서는 간단하면서도 매력적인 tic-tac-toe 게임을 구축하는 과정을 안내하며 대화형 게임 경험을 만들기 위한 필수 개념, 코드 분석 및 고려 사항을 다룹니다.

C++로 Tic-Tac-Toe 게임 만들기

다음 예제에서는 이 대화형 2인용 tic-tac-toe 게임을 만드는 기본 사항을 제공합니다. C++로 프로그래밍하는 간단하고 쉬운 접근 방식을 보여주고, 친구들과 함께 어린 시절의 어려움을 새로운 디지털 형식으로 재현할 수 있도록 잘 문서화된 소스 코드를 제공합니다. 다음 코드를 살펴보겠습니다.

예: 2D 배열을 사용하지 않는 기본 콘솔 기반 Tic-Tac-Toe

이 예에서는 2D 배열, 함수 및 if-else 조건을 사용하여 C++에서 tic-tac-toe 게임을 만듭니다. 이 게임에서는 두 명의 플레이어가 교대로 동작을 입력할 수 있으며, 승자 또는 동점을 확인하여 게임 상태를 결정합니다. 다음 주어진 코드를 참조하십시오:







#include

네임스페이스 표준 사용 ;

무효의 드로보드 ( 판자 [ ] [ ] ) ;

bool isMoveValid ( 판자 [ ] [ ] , 정수 , 정수 안부 ) ;

bool isBoardFull ( 판자 [ ] [ ] ) ;

수표승자 ( 판자 [ ] [ ] ) ;

정수 기본 ( ) {

판자 [ ] [ ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;

정수 , 안부 ;

현재플레이어 = '엑스' ;

~하는 동안 ( 진실 ) {

드로보드 ( 판자 ) ;

시합 << '플레이어 ' << 현재플레이어 << '의 차례입니다. 행(1-3)과 열(1-3)을 입력하세요. ' ;

식사 >> >> 안부 ;

--;

안부 --;

만약에 ( isMoveValid ( 판자 , , 안부 ) ) {

판자 [ ] [ 안부 ] = 현재플레이어 ;

우승자 = 수표승자 ( 판자 ) ;

만약에 ( 우승자 != ' ' ) {

드로보드 ( 판자 ) ;

시합 << '플레이어 ' << 우승자 << '승자입니다! \N ' ;

부서지다 ;

}

만약에 ( isBoardFull ( 판자 ) ) {

드로보드 ( 판자 ) ;

시합 << '넥타이야! \N ' ;

부서지다 ;

}

현재플레이어 = ( 현재플레이어 == '엑스' ) ? '영형' : '엑스' ;

} 또 다른 {

시합 << '이동이 잘못되었습니다. 다른 셀을 선택하세요. \N ' ;

} }

반품 0 ;

}

무효의 드로보드 ( 판자 [ ] [ ] ) {

시합 << '비| \티 1 \티 | \티 2 \티 | \티 \티 | \N ' ;

시합 << ' ______________________ \N ' ;

~을 위한 ( 정수 = 0 ; < ; ++ ) {

시합 << + 1 << '| ' ;

~을 위한 ( 정수 = 0 ; < ; ++ ) {

시합 << '' << 판자 [ ] [ ] ;

만약에 ( < 2 ) 시합 << ' \티 | \티 ' ;

}

시합 << ' \티 | \N ' ;

만약에 ( < 2 ) 시합 << ' ______________________ \N ' ;

}

시합 << ' \N ' ; }

bool isMoveValid ( 판자 [ ] [ ] , 정수 , 정수 안부 ) {

반품 ( >= 0 && < && 안부 >= 0 && 안부 < && 판자 [ ] [ 안부 ] == ' ' ) ;

}

bool isBoardFull ( 판자 [ ] [ ] ) {

~을 위한 ( 정수 = 0 ; < ; ++ ) {

~을 위한 ( 정수 = 0 ; < ; ++ ) {

만약에 ( 판자 [ ] [ ] == ' ' ) {

반품 거짓 ;

} } }

반품 진실 ; }

수표승자 ( 판자 [ ] [ ] ) {

~을 위한 ( 정수 = 0 ; < ; ++ ) {

만약에 ( 판자 [ ] [ 0 ] == 판자 [ ] [ 1 ] && 판자 [ ] [ 1 ] == 판자 [ ] [ 2 ] && 판자 [ ] [ 0 ] != ' ' ) {

반품 판자 [ ] [ 0 ] ;

}

만약에 ( 판자 [ 0 ] [ ] == 판자 [ 1 ] [ ] && 판자 [ 1 ] [ ] == 판자 [ 2 ] [ ] && 판자 [ 0 ] [ ] != ' ' ) {

반품 판자 [ 0 ] [ ] ;

} }

만약에 ( 판자 [ 0 ] [ 0 ] == 판자 [ 1 ] [ 1 ] && 판자 [ 1 ] [ 1 ] == 판자 [ 2 ] [ 2 ] && 판자 [ 0 ] [ 0 ] != ' ' ) {

반품 판자 [ 0 ] [ 0 ] ;

}

만약에 ( 판자 [ 0 ] [ 2 ] == 판자 [ 1 ] [ 1 ] && 판자 [ 1 ] [ 1 ] == 판자 [ 2 ] [ 0 ] && 판자 [ 0 ] [ 2 ] != ' ' ) {

반품 판자 [ 0 ] [ 2 ] ;

}

반품 ' ' ;

}

기능에 대한 분석은 다음과 같습니다.

'#include '은 입력/출력 작업을 위한 I/O 스트림 라이브러리를 포함하는 전처리기 지시문입니다. '네임스페이스 std'를 사용하면 'std:: 접두사'가 필요 없이 C++ 프로그램에서 cout, cin 등의 함수를 직접 사용할 수 있습니다.

이 프로그램에는 drawBoard(), isMoveValid(), isBoardFull() 및 checkWinner()라는 네 가지 함수 프로토타입이 있습니다. 함수 선언을 함수 프로토타입이라고 합니다. 프로그램에서 main 함수 뒤에 오더라도 사용됩니다. 주요 기능에는 플레이어의 회전과 이동을 관리하는 게임 루프와 논리가 포함되어 있습니다. 주요 기능 내에서 게임 보드는 공백으로 초기화됩니다.

판자 [ ] [ ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;

그런 다음 플레이어의 이동 입력을 저장하기 위해 두 개의 row 및 col 변수가 정의됩니다. 'char currentPlayer = 'X';' 'X' 플레이어가 먼저 가도록 정의합니다.

이제 while(true) 게임 루프가 시작되고 승자 또는 동점이 나올 때까지 실행됩니다. 이 'while' 루프는 'drawBoard();'를 호출합니다. 보드를 표시합니다. 콘솔에 보드를 표시한 후 사용자는 다음 코드 문에서 표시할 셀을 선택하라는 메시지를 받습니다.

시합 << '플레이어 ' << 현재플레이어 << '의 차례입니다. 행과 열(1-3)을 입력하세요. ' ;

플레이어는 'cin >> row >> col;'에 자신의 움직임을 입력합니다.

표시할 셀을 선택하면 프로그램은 먼저 입력의 유효성을 확인하고 isMoveValid() 함수를 호출하여 셀이 이미 채워져 있지 않은지 확인합니다.

판자 [ ] [ 안부 ] = 현재플레이어 ;

이 명령문은 플레이어의 표시를 보드에 표시합니다.

우승자 = 수표승자 ( 판자 ) ;

만약에 ( 우승자 != ' ' ) {

드로보드 ( 판자 ) ;

시합 << '플레이어 ' << 우승자 << '승리! \N ' ;

이 진술은 플레이어가 보드에 항목을 표시할 때마다 승자를 확인합니다. 승자가 있으면 승자의 이름이 발표되고 프로그램은 게임 루프를 종료합니다.

만약에 ( isBoardFull ( 판자 ) ) {

이 문은 동점을 확인합니다. 동점 조건은 보드가 가득 차고 승자가 없는 경우에 발생합니다. 이 경우에는 “무승부입니다!” 화면에 인쇄됩니다.

현재플레이어 = ( 현재플레이어 == '엑스' ) ? '영형' : '엑스' ;

이 명령문은 플레이어를 전환하여 모든 플레이어에게 자신의 차례를 플레이할 기회를 제공합니다.

시합 << '이동이 잘못되었습니다. 다른 셀을 선택하세요. \N ' ;

이동이 유효하지 않으면 사용자에게 다시 입력하고 다른 셀을 선택하라는 메시지가 표시됩니다.

'main' 함수 다음에는 이전에 선언된 함수 프로토타입에 대한 함수 정의가 시작됩니다. 여기에 정의된 첫 번째 함수는 tic-tac-toe 보드를 콘솔에 그리는 데 사용되는 drawBoard()입니다. drawBoard() 함수는 그리드 선을 포함하여 보드의 현재 상태를 인쇄합니다.

여기에 정의된 다음 함수는 isMoveValid()입니다. 이 기능은 보드 내부와 빈 셀 모두에서 이동이 허용되는지 여부를 결정하는 데 사용됩니다. isBoardFull() 함수는 보드가 아직 꽉 찼는지 확인하는 데 사용됩니다. 이는 승자가 없는 동점 상황의 조건입니다. isBoardFull()은 보드의 모든 위치가 채워졌는지 확인하여 승자가 없는 경우 동점을 나타냅니다. 승자가 있으면 checkWinner() 함수를 사용하여 확인할 수 있습니다. checkWinner()는 동일한 플레이어의 표시('X' 또는 'O')에 대한 모든 잠재적 승리 라인을 확인하고 승리한 플레이어의 표시가 있으면 반환하고, 아직 승자가 없으면 공백 문자 ' '를 반환합니다. 다음은 프로그램의 출력입니다. 각 플레이어의 모든 턴을 보여줍니다.

첫째, 보드가 명확합니다. 플레이어 'X'는 표시할 셀을 선택하라는 메시지를 표시합니다. 여기에서는 플레이어 'X'가 2와 2를 입력합니다. 2행과 2열의 셀이 표시됩니다. 다음에 표시된 보드를 참조하십시오.

이제 플레이어 O의 차례입니다. 플레이어에게 표시할 셀을 선택하라는 메시지가 표시됩니다. 플레이어 'O'는 행에 1을, 열에 1을 선택합니다. 선택한 셀은 다음 출력 조각에 표시된 것처럼 플레이어 'O'로 표시됩니다.

각 플레이어의 모든 턴은 동일한 패턴을 따릅니다. 플레이어 X의 차례이고, 플레이어는 행에 1을, 열에 2를 선택합니다. 다음 주어진 출력 스냅샷을 참조하십시오.

이제 플레이어 'O'의 차례입니다. 플레이어는 행에 1을 선택하고 열에 3을 선택합니다.

다음 차례는 다시 플레이어 'X'입니다. 플레이어는 행에 3개, 열에 1개를 선택합니다.

플레이어 'O'는 행에 3을, 열에 2를 선택합니다.

플레이어 'X'는 두 번째 행과 세 번째 열을 선택합니다.

이제 플레이어 'O'는 두 번째 행과 첫 번째 열을 선택합니다.

플레이어 “X”는 이번에는 세 번째 행과 세 번째 열을 선택합니다.

어떤 플레이어도 가로, 세로, 대각선으로 어떤 선도 만들 수 없으므로 동점입니다. 선택한 입력 배열에 대한 승자는 없습니다.

전반적으로 코드는 게임 상태 및 사용자 입력을 처리하는 기본 게임 루프와 함께 보드 그리기, 이동 유효성 검사, 전체 보드 확인 및 승자가 있는지 확인하는 데 사용되는 여러 유틸리티 함수로 구성됩니다. .

결론

C++를 사용하여 tic-tac-toe 게임을 개발하는 것은 프로그래밍 기술을 강화하는 데 매우 유용합니다. 이 기사에서는 C++에서 tic-tac-toe를 만드는 방법을 정확하게 설명합니다. 이 기사에서 제공되는 단계별 지침에는 독자가 게임 메커니즘, 사용자 상호 작용 및 효율적인 코드 구조를 이해할 수 있도록 2D 배열, 함수 및 if-else 조건이 포함되어 있습니다. 코드에 대한 자세한 설명과 핵심 게임플레이에 중요한 기능에 대한 설명은 독자에게 C++ 프로그래밍 방식과 간단한 게임 개발의 복잡성에 대한 귀중한 통찰력을 제공합니다.