Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Jogo Arduino Touch Tic-Tac-Toe

Componentes e suprimentos

Arduino UNO
× 1
2.8 "Tela sensível ao toque
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto




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 algoritmos de inteligência artificial neste jogo, entenderemos por que 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


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 clicando no cartão aqui. Isso o ajudará a entender o código e calibrar a tela de toque.





Etapa 2:Tela Touch Color de 2.8 "para Arduino


Descobri essa tela de 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.

Obtenha aqui.

O display 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 da blindagem é que ela oferece um slot para micro SD muito fácil de usar.





Etapa 3: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 na 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 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


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 de vitória 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


Vamos dar uma olhada rápida no código do projeto. Precisamos de três bibliotecas para que o código seja compilado.
  • Adafruit TFTLCD modificado
  • Adafruit GFX
  • 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 pequeno tutorial. No entanto, vou mostrar 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 tutorial.

NOTA:Como Banggood oferece a mesma tela com dois drivers de tela 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);}  
graphics.c TicTacToeEasy.ino





Etapa 6:reflexõ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, 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 tutorial se você achar interessante. Obrigado!

Código

  • Snippet de código # 1
  • Snippet de código # 2
Snippet de código # 1 Texto simples
 

int firstMoves [] ={0,2,6,8}; // usará essas posições primeiro

for (counter =0; counter <4; counter ++) // Contar os primeiros lances jogados {if (board [firstMoves [counter]]! =0) // Primeiro movimento é tocado 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; }}

Snippet de código # 2 Texto simples
 

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;}

Github
https://github.com/adafruit/Adafruit-GFX-Libraryhttps://github.com/adafruit/Adafruit-GFX-Library
Github
https://github.com/adafruit/Touch-Screen-Libraryhttps://github.com/adafruit/Touch-Screen-Library

Processo de manufatura

  1. Xadrez
  2. Jogo Arduino Gyroscope com MPU-6050
  3. Jogo Arduino Pong - Tela OLED
  4. Piano portátil de toque capacitivo
  5. Controlador de jogo Arduino
  6. Jogo Arduino Pong em Matriz 24x16 com MAX7219
  7. Jogo Arduino Touch Breakout
  8. Jogo de Operação Gigante Animatronics Lego Minfig
  9. Jogo Pixel Chaser
  10. Jogo Dino automatizado usando arduino