Vídeo: 1.1: Code! Programming for Beginners with p5.js 2024
Neste desafio, você melhora o seu jogo Tic-Tac-Toe, adicionando uma aula de programação Java, que permite ao programa fazer um esforço rudimentar em direção à estratégia ao determinar o computador se move.
No Java Programming Challenge: um jogo Tic-Tac-Toe simples, você é desafiado a escrever um programa para jogar o jogo simples do Tic-Tac-Toe. Neste desafio, você modifica o código-fonte da sua solução anterior para ajudar o computador a elaborar estratégias.
Embora as regras do jogo sejam muito simples, criar um programa de computador que pode jogar o jogo pode ser complexo. Uma série de detalhes potencialmente complicados precisam ser incorporados no programa. Especificamente:
-
O programa deve ter uma maneira de representar internamente o status de cada um dos nove quadrados que compõem a placa Tic-Tac-Toe.
-
O programa deve fornecer uma maneira de registrar um movimento para qualquer jogador e deve garantir que cada movimento seja válido (por exemplo, um jogador não pode jogar em um quadrado que já está ocupado por um X ou um O.
-
O programa deve ser capaz de determinar quando um dos jogadores ganhou olhando todas as oito das possíveis combinações três em uma linha: as três linhas, as três colunas e as duas diagonais.
-
O programa também deve ser capaz de determinar quando o jogo é um sorteio - isto é, quando os nove quadrados foram jogados e nenhum dos dois jogadores ganhou.
Ao mesmo tempo, o programa tem que gerenciar os detalhes de interagir com o usuário perguntando ao usuário para inserir o movimento dele, anunciando o jogo do computador, exibindo uma representação atualizada da placa após cada jogo e declarando um vencedor ou anunciando um sorteio quando o jogo terminar.
Neste desafio, você é convidado a separar esses dois elementos do programa Tic-Tac-Toe: a parte do e programa que administra o status e o progresso do jogo e a parte do programa que gerencia a interação com o usuário. Você fará isso criando uma classe chamada TicTacToeBoard, que fornece métodos que podem ser chamados para jogar um jogo completo. Então, você é convidado a escrever um programa que usa a classe TicTacToeBoard para permitir que um oponente humano jogue um jogo de Tic-Tac-Toe contra o computador.
Do ponto de vista do usuário, este programa funcionará de forma idêntica ao programa criado para resolver o desafio do jogo Tic-Tac-Toe simples, com uma diferença: para esta versão do jogo, o programa faz um esforço rudimentar em direção à estratégia ao determinar os movimentos da informática.O computador não funciona perfeitamente, então ainda é facilmente acessível. Mas faz algum esforço além de jogar simplesmente na primeira praça vazia que vê.
A tabela a seguir lista os métodos que a classe TicTacToeBoard deve implementar. Lembre-se, você precisará criar dois. arquivos java para resolver esse desafio. O primeiro, TicTacToeBoard. java, implementa a classe TicTacToeBoard. O segundo, chamado simplesmente TicTacToe. java, é o programa que o usuário executará para jogar um jogo de Tic-Tac-Toe contra o computador.
Construtor | Descrição |
---|---|
TicTacToeBoard | Cria um novo TicTacToeBoard com todos os quadrados vazios. |
Método | Descrição |
void reset () | Repor o status de cada quadrado para esvaziar. |
int getSquare (String square) | Retorna o status do quadrado especificado pelo quadrado, que deve ser uma das cadeias A1, A2, A3, B1, B2, B3, C1, C2 ou C3. Retorna 0 se o quadrado estiver vazio, 1 se contiver um X e 2 se contiver um O. Lança IllegalArgumentException se o quadrado não for um dos valores permitidos. |
void playAt (String square, int player) | Marca o quadrado especificado (A1, A2, A3, B1, B2, B3, C1, C2 ou C3) para o jogador especificado (1 para X, 2 para O). Lança IllegalArgumentException se o quadrado não for um dos valores permitidos, o jogador não é 1 ou 2 ou o quadrado especificado não está vazio. |
int isGameOver () | Determina se o jogo acabou. Retorna 0 se o jogo não terminar, 1 se X ganhou o jogo, 2 se O ganhou o jogo e 3 se o jogo for um sorteio. As condições de término do jogo são as seguintes:
1: Se qualquer linha, coluna ou diagonal contém todos os Xs. 2: Se qualquer linha, coluna ou diagonal contém todos os Os. 3: se não houver quadrados vazios e nem X nem O ganharam. |
int getNextMove () | Retorna um número inteiro que representa o próximo movimento para o oponente do computador. Este método deve fazer um esforço rudimentar para selecionar um bom movimento, de acordo com a seguinte estratégia:
* Se o centro (quadrado B2) estiver vazio, jogue o quadrado central. * Se o centro não estiver vazio, mas qualquer um dos quatro cantos (quadrados A1, A3, C1 ou C3) está vazio, toque um dos cantos (não importa qual). * Se o centro não estiver vazio e nenhum canto estiver vazio, toque uma das arestas (quadrados A2, B1, B3 ou C2). |
String toString () | Retorna uma string que representa o status atual da placa. A seqüência de caracteres inclui caracteres de nova linha para exibir as linhas, bem como linhas separadoras em linhas de console separadas, como neste exemplo:
O | | O - | - | - | X | - | - | - | X | |
Se você estiver perplexo, você pode encontrar a solução na guia Downloads da página de produtos Java All-in-One For Dummies, 4th Edition.
Boa sorte!