Índice:

Jogo Arduino Touch Tic Tac Toe: 6 etapas (com imagens)
Jogo Arduino Touch Tic Tac Toe: 6 etapas (com imagens)
Anonim
Image
Image
Jogo Arduino Touch Tic Tac Toe
Jogo Arduino Touch Tic Tac Toe
Jogo Arduino Touch Tic Tac Toe
Jogo Arduino Touch Tic Tac Toe
Jogo Arduino Touch Tic Tac Toe
Jogo Arduino Touch Tic Tac Toe

Caros amigos, bem-vindos a outro tutorial do Arduino! Neste tutorial detalhado, vamos construir um jogo Arduino Tic Tac Toe. Como você pode ver, estamos usando uma tela sensível ao toque e jogando contra o computador. Um jogo simples como o Tic Tac Toe é uma ótima introdução à programação de jogos e à Inteligência Artificial. Mesmo que não usemos nenhum algoritmo de inteligência artificial neste jogo, entenderemos por que os algoritmos de inteligência artificial são necessários em jogos mais complexos.

Desenvolver jogos para o Arduino não é fácil e requer muito tempo. Mas podemos construir alguns jogos simples para o Arduino porque é divertido e nos permite explorar alguns tópicos de programação mais avançados, como Inteligência artificial. É um ótimo aprendizado e no final você terá um bom jogo para as crianças!

Vamos agora construir este projeto.

Etapa 1: Obtenha todas as peças

Image
Image
O 2.8
O 2.8

As peças necessárias para construir este projeto são as seguintes:

Um Arduino Uno ▶

Uma tela de toque de 2,8”▶

O custo do projeto é muito baixo. Custa apenas 15 $

Antes de tentar construir este projeto, assista ao vídeo que preparei sobre a tela de toque. Anexei a este instrutível. Isso o ajudará a entender o código e calibrar a tela de toque.

Etapa 2: Visor colorido de toque de 2,8 "para Arduino

Image
Image
O 2.8
O 2.8
O 2.8
O 2.8

Descobri essa tela sensível ao toque no banggood.com e decidi comprá-la para tentar usá-la em alguns de meus projetos. Como você pode ver, a tela é barata, custa cerca de US $ 11.

Baixe aqui ▶

A tela oferece resolução de 320x240 pixels e vem como um escudo que torna a conexão com o Arduino extremamente fácil. Como você pode ver, a tela usa quase todos os pinos digitais e analógicos do Arduino Uno. Ao usar esta blindagem, ficamos com apenas 2 pinos digitais e 1 pino analógico para nossos projetos. Felizmente, a tela também funciona bem com o Arduino Mega, então, quando precisarmos de mais pinos, podemos usar o Arduino Mega em vez do Arduino Uno. Infelizmente este display não funciona com o Arduino Due ou a placa Wemos D1 ESP8266. Outra vantagem do escudo é que ele oferece um slot micro SD que é muito fácil de usar.

Etapa 3: Construindo o projeto e testando-o

Construindo o projeto e testando-o
Construindo o projeto e testando-o
Construindo o projeto e testando-o
Construindo o projeto e testando-o
Construindo o projeto e testando-o
Construindo o projeto e testando-o

Após conectar a tela ao Arduino Uno, podemos carregar o código e estamos prontos para jogar.

Primeiramente, pressionamos o botão “Start Game” e o jogo é iniciado. O Arduino joga primeiro. Podemos então fazer nosso movimento simplesmente tocando a tela. O Arduino então executa seu movimento e assim por diante. O jogador que conseguir colocar três de suas marcas em uma linha horizontal, vertical ou diagonal, ganha o jogo. Quando o jogo termina, a tela Game Over aparece. Podemos então pressionar o botão play again para iniciar o jogo novamente.

O Arduino é muito bom nesse jogo. Ele vai ganhar a maioria dos jogos, ou se você for um jogador muito bom, o jogo terminará empatado. Eu intencionalmente projetei este algoritmo para cometer alguns erros a fim de dar ao jogador humano uma chance de vencer. Adicionando mais duas linhas ao código do jogo, podemos tornar o Arduino impossível de perder o jogo. Mas como um chip de 2 $, a CPU do Arduino, pode vencer o cérebro humano? O programa que desenvolvemos é mais inteligente do que o cérebro humano?

Etapa 4: o algoritmo do jogo

O Algoritmo do Jogo
O Algoritmo do Jogo
O Algoritmo do Jogo
O Algoritmo do Jogo

Para responder a essa pergunta, vamos dar uma olhada no algoritmo que implementei.

