Arduino Touch Breakout Game
Composants et fournitures
| × | 1 | ||||
| × | 1 |
Applications et services en ligne
|
À propos de ce projet
Il s'agit d'une petite version du jeu vidéo classique pour Arduino UNO et écran LCD TFT (240x320 pixels), pilote ILI9341 avec communication parallèle 8 bits.
Le jeu
Ce Breakout dispose de plusieurs écrans avec différentes rangées et colonnes de briques configurables, jusqu'à huit rangées, avec chacune deux rangées d'une couleur différente, qui peuvent être activées ou désactivées avec différents motifs. À l'aide d'une seule balle, à l'aide de l'écran tactile, le joueur doit abattre autant de briques que possible en utilisant les murs et/ou la pagaie en dessous pour faire ricocher la balle contre les briques et les éliminer. Si la raquette du joueur manque le rebond de la balle, il perdra un tour.
Chaque rangée de briques rapporte des points différents chacune.
uint8_t pointsForRow[] ={7, 7, 5, 5, 3, 3 , 1, 1} ;
Chaque niveau peut configurer la taille de la raquette et la taille de la balle. La vitesse de la balle augmente à chaque coup, vous pouvez configurer la vitesse initiale pour chaque écran. Selon le point de la raquette qui frappe la balle, la vitesse horizontale change également
Vous pouvez définir de nouveaux écrans avec différents motifs muraux :
Comment jouer
Tenez l'appareil avec vos mains et utilisez vos pouces et vos doigts sur l'écran pour déplacer la palette vers la gauche ou vers la droite.
Définir un nouvel écran
Cette structure permet de définir un nouvel écran :
typedef struct game_type {
int ballsize;
int playerwidth;
int playerheight;
int exposant;
int top;
int lignes ;
int colonnes ;
int brickGap ;
int vies ;
int mur[GAMES_NUMBER] ;
int initVelx;
int initVely ;
} game_type;
et ajoutez le nouvel écran à l'ensemble :
game_type games[GAMES_NUMBER] =
// taille de la balle, largeur du joueur, hauteur du joueur, exposant, haut, rangées, colonnes, brickGap, vies, mur[8], initVelx, initVely
{
{ 10, 60, 8, 6, 40 , 8, 8, 3, 3, {0x18, 0x66, 0xFF, 0xDB, 0xFF, 0x7E, 0x24, 0x3C} , 28, -28},
Motif mural
Le motif de mur est défini comme un tableau de 8x8 bits
ej.
{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}
qui correspond à ce tableau de bits
1,0,1,0,1,0,1,0
1,0,1,0,1,0,1,0
1,0,1, 0,1,0,1,0
1,0,1,0,1,0,1,0
1,0,1,0,1,0,1,0
1,0,1,0,1,0,1,0
1,0,1,0,1,0,1,0
1,0,1,0,1,0 ,1,0
Produira ce mur, notez qu'il est en miroir :
Matériel
Ce projet utilise un écran LCD TFT 2,4 pouces AZ-Delivery avec un écran tactile résistif à 4 fils et un lecteur de carte SD intégré. Écran LCD TFT 2,4 pouces AZ-Delivery.
Plus d'informations sur ce bouclier dans mon article "Tests routiers d'un écran tactile LCD AZ-Delivery 2, 4 TFT"
Assemblage du bouclier
Il vous suffit de brancher le blindage sur l'Aduino.
Bibliothèques
#include // Bibliothèque graphique principale
#include
#include
Calibrage de l'écran tactile
Vous devez calibrer l'écran pour que les informations de position soient correctes lorsque vous touchez l'écran. La bibliothèque MCUFriend_kbv fournit un exemple avec le nom "TouchScreen_Calibr_native". L'exemple envoie les résultats au port série. Démarrez le moniteur série de l'IDE Arduino afin de pouvoir copier le code généré par l'exemple.
Suivez les instructions sur l'écran tactile, appuyez et maintenez les marqueurs de position affichés, qui sont surlignés en blanc. Une fois que vous avez fait tous les repères de position, le calibrage de l'écran vous est envoyé sur l'écran tactile et par le port série.
Pour ce projet, vous avez besoin des données pour le "calibrage du portrait".
Étalonnage GFX TouchScreen.h
Faire toutes les broches de contrôle et de bus INPUT_PULLUP
Le pullup analogique 30k typique avec la broche correspondante
serait faible lorsque numérique est écrit LOW
par ex. lit ~25 pour la direction 300R X
par ex. lit ~30 pour la direction Y 500R
Test :(A2, D8) =26
Test :(A3, D9) =28
ID =0x9341
cx=153 cy=103 cz=534 X, Y, Pression
cx=150 cy=475 cz=406 X, Y, Pression
cx=155 cy=868 cz=231 X, Y, Pression
cx=517 cy=103 cz=561 X, Y, Pression
cx=535 cy=855 cz=364 X, Y, Pression
cx=884 cy=88 cz=650 X, Y, Pression
cx=908 cy=478 cz=557 X, Y, pression
cx=902 cy=864 cz=488 X, Y, pression
*** COPIER-COLLER à partir du terminal série :
const entier XP=8,XM=A2,YP=A3,YM=9 ; //240x320 ID=0x9341
const int TS_LEFT=118,TS_RT=931,TS_TOP=72,TS_BOT=887;
CALIBRATION PORTRAIT 240 x 320
x =map(px, LEFT=118 , RT=931, 0, 240)
y =map(py, TOP=72, BOT=887, 0, 320)
CALIBRAGE DU PAYSAGE 320 x 240
x =map(py, LEFT=72, RT=887, 0, 320)
y =map(px, TOP=931, BOT=118, 0, 240)
Animation
Pour déplacer l'image sur l'écran au fil du temps, utilisez une vitesse statique et appliquez-la à la position d'une image à chaque pas de temps.
pos +=vel * dt;
Éviter l'arithmétique à virgule flottante
La résolution ILI9341 est de 240 x 320, nous avons donc besoin de deux entiers de 9 bits pour référencer un pixel à l'écran. En utilisant des entiers de 16 bits, cela laisse 6 bits libres pour représenter une partie décimale.
nnnn nnnn nndd jjjj
Nous appelons ce nombre, 6, l'exposant binaire. Et nous pouvons utiliser ces six bits pour avoir une partie décimale allant de 0,000 à 0,63. Nous pouvons donc utiliser des mathématiques entières en évitant l'arithmétique à virgule flottante.
Pour obtenir la partie entière du nombre, nous effectuons un décalage arithmétique à droite.
nombre>> exposant
state.ballx +=state.velx;
state.bally +=state.vely;
// vérifier les collisions de balles et quitter
checkBallCollisions(jeu , &state, state.ballx>> game->exponent, state.bally>> game->exponent);
checkBallExit(game, &state, state.ballx>> game->exposant, state.bally>> game ->exposant);
Mode démo
Décommentez la directive Define et la raquette suivra la balle comme on le voit dans les vidéos de démonstration :
#define DEMO_MODE
Profitez-en !
Créez de nouveaux modèles et niveaux et partagez-les !
Code
- Déploiement Arduino
Déploiement ArduinoArduino
Schémas
Processus de fabrication
- Jeu de gyroscope Arduino avec MPU-6050
- Jeu Arduino Pong - Écran OLED
- Piano tactile capacitif portable
- Contrôleur de jeu Arduino
- Jeu Arduino Pong sur matrice 24x16 avec MAX7219
- Giant Animatronics Lego Minfig Operation Game
- Adaptateurs MIDI sans fil USB-BLE
- Jeu Pixel Chaser
- Reconnaissance et synthèse vocales avec Arduino