Lar Finanças Pessoais Java Programação Desafio: Adicionando Arrays ao Programa Tic-Tac-Toe Simples

Java Programação Desafio: Adicionando Arrays ao Programa Tic-Tac-Toe Simples

Vídeo: 1.1: Code! Programming for Beginners with p5.js 2024

Vídeo: 1.1: Code! Programming for Beginners with p5.js 2024
Anonim

Isto O desafio da programação Java baseia-se nos desafios anteriores desta série Tic-Tac-Toe e testa sua capacidade de usar arrays - dois deles, de fato.

No Java Programming Challenge: Um jogo Tic-Tac-Toe simples e um desafio de programação Java: adicionando classe ao programa Tic-Tac-Toe simples, você é desafiado a escrever um programa para jogar o jogo simples de Tic-Tac-Toe.

Como um jogo, Tic-Tac-Toe grita pelo uso de uma matriz para representar o status do jogo. Sem arrays, você deve usar uma variável separada para representar cada quadrado da placa. Com uma matriz, você pode usar uma única variável para representar todos os nove quadrados.

Este desafio de programação é simples: escreva uma versão aprimorada do programa que faz uso de arrays. Você deve usar pelo menos dois arrays em sua solução:

  1. Você deve usar uma matriz para representar a placa. Muito provavelmente, você quer usar uma matriz unidimensional com nove elementos, da seguinte forma:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Em outras palavras, o quadrado superior esquerdo (A1) é armazenado no elemento de matriz 0 e o quadrado inferior direito (C3) é armazenado no elemento de matriz 8.

  2. Você também deve usar uma matriz para representar os oito possíveis vetores três em uma linha.

    Você pode usar essa matriz para determinar se qualquer jogador ganhou o jogo. Provavelmente, você quer usar uma matriz bidimensional para esta tarefa. A matriz irá armazenar oito matrizes de três elementos, cada uma das quais representa os três índices de um determinado vetor de três em uma linha.

    A matriz completa conteria os seguintes dados:

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    

Um requisito adicional deste programa é que a classe TicTacToeBoard que você criou para esse desafio deve ser completamente compatível com a classe que você criou para o desafio anterior. Em outras palavras, ele deve implementar exatamente os mesmos métodos. Para sua conveniência, esses métodos são repetidos na tabela a seguir.

Como esses métodos se referem aos quadrados da placa tic-tac-toe usando designações de coluna de linha, como A1 ou B2, sua implementação precisará mapear essas designações para números de índice. Por exemplo, se a seqüência A1 for passada para o método playAt, o programa deve marcar a reprodução no índice 0 na matriz.

A TicTacToeBoard Class
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.
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 X's.

2: Se qualquer linha, coluna ou diagonal contém todos os O's.

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 |

Como um desafio adicional, para esta versão do desafio TicTacToeBoard, o jogador do computador deve usar uma estratégia mais inteligente contra o oponente humano. Determine a jogada do computador da seguinte forma:

  1. Se for possível que o computador ganhe na próxima jogada, o computador deve ser jogado no quadrado vencedor.

  2. Se for possível que o oponente humano ganhe em sua próxima jogada, o computador deve jogar no quadrado vencedor do adversário humano para bloquear a vitória.

  3. Se o quadrado central estiver disponível, o computador deve pegar o quadrado central.

  4. Se algum quadrado de canto estiver disponível, o computador deve tocar em um dos cantos disponíveis.

  5. O computador deve ser reproduzido em um quadrado de borda disponível.

