#include "TFT_eSPI.h" #include "LIS3DHTR.h" #include TFT_eSPI tft; LIS3DHTR lis; // est ce qu'on met des unsigned in au i des fonctions ???? //pk on fait plusieurs fois la copie de tableau ?? Pas opti // Pk on met notre tab de noires dans tab actuel de noires alors qu'on en a qu'un ??? // mettre une seule variable de nb de pieces et pieces noires ??? car sinons pose pb apres ! ou separer les if de collisions //fait clignoter les pièces rapidement a verifier !! // Déclaration des trois tableau de pieces, du tableau de boules noires et des deux tableau que nous utiliseronsdans le programme unsigned int tabPiecesNov[5][2]={{170, 170}, {160, 105}, {100, 205}, {145, 120}, {130, 220}}, // tableau des pieces du mode novice tabPiecesCon[5][2]={{4, 100}, {2, 46}, {100, 80}, {45, 120}, {250, 120}}, // tableau des pieces du mode confirmé tabPiecesExp[5][2]={{4, 138}, {2, 54}, {100, 69}, {45, 120}, {250, 120}}, //tableau des pieces du mode expert tabPiecesNoires[5][2]={{60, 138}, {50, 54}, {100, 90}, {45,200}, {250, 20}}, //tableau des pieces noires du mode expert tabActuel[5][2], // tableau du mode actuel tabActuelNoir[5][2]; //tableau de pieces noires du mode actuel const unsigned int nbPiecesTab = 5, nbPiecesNoiresTab = 5; const unsigned int xMax = 307, yMax = 229; // valeurs maximales de l'écran unsigned int xBoule=xMax/2, yBoule=yMax/2; // position x et y de départ de la boule const unsigned int rayonBoule = 7, rayonPiece = 5, rayonPieceNoire = 5; // rayon de la boule, des pieces et des pieces noires const unsigned int vitesseBoule = 8; // vitesse de déplacement de la boule unsigned int mode = 2; // declaration de la variable permettant de gerer le mode de jeu (novice, confirme et expert) unsigned int chrono = 30000, score = 0; // declaration de la variable de temps de jeu (chrono) et du score initialise a 0 unsigned int tempsBipper = 0; // variable du temps de buzzer des pieces bool start = false, bonus=true; // declaration des booleen de depart du jeu et du bouton bonus de temps void setup() { tft.begin(); tft.setRotation(3); // (0,0) à l'oppossé du joyssitck Serial.begin(115200); // Mise en place des éléments sur l'écran : tft.fillScreen(TFT_DARKGREY); // fond gris foncé tft.fillCircle(xBoule, yBoule, rayonBoule, TFT_RED); // Dessin de la boule en rouge tft.fillRect(0,0,320,40,TFT_BLUE); // Rectangle du bandeau de scores en bleu // Paramétrage du giroscope : lis.begin(Wire1); lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); // Setting output data rage to 25Hz, can be set up tp 5kHz lis.setFullScaleRange(LIS3DHTR_RANGE_2G); // Setting scale range to 2g, select from 2,4,8,16g tft.setTextColor(TFT_BLACK); // couleur du text en noir tft.setTextSize(2); // definission de la taille du text en 2 tft.drawString("Bienvenue dans notre jeu", 15, 10); // affichage du mot de bienvenue dans le jeu delay(20); // delay permettant d'afficher le mot de bienvenue tft.fillRect(0,0,320,40,TFT_BLUE); // Rectangle du bandeau permettant d'effacer le mot de bienvenue tft.drawString("A votre tour :", 80, 10); // message de préparation au jeu delay(20);// delay permettant d'afficher le mot de preparation tft.fillRect(0,0,320,40,TFT_BLUE); // Rectangle du bandeau permettant d'effacer le mot de preparation // Déclaration des capteurs : pinMode(WIO_KEY_A, INPUT_PULLUP); // Déclaration du bouton A en INPUT pinMode(WIO_KEY_B, INPUT_PULLUP); // Déclaration du bouton B en INPUT pinMode(WIO_KEY_C, INPUT_PULLUP); // Déclaration du bouton C en INPUT pinMode(WIO_BUZZER, OUTPUT); // Déclaration du buzzer en OUTPUT } // fonction du son de depart de jeu void depart() { analogWrite(WIO_BUZZER, 128); // buzzer actif delay(1000); // delay d'une seconde analogWrite(WIO_BUZZER, 0); // buzzer eteint } // fonction d'affichage des pieces void afficherPiece(unsigned int tab[5][2]) { for(int i=0; iyMax || yBoule<(rayonBoule+43) || xBoule>xMax || xBoule<(rayonBoule+2)) { // si la boule sort du cadre de l'ecran alors : start = false; // on arrete le jeu tft.fillCircle(xBoule, yBoule, rayonBoule, TFT_DARKGREY); // On efface la boule rouge score = 0; // on definie le score a 0 tft.fillRect(150, 10, 60, 25, TFT_BLUE); // on actualise le score a l'ecran tft.drawString(String(score)+"pts", 150, 10); // on actualise le score a l'ecran return; // sort de la fonction } tft.fillCircle(xBoule, yBoule, rayonBoule, TFT_DARKGREY); // sinon on efface la boule pour actualiser ses coordonnées yBoule = yBoule + (x_values * vitesseBoule); xBoule = xBoule - (y_values * vitesseBoule); tft.fillCircle(xBoule, yBoule, rayonBoule, TFT_RED); // on la reaffiche aux nouvelles coordonnées } // Fonction de decrementaion du compteur de jeu bool chronoCalcule() { if(chrono < 1) { // Si le chrono est nulle alors : start = false; // arreter le jeu return false; // retourner faux } chrono = chrono -10; if(chrono/1000 < (chrono+10)/1000) // sinon si le chrono à changer : { tft.fillRect(250,10,30,20,TFT_BLUE); // on actualise a l'ecran son temps tft.drawNumber(chrono/1000, 250, 10); // on actualise a l'ecran son temps } return true; // on retourne vraie } // fonction de copie du tableau void copie_tableau(unsigned int tab[5][2]) { for(int i=0; i