Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Jeu Arduino Touch Tic-Tac-Toe

Composants et fournitures

Arduino UNO
× 1
Écran tactile 2,8"
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Chers amis, bienvenue dans un autre tutoriel Arduino ! Dans ce tutoriel détaillé, nous allons créer un jeu Arduino Tic-Tac-Toe. Comme vous pouvez le voir, nous utilisons un écran tactile et nous jouons contre l'ordinateur. Un jeu simple comme Tic-Tac-Toe est une excellente introduction à la programmation de jeux et à l'intelligence artificielle. Même si nous n'utiliserons aucun algorithme d'intelligence artificielle dans ce jeu, nous comprendrons pourquoi les algorithmes d'intelligence artificielle sont nécessaires dans des jeux plus complexes.

Développer des jeux pour Arduino n'est pas facile et demande beaucoup de temps. Mais nous pouvons créer des jeux simples pour Arduino car c'est amusant et cela nous permettra d'explorer des sujets de programmation plus avancés, comme l'intelligence artificielle. C'est une excellente expérience d'apprentissage et à la fin, vous aurez un bon jeu pour les enfants !

Construisons maintenant ce projet.

Étape 1 :Obtenez toutes les pièces

Les pièces nécessaires pour construire ce projet sont les suivantes :

  • Un Arduino Uno
  • Un écran tactile de 2,8 pouces

Le coût du projet est très faible. C'est seulement 15 $.

Avant d'essayer de construire ce projet, veuillez regarder la vidéo que j'ai préparée sur l'écran tactile en cliquant sur la carte ici. Cela vous aidera à comprendre le code et à calibrer l'écran tactile.

Étape 2 : l'écran couleur tactile de 2,8 pouces pour Arduino

J'ai découvert cet écran tactile sur banggood.com et j'ai décidé de l'acheter pour essayer de l'utiliser dans certains de mes projets. Comme vous pouvez le voir, l'affichage est peu coûteux, il coûte environ 11 $.

Obtenez-le ici.

L'écran offre une résolution de 320x240 pixels et il se présente sous la forme d'un blindage qui rend la connexion avec Arduino extrêmement facile. Comme vous pouvez le voir, l'écran utilise presque toutes les broches numériques et analogiques de l'Arduino Uno. Lors de l'utilisation de ce blindage, il ne nous reste que 2 broches numériques et 1 broche analogique pour nos projets. Heureusement, l'affichage fonctionne également bien avec l'Arduino Mega, donc lorsque nous avons besoin de plus de broches, nous pouvons utiliser l'Arduino Mega au lieu de l'Arduino Uno. Malheureusement, cet affichage ne fonctionne pas avec la carte Arduino Due ou la carte Wemos D1 ESP8266. Autre avantage du shield, il propose un slot micro SD très simple d'utilisation.

Étape 3 : Créer le projet et le tester

Après avoir connecté l'écran à l'Arduino Uno, nous pouvons charger le code et nous sommes prêts à jouer.

Au début, nous appuyons sur le bouton « Démarrer le jeu » et le jeu démarre. L'Arduino joue en premier. Nous pouvons alors jouer notre coup simplement en touchant l'écran. L'Arduino joue alors son coup et ainsi de suite. Le joueur qui réussit à placer trois de ses marques sur une ligne horizontale, verticale ou diagonale gagne la partie. Lorsque le jeu est terminé, l'écran Game Over apparaît. Nous pouvons ensuite appuyer sur le bouton play again pour relancer le jeu.

L'Arduino est très bon à ce jeu. Il gagnera la plupart des matchs, ou si vous êtes un très bon joueur, le match se terminera par un match nul. J'ai intentionnellement conçu cet algorithme pour faire des erreurs afin de donner au joueur humain une chance de gagner. En ajoutant deux lignes supplémentaires au code du jeu, nous pouvons rendre l'Arduino impossible à perdre. Mais comment une puce à 2 $, le processeur Arduino, peut-elle battre le cerveau humain ? Le programme que nous avons développé est-il plus intelligent que le cerveau humain ?

Étape 4 :L'algorithme du jeu

Pour répondre à cette question, regardons l'algorithme que j'ai implémenté.

L'ordinateur joue toujours en premier. Cette décision à elle seule rend le jeu beaucoup plus facile à gagner pour l'Arduino. Le premier mouvement est toujours un virage. Le deuxième mouvement pour l'Arduino est également un coin aléatoire du reste sans se soucier du tout du mouvement du joueur. À partir de ce moment, l'Arduino vérifie d'abord si le joueur peut gagner au prochain coup et bloque ce mouvement. Si le joueur ne peut pas gagner en un seul coup, il joue un coup de coin s'il est disponible ou un coup aléatoire parmi les autres. C'est tout, cet algorithme simple peut battre le joueur humain à chaque fois ou dans le pire des cas, le jeu se soldera par un match nul. Ce n'est pas le meilleur algorithme de jeu de tic tac toe, mais l'un des plus simples.

