From 8fbecdca8d2d0309c2e95d15b75e17a7ebd9cbfd Mon Sep 17 00:00:00 2001 From: "leo.tuaillon" Date: Mon, 15 May 2023 20:56:39 +0200 Subject: [PATCH] ajout du timer + bouton pour start --- tpnot_/tpnot_.ino | 52 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/tpnot_/tpnot_.ino b/tpnot_/tpnot_.ino index c47b6ef..5fe7169 100644 --- a/tpnot_/tpnot_.ino +++ b/tpnot_/tpnot_.ino @@ -24,9 +24,11 @@ LIS3DHTR lis; #define TFT_ORANGE 0xFDA0 /* 255, 180, 0 */ #define TFT_GREENYELLOW 0xB7E0 /* 180, 255, 0 */ -#define SPEEDGAME 100 +#define SPEEDGAME 5 // Paramètres du jeu : - +bool isGameRunning = false; +unsigned long lastTimeDecrement = 0; // Stocke le moment où la dernière seconde a été décrémentée +unsigned long timeInterval = 1000; // Interval de temps en millisecondes (1000 ms = 1 seconde) int score = 0; // Initialisation du score int timeLeft = 30; // Initialisation du timer String oldLevel = ""; // Niveau précédent @@ -43,25 +45,28 @@ int oldBallY = ballY; // stocker les anciennes coordonnées de la balle float accX, accY; void setup() { + Serial.begin(115200); + pinMode(WIO_KEY_A, INPUT_PULLUP); + pinMode(WIO_KEY_B, INPUT_PULLUP); + pinMode(WIO_KEY_C, INPUT_PULLUP); + + + + pinMode(2, INPUT); // définir la pin du bouton du milieu comme entrée tft.begin(); // Démarage de l'écran tft.setRotation(3); // Oriente l'écran dans le bon sens - // dessine la bannière bleu tft.fillRoundRect(0, 0, 320, 40, 0, TFT_BLUE); tft.fillRoundRect(0, 40, 320, 200, 0, TFT_DARKGREY); - //set la couleur du text tft.setTextColor(TFT_WHITE, TFT_BLUE); tft.setTextSize(2); - // Affichage du niveau, score et timer tft.drawString(level, 10, 10); tft.drawString(String(score)+" pts", 160, 10); tft.drawString(String(timeLeft), 290, 10); - //dessine la boule rouge : tft.fillCircle(ballX, ballY, ballRadius, TFT_RED); - // lis.begin(Wire1); if (!lis) { @@ -86,15 +91,27 @@ void updateBanner() { } } +void loop() { + int buttonState = digitalRead(WIO_KEY_B); + if(buttonState == LOW){ + isGameRunning = true; + lastTimeDecrement = millis(); + } -void loop() { + if(buttonState == LOW){ + isGameRunning = true; + lastTimeDecrement = millis(); + } + //Si le jeu n'est pas en cours, ne fait rien d'autre + if(!isGameRunning){ + return; + } delay(10); // Lire les données de l'accéléromètre accX = -lis.getAccelerationY(); accY = lis.getAccelerationX(); - // Nettoyer l'ancienne position de la balle tft.fillCircle(oldBallX, oldBallY, ballRadius, TFT_DARKGREY); @@ -107,16 +124,21 @@ void loop() { if (ballX > 320 - ballRadius) ballX = 320 - ballRadius; if (ballY < 40 + ballRadius) ballY = 40 + ballRadius; if (ballY > 240 - ballRadius) ballY = 240 - ballRadius; - - // Actualisation de l'affichage toutes les secondes - - + // Gestion du chronomètre + if (millis() - lastTimeDecrement >= timeInterval) { + // Une seconde s'est écoulée, décrémentez le timer et mettez à jour le moment du dernier décrément + timeLeft--; + lastTimeDecrement = millis(); + } + // Si le temps est écoulé, arrêtez le jeu + if (timeLeft <= 0) { + isGameRunning = false; + } // Mettre à jour le bandeau si nécessaire updateBanner(); - // Dessiner la nouvelle position de la balle tft.fillCircle(ballX, ballY, ballRadius, TFT_RED); - + // Mettre à jour les anciennes coordonnées de la balle oldBallX = ballX; oldBallY = ballY;