Jeu MORPION avec écran SSD1306

Bonjour à tous,

Je suis en train de coder un petit jeu de Morion avec une carte Arduino UNO, un écran SSD1306 et 3 boutons poussoirs. J’ai pour le moment un écran d’accueil et un écran jeu SOLO.

Je viens chercher de l’aide car j’ai deux difficultés.

1ere difficulté :

Dans la partie jeu SOLO (le multi n’est pas encore codé), lorsque je sélectionne une case pour y mettre une X ou un O et que je déplace mon curseur pour choisir une autre case, la figure mise est effacée.

Le souci vient du fait que j’efface mon curseur à chaque fois que je le déplace, plus précisément j’efface la case pour faire disparaître le curseur (c’est pareil pour un déplacement horizontal) : grille[n] = 0

if(etatVertical == LOW) //deplacement du curseur verticalement
    {
      grille[n] = 0; //efface le curseur de la case apres son deplacement
      grille[n+3] = 1;

      //permet de passer d'un bord a l'autre de la grille
      if(n+3 == 9)
      {
        n = 0;
        grille[n] = 1;
       }
      else if(n+3 == 10)
      {
        n = 1;
        grille[n] = 1;
      }
      else if(n+3 == 11)
      {
        n = 2;
        grille[n] = 1;
      }
      else
      {
        n = n + 3;
      }

      delay(200);
    }

J’ai besoin qu’une fois que la case est remplie par X ou O, elle ne puisse plus être modifiée.
Une idée de votre part ? Le code est en pièce jointe (problème avec 9000 caractères max).

2eme difficulté :

Lorsque je choisis jeu SOLO dans l’écran d’accueil, l’écran SOLO se lance ; et alors que j’ai codé le fait d’avoir le curseur initial en centre de grille, il est directement remplacé par une X.

J’aurais besoin d’un oeil neuf car je n’arrive pas à comprendre ou cette action est faite dans le code.

Merci à tous pour l’aide, n’hésitez pas à me poser des questions si le code ou la question ne sont pas clairs.
:slight_smile:

morpion.txt (8.89 KB)

Pour ton premier problème, il suffit de retracer l'ensemble du damier à chaque fois que tu fais une action. Ça ne doit pas être très long car il s'agit de tracer une demi douzaine de lignes et les X et les O.

Je ne peux pas lire le code depuis mon mobile mais faut pas effacer la case si elle ne doit pas l’être semble La meilleure réponse possible... (ou la repeindre Avec le bon contenu)

Pour ton 2nd problème je pense que cela vient du fait que tu ne sembles pas attendre que etatValider repasse à HIGH avant de continuer. Du coup tu valides le choix du mode et tu entres directement dans le if(etatValider == LOW && compteur%2 == 0)

Après avoir accepté la sélection du mode et mis l'affichage à jour il faudrait que tu fasses:

while(etatValider == HIGH); // attendre le relâché du bouton

D'ailleurs tu dois rencontrer un problème similaire lorsque tu places un symbole sur l'écran. Si tu tiens le bouton valider un peu longtemps tu dois certainement avoir un comportement anormal.