비디오: Technology Stacks - Computer Science for Business Leaders 2016 2024
This 자바 프로그래밍의 도전 과제는이 Tic-Tac-Toe 시리즈의 이전 과제를 기반으로하며 어레이를 사용할 수있는 능력을 테스트합니다. 그 중 두 가지는 사실입니다.
자바 프로그래밍의 도전 과제: 간단한 틱택 테크 게임과 자바 프로그래밍 챌린지: 간단한 틱택 테크 프로그램에 클래스 추가하기 틱택 테크의 간단한 게임을하기위한 프로그램을 작성해야합니다.
Tic-Tac-Toe은 게임의 상태를 나타내는 배열의 사용을 외칩니다. 배열이 없으면 별도의 변수를 사용하여 보드의 각 사각형을 나타내야합니다. 배열을 사용하면 단일 변수를 사용하여 모든 9 개의 사각형을 나타낼 수 있습니다.
이 프로그래밍 과제는 간단합니다. 어레이를 사용하는 향상된 프로그램 버전을 작성하십시오. 솔루션에서 적어도 두 개의 배열을 사용해야합니다.
-
배열을 사용하여 보드를 표현해야합니다. 대부분 다음과 같이 9 개의 요소가있는 1 차원 배열을 사용하려고합니다.
0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- --- --- | --- 6 | 7 | 즉, 배열 요소 0에 왼쪽 상단 사각형 (A1)이 저장되고 배열 요소 8에 오른쪽 하단 사각형 (C3)이 저장됩니다.
-
이 배열을 사용하여 두 플레이어가 게임에서 승리했는지 여부를 판단 할 수 있습니다. 대부분이 작업에 2 차원 배열을 사용하려고합니다. 이 배열은 8 개의 3 요소 배열을 보유 할 것이며 각 배열은 특정 3 in-a-row 벡터의 3 개 색인을 나타냅니다.
전체 배열에는 다음 데이터가 포함됩니다.
이 프로그램의 또 다른 요구 사항은 TicTacToeBoard 클래스를 이 도전 과제는 이전 도전 과제를 위해 만든 수업과 완전히 호환되어야합니다. 즉, 정확히 동일한 메소드를 구현해야합니다. 사용자의 편의를 위해 다음 표에서 이러한 방법을 반복합니다.
이 방법은 A1 또는 B2와 같은 행 - 열 지정을 사용하여 tic-tac-toe 보드의 사각형을 참조하므로 구현시 이러한 지정을 색인 번호에 매핑해야합니다. 예를 들어, 문자열 A1이 playAt 메서드에 전달되면 프로그램은 배열의 인덱스 0에서 재생을 표시해야합니다.
TicTacToeBoard 클래스
설명 | TicTacToeBoard |
---|---|
모든 사각형이 비어있는 새 TicTacToeBoard를 생성합니다. | 메서드 |
설명 | void reset () |
각 사각형의 상태를 비어있게 재설정합니다. | void playAt (String square, int player) |
지정된 플레이어에 대해 지정된 사각형 (A1, A2, A3, B1, B2, B3, C1, C2 또는 C3)을 표시합니다 (X는 1, 영형). IllegalArgumentException - square가 허용되는 값 중 하나가 아니거나 player가 1 또는 2가 아니거나 지정된 사각형이 비어 있지 않은 경우 | int isGameOver () |
게임 종료 여부를 결정합니다. 게임이 끝나지 않으면 0을 반환하고, X가 게임에서 승리하면 1을, O가 게임에서 승리하면 2를, 게임이 추첨이면 3을 반환합니다. 게임 종료 조건은 다음과 같습니다. | 1: 행, 열 또는 대각선에 모든 X가 포함되어있는 경우.
2: 행, 열 또는 대각선에 모든 O가 포함되어있는 경우. 3: 빈 사각형이없고 X 나 O가 없다면. int getNextMove () |
컴퓨터 상대방의 다음 이동을 나타내는 정수를 반환합니다. 이 방법은 다음 전략에 따라 좋은 이동을 선택하기위한 기본적인 노력을해야합니다. | * 가운데 (정사각형 B2)가 비어 있으면 가운데 사각형을 연주합니다.
* 가운데가 비어 있지 않고 네 모서리 (사각형 A1, A3, C1 또는 C3) 중 하나가 비어 있으면 모서리 중 하나를 연주합니다 (어느 것이 든 상관 없습니다). * 가운데가 비어 있지 않고 모서리가 비어 있지 않은 경우 가장자리 중 하나 (사각형 A2, B1, B3 또는 C2)를 재생하십시오. String toString () |
보드의 현재 상태를 나타내는 문자열을 반환합니다. 문자열에는이 예제에서와 같이 별도의 콘솔 행에 행과 분리 기호 행을 표시하는 개행 문자가 포함됩니다. | O | | O
- | - | - | X | - | - | - | X | TicTacToeBoard 챌린지의이 버전에서는 컴퓨터 플레이어가 상대방을 상대로 더 지능적인 전략을 사용해야합니다. 다음과 같이 컴퓨터의 동작을 결정하십시오. |
컴퓨터가 다음 번 경기에서이기는 것이 가능하면 컴퓨터는 승리 한 사각형에서 재생해야합니다. 상대방이 다음 경기에서이기는 것이 가능하다면, 컴퓨터는 상대방의이기는 광장에서 승리를 막아야한다.
-
가운데 사각형이있는 경우 컴퓨터는 중앙 사각형을 가져야합니다.
-
모퉁이 사각형을 사용할 수 있으면 컴퓨터는 사용 가능한 모퉁이 중 하나에서 재생해야합니다.
-
컴퓨터는 사용 가능한 가장자리 사각형에서 재생해야합니다.
-
이 전략을 구현하려면 플레이어가 다음 행동에서 승리 할 수 있는지 판단 할 수있는 루틴을 개발해야합니다. 이렇게하려면 8 개의 3 행렬 벡터 각각을 살펴보고 벡터에 빈 칸이 하나 있는지 확인하고 다른 두 개의 사각형에 동일한 상대방의 표시가 있는지 확인해야합니다. 2 개의 X 또는 2 개의 O).
-
빈 사각형을 표현하기 위해 0을 사용하고, X를 표현하기 위해 1을, 그리고 O를 표현하기 위해 2를 사용하면됩니다. 그러나 이것은 꽤 복잡한 논리를 필요로합니다. s1, s2, 및 s3은 8 개의 3 행렬 벡터 중 하나의 3 개의 제곱의 내용을 포함하는 정수입니다. if (s1 == 0 & s2 == 1 & s3 == 1) // X는 (s2 == 0 & s1 == 1 & s3 == 1) // s2가 (s3 == 0 & s1 == 1 & s2 == 1)면 X가 이길 수있다. s3
에서 재생하면 X를 얻을 수 있습니다. 팁: 빈 사각형, X 및 O를 나타내는 데 0, 1 및 2를 사용하는 대신 소수 2, 3 및 5를 대신 사용하십시오.그런 다음 플레이어가 주어진 벡터에서 승리 할 수 있는지 여부를 결정하려면 해당 벡터의 세 값을 단순히 곱하십시오. 결과가 18이면 X가 이길 수 있습니다 (233 = 18). 결과가 50이면 O가 이길 수 있습니다 (255 = 50).
이 전략은 이전 버전의 프로그램에 적용된 전략보다 개선되었지만 여전히 완벽한 전략은 아닙니다. 올바른 순서로 컴퓨터를 이길 수 있다는 점에 유의하십시오. 추가 도전 과제를 원한다면 게임을 unwinnable하게 만들고 새로운 전략을 구현할 수있는 방법을 고안하기 위해 어떤 추가 전략이 필요한지 생각해보십시오.
이 문제에 대한 해결책은
Java Jam-in-One for Dummies, 4th Edition 제품 페이지의 다운로드 탭에서 찾을 수 있습니다.
행운을 빌어 요!