|
|
|
@ -24,9 +24,11 @@ LIS3DHTR<TwoWire> 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;
|
|
|
|
|