Table des matières:

Jeu Arduino Space Rocks : 3 étapes
Jeu Arduino Space Rocks : 3 étapes

Vidéo: Jeu Arduino Space Rocks : 3 étapes

Vidéo: Jeu Arduino Space Rocks : 3 étapes
Vidéo: Apollo 11 Space Flight Agency Game 2024, Novembre
Anonim
Arduino Space Rocks Jeu
Arduino Space Rocks Jeu

Qu'ils soient joués sur un ordinateur, sur un téléphone, sur une console de jeux ou sur une boîte autonome, de nombreux jeux vidéo incluent un élément d'évitement d'obstacles. Bien sûr, des points peuvent être attribués pour la collecte de jetons ou la recherche de votre chemin dans un labyrinthe, mais soyez assuré qu'il y a probablement quelque chose dans le jeu dont le seul but est de vous empêcher de le faire. Le premier jeu vidéo était Pong, mais après cela, les jeux les plus populaires étaient des choses comme "Asteroids" ou "Pac-Man". Une variante plus récente serait le jeu simple mais addictif de « Flappy Birds ».

Récemment, j'ai vu que quelqu'un avait créé une version simple à deux niveaux de "Flappy Bird" qui était jouée sur un écran LCD 1602. J'ai pensé que ce serait quelque chose que les petits-enfants pourraient aimer, alors j'ai décidé de faire ma propre variation à partir de zéro. La version 1602 n'a que deux niveaux, j'ai donc décidé d'utiliser un écran LCD 2004 (20x4) à la place pour augmenter légèrement la difficulté de jeu. J'ai également choisi de le faire ressembler davantage à "Astéroïdes" en demandant au joueur de guider un "vaisseau" à travers un labyrinthe de "roches spatiales". Même si vous n'êtes pas intéressé par la création du jeu, il peut y avoir certains éléments du logiciel que vous pouvez utiliser dans l'un de vos propres projets.

Étape 1: Matériel

Matériel
Matériel
Matériel
Matériel
Matériel
Matériel

Le matériel peut être basé sur à peu près n'importe quelle version Arduino. J'ai fait le prototypage à l'aide d'un Nano, puis j'ai gravé le code dans une puce ATMega328. C'est la même puce utilisée dans le Nano, mais son utilisation seule permet une construction plus compacte et une consommation d'énergie moindre. Comme vous pouvez le voir, j'ai construit le circuit sur une petite planche à pain qui se superpose au module LCD. L'autre aspect différent est que le Nano fonctionne à 16 MHz en utilisant un cristal externe, mais j'ai choisi d'utiliser l'oscillateur intégré à 8 MHz pour la puce ATMega328. Cela permet d'économiser des pièces et de l'énergie.

L'écran LCD 2004 s'interface avec l'Arduino de la même manière qu'un écran LCD 1602. Une différence intéressante réside dans l'adressage des emplacements d'affichage. Évidemment, il y a une différence car il y a quatre lignes au lieu de deux mais, dans le 2004, la troisième ligne est une extension de la première ligne et la quatrième ligne est une extension de la deuxième ligne. En d'autres termes, si vous aviez un programme de test qui venait d'envoyer une chaîne de caractères à l'écran LCD, le 21e caractère apparaîtrait au début de la troisième ligne et le 41e caractère reviendrait au début de la première ligne. J'utilise cette caractéristique dans le logiciel pour doubler efficacement la longueur du labyrinthe.

J'ai décidé de faire fonctionner ma version sur batterie, j'ai donc utilisé une batterie Li-ion 18650 commune de 3,6 volts. Cela a nécessité que j'ajoute une petite carte pour permettre la recharge USB et une autre petite carte pour augmenter la tension de la batterie à 5 volts pour l'écran LCD et la puce ATMega. Les images montrent les modules que j'ai utilisés mais il existe également des modules tout-en-un qui remplissent les deux fonctions.

Étape 2: Logiciel

Le logiciel est le même pour la puce Nano et la puce ATMega328. La seule différence réside dans la méthode de programmation. J'utilise ma propre version barebone du logiciel LCD 1602 et le logiciel LCD de ce projet est basé sur cela. J'ai eu besoin d'ajouter des capacités pour traiter les lignes supplémentaires de l'affichage 2004 et également des routines ajoutées pour déplacer l'affichage. Le décalage d'affichage fournit l'effet de mouvement des « rochers » au-delà du « navire ».