O computador sempre joga primeiro. Essa decisão por si só torna o jogo muito mais fácil para o Arduino vencer. O primeiro movimento é sempre um canto. O segundo movimento para o Arduino também é um canto aleatório do restante, sem se preocupar com o movimento do jogador. Deste ponto em diante, o Arduino primeiro verifica se o jogador pode ganhar no próximo movimento e bloqueia esse movimento. Se o jogador não conseguir vencer em uma única jogada, ele executa uma jogada de canto se estiver disponível ou uma jogada aleatória das restantes. É isso, este algoritmo simples pode vencer o jogador humano todas as vezes ou na pior das hipóteses o jogo resultará em um empate. Este não é o melhor algoritmo de jogo do jogo da velha, mas um dos mais simples.

Este algoritmo pode ser implementado no Arduino facilmente, porque o jogo Tic Tac Toe é muito simples, e podemos analisá-lo e resolvê-lo facilmente. Se projetarmos a árvore do jogo, podemos descobrir algumas estratégias vencedoras e implementá-las facilmente no código ou podemos deixar a CPU computar a árvore do jogo em tempo real e escolher o melhor movimento por si só. Claro, o algoritmo que usamos neste jogo é muito simples, porque o jogo é muito simples. Se tentarmos projetar um algoritmo vencedor para o xadrez, mesmo se usarmos o computador mais rápido, não poderemos calcular a árvore do jogo em mil anos! Para jogos como este, precisamos de outra abordagem, precisamos de alguns algoritmos de Inteligência Artificial e, claro, um grande poder de processamento. Mais sobre isso em um vídeo futuro.

Etapa 5: Código do Projeto

Código do Projeto
Código do Projeto

Vamos dar uma olhada rápida no código do projeto. Precisamos de três bibliotecas para que o código seja compilado.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Tela sensível ao toque:

Como você pode ver, mesmo um jogo simples como este requer mais de 600 linhas de código. O código é complexo, então não vou tentar explicá-lo em um breve tutorial. Vou mostrar a você a implementação do algoritmo para os movimentos do Arduino.

No início, jogamos dois cantos aleatórios.

<int firstMoves = {0, 2, 6, 8}; // usará essas posições primeiro para (counter = 0; counter <4; counter ++) // Contar os primeiros lances jogados {if (board [firstMoves [counter]! = 0) // O primeiro movimento é jogado por alguém {movesPlayed ++; }} faça {if (moves <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (placa [c] == 0) {atraso (1000); placa [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

A seguir, em cada rodada verificamos se o jogador consegue vencer na próxima jogada.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; else if (board [0] == 1 && board [1] == 0 && board [2] == 1) return 1; else if (board [1] == 1 && board [2] == 1 && board [0] == 0) return 0; else if (board [3] == 1 && board [4] == 1 && board [5] == 0) return 5; else if (board [4] == 1 && board [5] == 1 && board [3] == 0) return 3; else if (board [3] == 1 && board [4] == 0 && board [5] == 1) return 4; else if (board [1] == 0 && board [4] == 1 && board [7] == 1) return 1; senão retorna 100; }

Se sim, bloqueamos esse movimento, na maioria das vezes. Não bloqueamos todos os movimentos para dar ao jogador humano uma chance de vencer. Você consegue descobrir quais movimentos não estão bloqueados? Depois de bloquear o movimento, jogamos um canto restante, ou um movimento aleatório. Você pode estudar o código e implementar seu próprio algoritmo imbatível facilmente. Como sempre, você pode encontrar o código do projeto anexado neste instrutível.

NOTA: Uma vez que Banggood oferece o mesmo monitor com dois drivers de vídeo diferentes, se o código acima não funcionar, altere a função initDisplay para o seguinte:

void initDisplay ()

{tft.reset (); tft.begin (0x9341); tft.setRotation (3); }

Etapa 6: considerações finais e melhorias

Considerações finais e melhorias
Considerações finais e melhorias

Como você pode ver, mesmo com um Arduino Uno, podemos construir um algoritmo imbatível para jogos simples. Este projeto é ótimo, porque é fácil de construir, e ao mesmo tempo uma ótima introdução à Inteligência Artificial e programação de jogos. Vou tentar construir alguns projetos mais avançados com Inteligência Artificial no futuro usando o Raspberry Pi mais poderoso, então fique ligado! Eu adoraria ouvir sua opinião sobre este projeto.

Por favor, poste seus comentários abaixo e não se esqueça de gostar do instrutível se achar interessante. Obrigado!

Recomendado: