개인 재정 자바 프로그래밍 과제 : 간단한 Tic-Tac-Toe 프로그램에 배열 추가하기

자바 프로그래밍 과제 : 간단한 Tic-Tac-Toe 프로그램에 배열 추가하기

비디오: Technology Stacks - Computer Science for Business Leaders 2016 2024

비디오: Technology Stacks - Computer Science for Business Leaders 2016 2024
Anonim

This 자바 프로그래밍의 도전 과제는이 Tic-Tac-Toe 시리즈의 이전 과제를 기반으로하며 어레이를 사용할 수있는 능력을 테스트합니다. 그 중 두 가지는 사실입니다.

자바 프로그래밍의 도전 과제: 간단한 틱택 테크 게임과 자바 프로그래밍 챌린지: 간단한 틱택 테크 프로그램에 클래스 추가하기 틱택 테크의 간단한 게임을하기위한 프로그램을 작성해야합니다.

Tic-Tac-Toe은 게임의 상태를 나타내는 배열의 사용을 외칩니다. 배열이 없으면 별도의 변수를 사용하여 보드의 각 사각형을 나타내야합니다. 배열을 사용하면 단일 변수를 사용하여 모든 9 개의 사각형을 나타낼 수 있습니다.

이 프로그래밍 과제는 간단합니다. 어레이를 사용하는 향상된 프로그램 버전을 작성하십시오. 솔루션에서 적어도 두 개의 배열을 사용해야합니다.

  1. 배열을 사용하여 보드를 표현해야합니다. 대부분 다음과 같이 9 개의 요소가있는 1 차원 배열을 사용하려고합니다.

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- --- --- | --- 6 | 7 | 즉, 배열 요소 0에 왼쪽 상단 사각형 (A1)이 저장되고 배열 요소 8에 오른쪽 하단 사각형 (C3)이 저장됩니다.
    

    가능한 3-in-a-row 벡터 인 8 개의 가능한 벡터를 나타 내기 위해 배열을 사용해야합니다.
  2. 이 배열을 사용하여 두 플레이어가 게임에서 승리했는지 여부를 판단 할 수 있습니다. 대부분이 작업에 2 차원 배열을 사용하려고합니다. 이 배열은 8 개의 3 요소 배열을 보유 할 것이며 각 배열은 특정 3 in-a-row 벡터의 3 개 색인을 나타냅니다.

    전체 배열에는 다음 데이터가 포함됩니다.

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    이 프로그램의 또 다른 요구 사항은 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 챌린지의이 버전에서는 컴퓨터 플레이어가 상대방을 상대로 더 지능적인 전략을 사용해야합니다. 다음과 같이 컴퓨터의 동작을 결정하십시오.

컴퓨터가 다음 번 경기에서이기는 것이 가능하면 컴퓨터는 승리 한 사각형에서 재생해야합니다. 상대방이 다음 경기에서이기는 것이 가능하다면, 컴퓨터는 상대방의이기는 광장에서 승리를 막아야한다.

  1. 가운데 사각형이있는 경우 컴퓨터는 중앙 사각형을 가져야합니다.

  2. 모퉁이 사각형을 사용할 수 있으면 컴퓨터는 사용 가능한 모퉁이 중 하나에서 재생해야합니다.

  3. 컴퓨터는 사용 가능한 가장자리 사각형에서 재생해야합니다.

  4. 이 전략을 구현하려면 플레이어가 다음 행동에서 승리 할 수 ​​있는지 판단 할 수있는 루틴을 개발해야합니다. 이렇게하려면 8 개의 3 행렬 벡터 각각을 살펴보고 벡터에 빈 칸이 하나 있는지 확인하고 다른 두 개의 사각형에 동일한 상대방의 표시가 있는지 확인해야합니다. 2 개의 X 또는 2 개의 O).

  5. 빈 사각형을 표현하기 위해 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 제품 페이지의 다운로드 탭에서 찾을 수 있습니다.

행운을 빌어 요!

자바 프로그래밍 과제 : 간단한 Tic-Tac-Toe 프로그램에 배열 추가하기

편집자의 선택

플립 비디오 인형 치트 시트 - 인형

플립 비디오 인형 치트 시트 - 인형