Comme mentionné précédemment, les lignes 1 et 3 forment une file d'attente circulaire et les lignes 2 et 4 le font également. Cela signifie qu'après 20 équipes, les lignes 1 et 3 sont permutées et les lignes 2 et 4 sont permutées. Après 40 quarts de travail, les lignes sont de retour dans leurs positions d'origine. En raison de ce comportement, le labyrinthe d'origine de 20 caractères devient complètement différent lorsque les lignes permutent. Cela a rendu la vie intéressante lorsque j'ai essayé de former un labyrinthe. Je viens enfin d'ouvrir une feuille de calcul Excel pour pouvoir tracer le chemin sans avoir à changer constamment de logiciel. Le logiciel fourni ici a deux versions du labyrinthe (une est commentée) afin que vous puissiez choisir celle que vous voulez ou créer la vôtre.

Je voulais à l'origine que ce soit assez simple pour que les jeunes petits-enfants puissent y jouer, mais je voulais aussi qu'il y ait un défi supplémentaire s'ils (ou quelqu'un d'autre) devenaient trop bons. Le jeu commence avec le taux de décalage fixé à 1 seconde. Le taux de tic interne est de 50 ms, ce qui signifie qu'il y a 20 intervalles pendant lesquels les boutons haut/bas peuvent être enfoncés. En réalité, un bouton enfoncé consomme 2 tics car un intervalle de 50ms est utilisé pour détecter la pression et un autre intervalle de 50ms est utilisé pour attendre le relâchement. Avec le labyrinthe par défaut, le nombre maximum de pressions requises avant le prochain quart de travail est de trois. Le moyen simple d'augmenter la difficulté du jeu est de raccourcir le temps entre les quarts de travail afin que quelques lignes de code fassent exactement cela à mesure que le score augmente. Le taux de décalage est réglé pour accélérer de 50 ms toutes les 20 équipes, le taux minimum étant limité à 500 ms. Il est facile de modifier ces paramètres.

Outre la modification du taux de décalage, la logique principale du logiciel consiste à déplacer le « navire » et à déterminer si le « navire » est entré en collision avec un « rocher ». Ces fonctions tirent parti du tableau "rock/space" défini ainsi que du tableau qui définit les emplacements de mémoire dans l'affichage. Le compte de décalage correspond à la longueur de ligne de l'écran LCD (0-19) et est utilisé comme index dans ces tableaux. La logique est quelque peu compliquée par le fait que les lignes permutent tous les 20 quarts de travail. Une logique similaire est utilisée pour déterminer la position du "navire" qui peut être sur l'une des quatre lignes.

Le score pour chaque jeu est simplement le nombre de décalages qui se sont produits et le score le plus élevé est enregistré dans l'EEROM interne du microcontrôleur. La bibliothèque EEPROM est utilisée pour effectuer les lectures et écritures dans cette mémoire. Les routines disponibles permettent des lectures/écritures sur un seul octet et des lectures/écritures de valeurs à virgule flottante. Une valeur de 0xA5 est stockée dans le premier emplacement EEROM pour indiquer qu'un score élevé a été enregistré. Si cette valeur est présente à la mise sous tension, la valeur à virgule flottante pour le score élevé est lue et affichée. Si la valeur 0xA5 n'est pas présente, alors une routine est appelée pour initialiser le score élevé à une valeur de 1. Cette même routine est appelée si une réinitialisation du score élevé est souhaitée. Le score élevé est ramené à une valeur de 1 en maintenant enfoncé l'un des boutons haut/bas, puis en appuyant momentanément sur le bouton de réinitialisation.

Étape 3: Jouer au jeu

Jouer le jeu
Jouer le jeu
Jouer le jeu
Jouer le jeu

Lorsque l'alimentation est appliquée, le score actuel élevé est affiché. Après l'affichage du meilleur score, le labyrinthe de « rochers » et le « navire » s'affichent puis le jeu commence quelques secondes plus tard. Lorsque le « vaisseau » heurte un « rocher », le message « CRASH AND BURN » clignote plusieurs fois avant d'afficher le score de la partie. Si un nouveau score élevé est obtenu, ce message s'affiche également. Un nouveau jeu est lancé en appuyant sur le bouton de réinitialisation.

Conseillé: