Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Juego Tic-Tac-Toe Arduino Touch

Componentes y suministros

Arduino UNO
× 1
2.8 "Pantalla táctil
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Queridos amigos, ¡bienvenidos a otro tutorial de Arduino! En este tutorial detallado, vamos a construir un juego Arduino Tic-Tac-Toe. Como puede ver, estamos usando una pantalla táctil y estamos jugando contra la computadora. Un juego simple como Tic-Tac-Toe es una gran introducción a la programación de juegos y la inteligencia artificial. Aunque no utilizaremos ningún algoritmo de inteligencia artificial en este juego, entenderemos por qué se requieren algoritmos de inteligencia artificial en juegos más complejos.

Desarrollar juegos para Arduino no es fácil y requiere mucho tiempo. Pero podemos construir algunos juegos simples para Arduino porque es divertido y nos permitirá explorar algunos temas de programación más avanzados, como la inteligencia artificial. ¡Es una gran experiencia de aprendizaje y al final tendrás un buen juego para los niños!

Construyamos ahora este proyecto.

Paso 1:obtenga todas las piezas

Las partes necesarias para construir este proyecto son las siguientes:

  • Un Arduino Uno
  • Una pantalla táctil de 2.8 "

El costo del proyecto es muy bajo. Son solo $ 15.

Antes de intentar construir este proyecto, mire el video que he preparado sobre la pantalla táctil haciendo clic en la tarjeta aquí. Le ayudará a comprender el código y calibrar la pantalla táctil.

Paso 2:Pantalla táctil a color de 2.8 "para Arduino

Descubrí esta pantalla táctil en banggood.com y decidí comprarla para intentar usarla en algunos de mis proyectos. Como puede ver, la pantalla es económica, cuesta alrededor de $ 11.

Consíguelo aquí.

La pantalla ofrece una resolución de 320x240 píxeles y viene como un escudo que hace que la conexión con Arduino sea extremadamente fácil. Como puede ver, la pantalla usa casi todos los pines digitales y analógicos del Arduino Uno. Al usar este escudo nos quedamos con solo 2 pines digitales y 1 pin analógico para nuestros proyectos. Afortunadamente, la pantalla también funciona bien con el Arduino Mega, por lo que cuando necesitemos más pines, podemos usar el Arduino Mega en lugar del Arduino Uno. Desafortunadamente, esta pantalla no funciona con Arduino Due o la placa Wemos D1 ESP8266. Otra ventaja del escudo es que ofrece una ranura micro SD que es muy fácil de usar.

Paso 3:compilar el proyecto y probarlo

Luego de conectar la pantalla al Arduino Uno, podemos cargar el código y estamos listos para jugar.

Al principio, presionamos el botón "Iniciar juego" y el juego comienza. El Arduino juega primero. Entonces podemos jugar nuestro movimiento simplemente tocando la pantalla. El Arduino luego juega su movimiento y así sucesivamente. El jugador que logra colocar tres de sus marcas en una fila horizontal, vertical o diagonal gana el juego. Cuando termina el juego, aparece la pantalla Game Over. Luego, podemos presionar el botón Reproducir de nuevo para comenzar el juego nuevamente.

El Arduino es muy bueno en este juego. Ganará la mayoría de los juegos o, si eres un buen jugador, el juego terminará en empate. Diseñé intencionalmente este algoritmo para cometer algunos errores con el fin de darle al jugador humano la oportunidad de ganar. Añadiendo dos líneas más al código del juego, podemos hacer imposible que Arduino pierda el juego. Pero, ¿cómo puede un chip de 2 dólares, la CPU Arduino, vencer al cerebro humano? ¿El programa que desarrollamos es más inteligente que el cerebro humano?

Paso 4:el algoritmo del juego

Para responder a esta pregunta, veamos el algoritmo que he implementado.

La computadora siempre juega primero. Esta decisión por sí sola hace que el juego sea mucho más fácil de ganar para Arduino. El primer movimiento es siempre una esquina. El segundo movimiento para el Arduino es también una esquina aleatoria del resto sin preocuparse en absoluto por el movimiento del jugador. A partir de este punto, Arduino primero verifica si el jugador puede ganar en el siguiente movimiento y bloquea ese movimiento. Si el jugador no puede ganar en un solo movimiento, realiza un movimiento de esquina si está disponible o uno aleatorio del resto. Eso es todo, este simple algoritmo puede vencer al jugador humano cada vez o, en el peor de los casos, el juego resultará en un empate. Este no es el mejor algoritmo de juego de tic tac toe, pero sí uno de los más simples.

Este algoritmo se puede implementar en Arduino fácilmente, porque el juego Tic-Tac-Toe es muy simple, y podemos analizarlo y resolverlo fácilmente. Si diseñamos el árbol del juego, podemos descubrir algunas estrategias ganadoras e implementarlas fácilmente en el código o podemos dejar que la CPU calcule el árbol del juego en tiempo real y elija el mejor movimiento por sí mismo. Por supuesto, el algoritmo que usamos en este juego es muy simple, porque el juego es muy simple. Si intentamos diseñar un algoritmo ganador para el ajedrez, incluso si usamos la computadora más rápida, ¡no podremos calcular el árbol del juego en mil años! Para juegos como este, necesitamos otro enfoque, necesitamos algunos algoritmos de inteligencia artificial y, por supuesto, una gran potencia de procesamiento. Más sobre esto en un video futuro.