Cet algorithme peut être facilement implémenté dans Arduino, car le jeu Tic-Tac-Toe est très simple, et nous pouvons facilement l'analyser et le résoudre. Si nous concevons l'arbre du jeu, nous pouvons découvrir des stratégies gagnantes et les implémenter facilement dans le code ou nous pouvons laisser le processeur calculer l'arbre du jeu en temps réel et choisir le meilleur coup par lui-même. Bien sûr, l'algorithme que nous utilisons dans ce jeu est très simple, car le jeu est très simple. Si nous essayons de concevoir un algorithme gagnant pour les échecs, même si nous utilisons l'ordinateur le plus rapide, nous ne pourrons pas calculer l'arbre du jeu en mille ans ! Pour des jeux comme celui-ci, nous avons besoin d'une autre approche, nous avons besoin d'algorithmes d'intelligence artificielle et bien sûr d'une puissance de traitement énorme. Plus d'informations à ce sujet dans une future vidéo.

Étape 5 :Code du projet

Examinons rapidement le code du projet. Nous avons besoin de trois bibliothèques pour que le code soit compilé.

  • TFTLCD Adafruit modifié
  • Adafruit GFX
  • Écran tactile

Comme vous pouvez le voir, même un jeu simple comme celui-ci, nécessite plus de 600 lignes de code. Le code est complexe, je n'essaierai donc pas de l'expliquer dans un court tutoriel. Je vais cependant vous montrer l'implémentation de l'algorithme pour les mouvements Arduino.

Au début, nous jouons deux coins aléatoires.

int firstMoves[]={0,2,6,8} ; // utilisera ces positions en premier pour(counter=0;counter<4;counter++) //Compter les premiers coups joués { if(board[firstMoves[counter]]!=0) // Le premier coup est joué par quelqu'un { movePlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove] ; if (board[c]==0) { delay(1000); planche[c]=2 ; Serial.print(firstMoves[randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b=1 ; } } 

Ensuite, à chaque tour, nous vérifions si le joueur peut gagner au prochain coup.

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; sinon renvoie 100 ;}

Si oui, nous bloquons ce mouvement, la plupart du temps. Nous ne bloquons pas tous les mouvements afin de donner au joueur humain une chance de gagner. Pouvez-vous trouver quels mouvements ne sont pas bloqués ? Après avoir bloqué le coup, on joue un corner restant, ou un coup aléatoire. Vous pouvez étudier le code et implémenter facilement votre propre algorithme imbattable. Comme toujours, vous pouvez trouver le code du projet en pièce jointe sur ce tutoriel.

REMARQUE :étant donné que Banggood propose le même écran avec deux pilotes d'affichage différents, si le code ci-dessus ne fonctionne pas, modifiez la fonction initDisplay comme suit :

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

Étape 6 :Réflexions finales et améliorations

Comme vous pouvez le voir, même avec un Arduino Uno, nous pouvons construire un algorithme imbattable pour des jeux simples. Ce projet est génial, car il est facile à construire et en même temps une excellente introduction à l'intelligence artificielle et à la programmation de jeux. J'essaierai de construire des projets plus avancés avec l'intelligence artificielle à l'avenir en utilisant le Raspberry Pi plus puissant, alors restez à l'écoute ! J'aimerais connaître votre opinion sur ce projet.

Veuillez poster vos commentaires ci-dessous et n'oubliez pas d'aimer le tutoriel si vous le trouvez intéressant. Merci !

Code

  • Extrait de code n° 1
  • Extrait de code 2
Extrait de code n°1Texte brut

int firstMoves[]={0,2,6,8} ; // utilisera ces positions en premier

for(counter=0;counter<4;counter++) //Compte les premiers coups joués { if(board[firstMoves[counter]]!=0) // Premier coup est joué par quelqu'un { movesPlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove] ; if (board[c]==0) { delay(1000); planche[c]=2 ; Serial.print(firstMoves[randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b=1 ; } }

Extrait de code #2Texte brut

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; sinon renvoie 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

Processus de fabrication

  1. Échecs
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Jeu Arduino Pong - Écran OLED
  4. Piano tactile capacitif portable
  5. Contrôleur de jeu Arduino
  6. Jeu Arduino Pong sur matrice 24x16 avec MAX7219
  7. Arduino Touch Breakout Game
  8. Giant Animatronics Lego Minfig Operation Game
  9. Jeu Pixel Chaser