Note que para implementar esta estratégia, você precisará desenvolver uma rotina que pode determinar se qualquer jogador pode ganhar em seu próximo movimento. Para fazer isso, você terá que olhar para cada um dos vetores oito, três em uma linha para determinar se o vetor contém um quadrado vazio e se cada um dos outros dois quadrados contém marcas para o mesmo oponente (aquele é, dois X ou dois O's).

Você pode fazer isso usando 0 para representar um quadrado vazio, 1 para representar um X e 2 para representar um O. Mas isso exigiria uma lógica bastante complicada - algo assim seria necessário, assumindo que s1, s2, e s3 são números inteiros contendo o conteúdo dos três quadrados de um dos oito vetores de três fileiras:

se (s1 == 0 & s2 == 1 & s3 == 1) // X pode ganhe jogando em s1 se (s2 == 0 & s1 == 1 & s3 == 1) // X pode ganhar jogando em s2 se (s3 == 0 & s1 == 1 & s2 == 1) // X pode ganhar jogando em s3

Então, aqui está uma dica: Em vez de usar 0, 1 e 2 para representar um quadrado vazio, um X e um O, use os números primos 2, 3 e 5 em vez disso.Então, para determinar se um jogador pode ganhar em um determinado vetor, basta multiplicar os três valores desse vetor. Se o resultado for 18, X pode ganhar (233 = 18). Se o resultado for 50, O pode ganhar (255 = 50).

Note também que, embora esta estratégia seja uma melhoria em relação à estratégia empregada para versões anteriores do programa, ainda não é uma estratégia perfeita: você ainda pode bater o computador com a seqüência certa de peças. Se você quiser um desafio adicional, considere quais estratégias adicionais seriam necessárias para tornar o jogo inabalável e, em seguida, planejar uma maneira de implementar a nova estratégia.

Você pode encontrar a solução para este desafio na guia Downloads da página de produtos Java All-in-One For Dummies, 4th Edition.

Boa sorte!

Java Programação Desafio: Adicionando Arrays ao Programa Tic-Tac-Toe Simples

Escolha dos editores

Acalma suas emoções ao praticar Mindfulness - dummies

Acalma suas emoções ao praticar Mindfulness - dummies

Aqui, você descobre a maneira consciente de gerenciar as emoções - as etapas para tome quando estiver sentindo baixo, excessivamente irritado ou desconfortavelmente ansioso. As emoções positivas podem ser um sentimento maravilhoso. A alegria, a alegria, a emoção e a felicidade são perfeitas. Mas como você pode lidar com as chamadas emoções negativas? Use a atenção para a saúde emocional A atenção plena está se tornando ...

Como começar o seu dia de trabalho com meditação Mindfulness - dummies

Como começar o seu dia de trabalho com meditação Mindfulness - dummies

Você pode encontrar a meditação mindfulness é uma ótima maneira de Comece o seu dia de trabalho. Quando chegar ao trabalho pela manhã, talvez já esteja estressado. Depois de uma agitada hora ou duas preparando as crianças para a escola ou regatear com seu parceiro ou lidar com alguma emergência em casa, seguido de ...

Os melhores sites Mindfulness - dummies

Os melhores sites Mindfulness - dummies

, Independentemente de você morar no Reino Unido ou em outro lugar, se você procurar "mindfulness" 'on-line, você literalmente obterá milhões de resultados. Como você pode dizer o trigo da palha? Aqui estão alguns sites que você achará útil. Atento. Este recurso maravilhoso tem muitos conteúdos de alta qualidade de professores excelentes de atenção plena. O ...

Escolha dos editores

HDR Solução de problemas: Nada está funcionando - manequins

HDR Solução de problemas: Nada está funcionando - manequins

Quando você se depara com uma situação com suas fotografias de alcance dinâmico elevado e parece que nada que você está fazendo está funcionando - as configurações não parecem boas, a imagem parece errada, os efeitos são ruins - relaxe e faça uma pausa. A imagem está lhe dizendo algo. Que algo às vezes é relacionado a forçar ...

HDR Resolução de problemas: falta de imaginação - dummies

HDR Resolução de problemas: falta de imaginação - dummies

A imaginação é uma coisa poderosa ao preparar imagens HDR, fato que é tornou-se mais óbvio quando você vê o resultado de não usá-lo versus usá-lo. A imagem superior desta figura é uma imagem HDR de um diner local durante a "hora dourada" - naquele horário atrasado (ou manhã) quando ...

HDR Solução de problemas: Sharpening - dummies

HDR Solução de problemas: Sharpening - dummies

Se você ficar apanhado na perfeição, você está preparado para aumentar seu HDR imagens. Os fotógrafos às vezes estão obcecados com a nitidez em suas fotos. Eles querem que tudo seja pixelly perfeitamente afiado do nariz da câmera até o infinito, independentemente da lente, abertura, ISO ou velocidade do obturador que eles usem. Esta figura mostra os resultados ...

Escolha dos editores

Cisco Rede: Mostrar comando de versão em um Switch - dummies

Cisco Rede: Mostrar comando de versão em um Switch - dummies

Em qualquer componente de rede da Cisco, o show O comando de versão é aplicável a qualquer hardware usando o Sistema Operacional Cisco IET (Internetwork Operating System), incluindo switches. O comando show version mostra informações ligeiramente diferentes, de acordo com o tipo de dispositivo em que você usa. Veja a saída do comando show version em um switch e ...

Cisco Rede: Modo de operação EXEC privilegiado - manequins

Cisco Rede: Modo de operação EXEC privilegiado - manequins

Você precisa usar o modo EXEC privilegiado se quiser realmente tem acesso de atualização a um sistema de rede Cisco,. Para entrar neste modo no modo EXEC do usuário, emita o comando enable, que solicita uma senha, se configurado. Como o nome do modo sugere, este modo tem privilégios extras para permitir ...

Cisco Rede: Configuração de Senha de Shell Seguro (SSH) - manequins

Cisco Rede: Configuração de Senha de Shell Seguro (SSH) - manequins

Shell seguro (SSH) é um protocolo de rede para seus dispositivos Cisco, que é mais seguro do que o Telenet. Definir uma senha segura é um requisito de configuração para este protocolo. Para configurar o acesso a um switch Cisco para SSH, você precisará ter uma conta de usuário criada em sua opção. O exemplo supõe que você tenha ...