Paso 5:Código del proyecto

Echemos un vistazo rápido al código del proyecto. Necesitamos tres bibliotecas para compilar el código.

  • Adafruit TFTLCD modificado
  • Adafruit GFX
  • Pantalla táctil

Como puede ver, incluso un juego simple como este, requiere más de 600 líneas de código. El código es complejo, por lo que no intentaré explicarlo en un breve tutorial. Sin embargo, te mostraré la implementación del algoritmo para los movimientos de Arduino.

Al principio, jugamos dos esquinas al azar.

  int firstMoves [] ={0,2,6,8}; // usará estas posiciones primero para (contador =0; contador <4; contador ++) // Contar los primeros movimientos jugados {if (tablero [firstMoves [contador]]! =0) // El primer movimiento lo juega alguien {movePlayed ++; }} hacer {si (se mueve <=2) {int randomMove =random (4); int c =firstMoves [randomMove]; if (tablero [c] ==0) {retraso (1000); tablero [c] =2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b =1; }}  

A continuación, en cada ronda comprobamos si el jugador puede ganar en el siguiente movimiento.

  

int checkOpponent ()
{if (tablero [0] ==1 &&tablero [1] ==1 &&tablero [2] ==0) return 2; else if (tablero [0] ==1 &&tablero [1] ==0 &&tablero [2] ==1) return 1; más si (tablero [1] ==1 &&tablero [2] ==1 &&tablero [0] ==0) return 0; más si (tablero [3] ==1 &&tablero [4] ==1 &&tablero [5] ==0) return 5; más si (tablero [4] ==1 &&tablero [5] ==1 &&tablero [3] ==0) return 3; si no (tablero [3] ==1 &&tablero [4] ==0 &&tablero [5] ==1) return 4; más si (tablero [1] ==0 &&tablero [4] ==1 &&tablero [7] ==1) return 1; de lo contrario, devuelve 100;}

Si es así, bloqueamos ese movimiento, la mayoría de las veces. No bloqueamos todos los movimientos para darle al jugador humano la oportunidad de ganar. ¿Puedes encontrar qué movimientos no están bloqueados? Después de bloquear el movimiento, jugamos una esquina restante o un movimiento aleatorio. Puede estudiar el código e implementar su propio algoritmo inmejorable fácilmente. Como siempre, puede encontrar el código del proyecto adjunto en este tutorial.

NOTA:Dado que Banggood ofrece la misma pantalla con dos controladores de pantalla diferentes, si el código anterior no funciona, cambie la función initDisplay a lo siguiente:

  void initDisplay () {tft.reset (); tft.begin (0x9341); tft.setRotation (3);}  
graphics.c TicTacToeEasy.ino

Paso 6:Reflexiones finales y mejoras

Como puede ver, incluso con un Arduino Uno, podemos construir un algoritmo inmejorable para juegos simples. Este proyecto es genial, porque es fácil de construir y, al mismo tiempo, es una gran introducción a la inteligencia artificial y la programación de juegos. Intentaré construir algunos proyectos más avanzados con inteligencia artificial en el futuro usando la Raspberry Pi más poderosa, ¡así que estad atentos! Me encantaría escuchar tu opinión sobre este proyecto.

Publique sus comentarios a continuación y no olvide dar me gusta al tutorial si lo encuentra interesante. ¡Gracias!

Código

  • Fragmento de código n. ° 1
  • Fragmento de código n. ° 2
Fragmento de código n. ° 1 Texto sin formato
 

int firstMoves [] ={0,2,6,8}; // usará estas posiciones primero

para (contador =0; contador <4; contador ++) // Contar los primeros movimientos jugados {if (tablero [firstMoves [contador]]! =0) // Primer movimiento es jugado por alguien {movePlayed ++; }} hacer {si (se mueve <=2) {int randomMove =random (4); int c =firstMoves [randomMove]; if (tablero [c] ==0) {retraso (1000); tablero [c] =2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b =1; }}

Fragmento de código n. ° 2 Texto sin formato
 

int checkOpponent ()
{if (tablero [0] ==1 &&tablero [1] ==1 &&tablero [2] ==0) return 2; else if (tablero [0] ==1 &&tablero [1] ==0 &&tablero [2] ==1) return 1; más si (tablero [1] ==1 &&tablero [2] ==1 &&tablero [0] ==0) return 0; más si (tablero [3] ==1 &&tablero [4] ==1 &&tablero [5] ==0) return 5; más si (tablero [4] ==1 &&tablero [5] ==1 &&tablero [3] ==0) return 3; si no (tablero [3] ==1 &&tablero [4] ==0 &&tablero [5] ==1) return 4; más si (tablero [1] ==0 &&tablero [4] ==1 &&tablero [7] ==1) return 1; si no, devuelve 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

Proceso de manufactura

  1. Ajedrez
  2. Juego de giroscopio Arduino con MPU-6050
  3. Juego Arduino Pong - Pantalla OLED
  4. Piano táctil capacitivo portátil
  5. Controlador de juego Arduino
  6. Juego Arduino Pong en Matrix 24x16 con MAX7219
  7. Arduino Touch Breakout Game
  8. Animatronics gigantes Lego Minfig Operation Game
  9. Pixel Chaser Game
  10. Juego automatizado de Dino usando arduino
  11. Luz controlada por toque usando Arduino