Table des matières:

Flappy Bird sur ATtiny85 et écran OLED SSD1306 : 6 étapes (avec photos)
Flappy Bird sur ATtiny85 et écran OLED SSD1306 : 6 étapes (avec photos)

Vidéo: Flappy Bird sur ATtiny85 et écran OLED SSD1306 : 6 étapes (avec photos)

Vidéo: Flappy Bird sur ATtiny85 et écran OLED SSD1306 : 6 étapes (avec photos)
Vidéo: Jeu "Pong" avec STM32 Blue Pill 2024, Novembre
Anonim
Image
Image
Le matériel
Le matériel

Salut tout le monde, Aujourd'hui, je vais vous montrer un clone d'oiseau flappy de base que j'ai créé, et comment vous pouvez faire un jeu similaire. Je vais essentiellement parcourir mon code avec vous et expliquer comment cela fonctionne à chaque étape du processus. Ce jeu est conçu pour fonctionner sur un ATtiny85 cadencé à 1MHz, avec un écran I2C OLED. En avant!

Étape 1: le matériel

Si vous n'êtes pas intéressé par la construction d'un circuit pour le jeu mais par la compréhension de la théorie qui le sous-tend, vous pouvez ignorer cette étape.

Mon jeu nécessite deux boutons, un ATtiny85, un écran I2C OLED 128x64px et une source d'alimentation. Ma carte de visite/console de jeu Instructable: ATtiny85 et écran OLED vous montre comment construire une carte qui contient tout ce dont vous avez besoin ! Si vous n'êtes pas intéressé par la fabrication de ma planche, sortez votre planche à pain et je vous dirai les spécifications. Vous pouvez utiliser n'importe quelle variante de l'ATtiny85. Je recommande les écrans OLED comme celui-ci.

  1. Câblez un côté de deux boutons-poussoirs aux broches 2 et 3 de votre ATtiny85. Sur ces fils, ajoutez également une résistance de 10k ohms connectée à la terre (résistance pull-down).
  2. Câblez l'autre côté de ces boutons-poussoirs à la tension. Lorsque le bouton n'est pas enfoncé, l'état de la broche sera faible. Lorsqu'il est enfoncé, l'état de la broche sera élevé.
  3. Connectez la broche 7 à la broche SCL de votre écran et la broche 5 à la broche SDA de votre écran. Câblez les broches d'alimentation (VCC et GND) sur l'écran en conséquence.
  4. Enfin, connectez la broche 4 de l'ATtiny à la masse et la broche 8 à la tension.

Étape 2: Le logiciel

Les logiciels!
Les logiciels!

Ci-joint un dossier avec tous les fichiers dont vous avez besoin pour exécuter le jeu. Deux des fichiers, FlappyBird.ino et WallFunctions.h, sont très bien commentés pour votre plaisir de lecture. Vous pouvez télécharger le sketch FlappyBird.ino sur votre ATtiny85 (à 1MHz) et jouer ! Si apprendre la théorie derrière ce jeu vous intéresse, ou si vous voulez créer votre propre jeu, alors lisez la suite !

Il y a encore quelques problèmes avec mon jeu. I2C n'est en aucun cas le meilleur moyen de transmettre des données. Selon cet article, l'affichage ne peut accepter des données qu'à environ 100 KHz, donc même si nous augmentons la vitesse d'horloge ATtiny à 8 MHz, le canal I2C sera toujours le goulot d'étranglement. L'affichage peut produire environ 10 images par seconde maximum. Plus l'écran doit dessiner d'images séparées, plus l'ensemble du processus est lent. Ainsi, mon jeu est assez facile car vous ne pouvez pas faire bouger les murs très rapidement à travers l'écran ! Vous trouverez ci-dessous quelques défis si vous pensez être à la hauteur de la tâche:

  • Pour rendre le jeu plus difficile, voyez si vous pouvez obtenir un espacement entre les murs de 2 au lieu de 4. Cela ne devrait pas être trop difficile une fois que vous aurez compris comment fonctionne mon programme:). S'il vous plaît poster dans les commentaires si vous pouvez le faire fonctionner!
  • Une autre chose qui manque à mon jeu est un système de score et un moyen d'afficher le score et de le sauvegarder. Voyez si vous pouvez en mettre un en place !
  • Enfin, plutôt que de faire bouger les murs une colonne à la fois, essayez de faire bouger chaque mur d'un pixel à la fois pour un mouvement plus fluide.

Étape 3: Flappy Bird ATtiny85: Théorie

Flappy Bird ATtiny85: Théorie
Flappy Bird ATtiny85: Théorie

Même si l'affichage que nous utilisons a 64 pixels de hauteur à utiliser pour le jeu, il n'est possible de positionner les éléments que par blocs de 8 pixels. Ainsi, il n'y a que 8 coordonnées y possibles. Pour faciliter les choses, dans le logiciel, j'ai divisé tout l'écran de cette manière, en créant une grille de 16 blocs par 8 blocs, chaque bloc faisant 8x8 pixels. Pour remplir chaque bloc, chaque sprite du jeu mesure 8x8 pixels. Cela rend tout BEAUCOUP plus facile à gérer. Si vous regardez l'image ci-dessus, vous pouvez voir comment j'ai divisé l'écran. Chaque mur est composé de 6 blocs, avec un trou de 2 blocs de hauteur, faisant la hauteur totale de chaque mur de 8 blocs.

Dans le programme, chaque mur est représenté comme une structure, appelée Wall. Chaque structure Wall a deux propriétés -holePosition et column. 'holePosition' est un nombre de 0 à 6, car il n'y a que 7 positions possibles dans un mur de 8 blocs pour un trou de 2 blocs de haut. 'colonne' est un nombre de 0 à 15, car il y a 16 colonnes de blocs possibles sur l'écran.

Conseillé: