diff --git a/gra_21_morpion_lumineux_code.ino b/gra_21_morpion_lumineux_code.ino index aba373e..fc63cde 100644 --- a/gra_21_morpion_lumineux_code.ino +++ b/gra_21_morpion_lumineux_code.ino @@ -10,13 +10,13 @@ #include // --- Capteur capacitif --- -// Attention : Une SEULE instance globale ! Adafruit_MPR121 cap = Adafruit_MPR121(); uint16_t lasttouched = 0; uint16_t currtouched = 0; void setup() { Serial.begin(115200); + randomSeed(analogRead(0)); if (!cap.begin(0x5B)) { Serial.println("MPR121 not found, check wiring?"); @@ -40,8 +40,12 @@ void loop() { loopWeb(); } } else { - // Passe cap, lasttouched, currtouched par référence ! - localMode(cap, lasttouched, currtouched); + if(solo) { + localModeSolo(cap, lasttouched, currtouched); + } + else { + localModeDuo(cap, lasttouched, currtouched); + } } } } diff --git a/localMode.h b/localMode.h index cd9c396..5907918 100644 --- a/localMode.h +++ b/localMode.h @@ -49,8 +49,10 @@ bool joueur1 = true; Coord getCo(int key); bool victoire(int grille[3][3], int joueur); bool allInit(); +void afficheGrille(); -void localMode(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched); +void localModeDuo(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched); +void localModeSolo(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched); #endif // LOCALMODE_H @@ -97,7 +99,17 @@ bool allInit() { return true; } -void localMode(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched) { +void afficheGrille() { + Serial.println("=============="); + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + Serial.print(grille[i][j]); + } + Serial.println(); + } +} + +void localModeDuo(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched) { currtouched = cap.touched(); for (int i = 0; i < numKeys; i++) { @@ -114,23 +126,60 @@ void localMode(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouche if(grille[c.y][c.x] == 0) { if(joueur1) { grille[c.y][c.x] = 1; + afficheGrille(); if(victoire(grille, 1)) { Serial.println("Joueur 1 a gagne"); } } else { grille[c.y][c.x] = 2; + afficheGrille(); if(victoire(grille, 2)) { Serial.println("Joueur 2 a gagne"); } } joueur1 = !joueur1; } + } + } + } + lasttouched = currtouched; +} - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 3; j++) { - Serial.print(grille[i][j]); +void localModeSolo(Adafruit_MPR121& cap, uint16_t& lasttouched, uint16_t& currtouched) { + + //Serial.println("Mode Solo Local"); + + currtouched = cap.touched(); + + for (int i = 0; i < numKeys; i++) { + uint8_t t = keys[i].touchID; + keys[i].led.setPixelColor(0, 255); // Bleu + keys[i].led.show(); + + if ((currtouched & _BV(t)) && !(lasttouched & _BV(t))) { + Serial.print("Touch "); Serial.print(t); Serial.println(" pressed"); + btns[i] = true; + + if(allInit()) { + Coord c = getCo(i); + if(grille[c.y][c.x] == 0) { + grille[c.y][c.x] = 1; + afficheGrille(); + if(victoire(grille, 1)) { + Serial.println("Joueur 1 a gagne"); + } + + int x, y; + do { + x = random(0, 3); + y = random(0, 3); + } while(grille[y][x] != 0); + + grille[y][x] = 2; + afficheGrille(); + if(victoire(grille, 2)) { + Serial.println("Joueur 2 a gagne"); } - Serial.println(); } } }