플립 비디오 캠코더는 가장 사용하기 쉬운 캠코더입니다. 세계. 플립 비디오를 사용하면 비디오를 가리키고 촬영 한 다음 컴퓨터로 비디오를 복사 할 수 있습니다. 몇 번의 클릭 후, 당신은 Facebook, MySpace 및 YouTube에서 귀하의 작품을 과시하고 있습니다. Flip의 버튼을 해독함으로써 비디오를 고통없이 촬영하는 방법을 찾으십시오. 알아보기 ...

귀하의 디지털 필름에 대한 개인 상영 - 인형

귀하의 디지털 필름에 대한 개인 상영 - 인형

오늘, DSLR 필름 심사. HD가 장착 된 정교한 대형 스크린 TV는 여러 스피커의 서라운드 사운드 스테레오와 함께 아주 좋은 간식을 제공합니다. 따라서 영화 밤을 장소에서 쉽게 주최 할 수 있으며 영화관에 갈 수도 있습니다. ...

디지털 영화에 정적 제목을 추가하는 방법 - 인형

디지털 영화에 정적 제목을 추가하는 방법 - 인형

초연 요소는 다양한 선택을 제공합니다 DSLR 영화의 타이틀 선택 항목, 하위 3 분의 1 로케이터 정보. 로케이터 정보는 뉴스 세그먼트 및 다큐멘터리에서 장면의 사람이나 장소를 설명하는 데 사용되는 ID와 같습니다. 사람의 경우 이름과 설명이라는 두 줄로 구성됩니다. 예를 들어, Charles Dickens / Writer, ...

편집자의 선택

관계 속의 분노를 다루는 - 인형

관계 속의 분노를 다루는 - 인형

우리 모두는 때때로 파트너들과 화를 낸다. 분노가 당신과 당신의 관계에 미치는 파괴적인 영향을 최소화하는 데 도움이되는 다음 요령을 시도하십시오. 당신이 분노의 징후를 처음 알기 시작할 때, 당신의 파트너에게 무슨 일이 일어나는지 물어보십시오. 화가 난 사람을 상처 입히려 고합니다.

자폐증 진단의 영향 - 인형

자폐증 진단의 영향 - 인형

자폐아를 찾는 것이 매우 어렵습니다. 앞으로의 길은 쉬울 것이라고 아무도 말할 수 없습니다. 자녀의 생년월일과 본인의 생년월일에 관한 스크립트를 다시 작성해야 할 수도 있습니다. 당신은 지금 다루어야 할 새로운 쟁점, 압박 및 결정들을 가지고 있습니다. 그리고 주변 사람들은 ...

당신이 종속인지 결정하기 - 인형

당신이 종속인지 결정하기 - 인형

다음 증상 목록에서 확인하십시오. 당신은 모두가 공손 할 필요는 없으며, 코펜던트의 심각성 정도가 있습니다. 치료를하지 않으면 시간이 지남에 따라 코드 종속성이 악화되지만 도움을 받아 복구 할 수 있고 작업에서 훨씬 더 효과적 일 수 있습니다 ...

편집자의 선택

짧은 명상 묵상 시도 - 인형

짧은 명상 묵상 시도 - 인형

당신의 마음을 집중할 수있는 능력은 마음 챙김 명상을 통해 가장 강력하게 개발됩니다. Mindfulness 명상 중 하나는 호흡의 mindfulness입니다. 이것은 숨을 의식적으로 인식하는 것입니다. 명상을 스스로 시도하려면 다음 단계를 따르십시오. 자신의 호흡 감을 알아야합니다. 변경할 필요가 없습니다 ...

마음가짐의 세 측면 - 인형

마음가짐의 세 측면 - 인형

마음가짐은 세 가지 측면으로 주의 깊은 인식. 이 목록을 인쇄하여 핀이 무엇인지 생각 나게하십시오. 의도 - 당신의 의도는 당신이 마음가짐을 연습함으로써 얻고 자하는 것입니다. 스트레스를 줄이고 감정적 인 균형을 유지하거나 발견 할 수 있습니다.

다른 명상을 시도하십시오 - 인형

다른 명상을 시도하십시오 - 인형

명상 확장이라는 인식은 명상 확장의 중심에 있습니다. Mindfulness 명상 연습. 앉는 자리는 수천 년 동안 명상을 위해 그리고 정당한 이유로 사용되었습니다. 어떻게 평소에 앉아 있니? 당신이 대부분의 사람들과 비슷하다면, 아마 의자 나 소파 뒤에 기대어집니다. 네가 괜찮다면 ...