IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Puissance 4 un jeu


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut Puissance 4 un jeu
    Bonjour à tous ,

    j'ai le projet de faire un Puissance 4 pour le petit-fils en m'inspirant d'un projet existant

    https://projecthub.arduino.cc/mircem...troller-34cf6c
    l’intérêt est que l'on peut jouer à deux ou contre l'ordinateur

    l'ennui est que j'utilise une matrice Leds 8x8 avec un câblage de type "série" et non pas comme semble indiqué le projet un câblage de type "zig-zag" (ce dernier que je n'ai d'ailleurs pas trouvé à la vente )
    ce qui me donne un résultat non conforme puisque les "jetons" ne s'alignent pas dans les colonnes
    j'ai d'ailleurs tenté de faire une simulation avec Wokwi

    https://wokwi.com/projects/384108125590964225

    Le principe reste simple :
    - on choisit 1 joueur ou 2 joueurs
    - et à l'aide des boutons Gauche ( jaune) ou Droit ( vert) on choisit la colonne
    - puis on valide par le bouton (Bleu)

    ma question est la suivante :
    lors de l'appui sur le bouton "Bleu" ( voir bas_0() )le pion ne va pas dans la bonne colonne suite à l'usage d'une matrice Leds en série

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    / --------------------  Abaissement du pion --------------------
    void bas_0 () {
      zw3 = 0;
      do {
        if (spielfeld [position_0 + 8] == 0 ) {
          spielfeld [position_0] = 0;
    	  position_0 = position_0 + 8; //<=============
    	  spielfeld [position_0] = status_spiel;
          zw3++;
     
          delay(100);
     
          sortie_terrain_de_jeu (); delay(200);
        }
        else {
          zw3 = 7;
        }
      }
      while (zw3 != 7) ;
      direction = 0; position_0 = 0;
      if (status_spiel == 1 ) {
        status_spiel = 2;
        spielfeld [position_0] = 2;
      } else {
        status_spiel = 1;
        spielfeld [position_0] = 1;
      };
      sortie_terrain_de_jeu ();
    }
    Je sollicite donc votre pour me permettre de résoudre ce problème
    En vous remerciant par avance

    pascal

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 917
    Par défaut
    vous voulez dire que les matrices ressemblent à cela:

    Nom : matrices.jpg
Affichages : 214
Taille : 198,5 Ko

    c'est ça ?

    dans ce cas on voit que les lignes impaires ont des indices qui correspondent et que les lignes paires ont des indices inversés ==> il faut que vous ayez une petite fonction de transfert dans votre code pour que chaque position zigzag calculée dans leur tableau soit associée à la nouvelle position linéaire dans la strip Adafruit_NeoPixel.

    une petite fonction zigzagVersLineaire comme cela pourrait faire cette conversion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    const size_t nbLignes = 8;
    const size_t nbColonnes = 8;
     
    size_t zigzagVersLineaire(size_t num) {
      size_t ligne = num / nbColonnes;
      size_t colonne = num % nbColonnes;
      if (ligne % 2 == 1) colonne = nbColonnes - colonne - 1;
      return ligne * nbColonnes + colonne;
    }
     
    void setup() {
      Serial.begin(115200);
      for (size_t pos = 0; pos < nbLignes * nbColonnes; pos++) {
        Serial.print("zigag #"); Serial.print(pos);
        Serial.print(" => linéaire #"); Serial.println(zigzagVersLineaire(pos));
      }
    }
     
    void loop() {}

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Salut Jay M

    vous voulez dire que les matrices ressemblent à cela:
    Bien vu , oui c'est cela !
    je ne vois pas bien comment je vais pouvoir intégrer çà dans le croquis
    mais surtout encore un grand merci pour avoir cerné mon petit problème

    pour info :
    actuellement on utilise dans le sous-prg void bas_0 ()
    byte position_0 = 0 comme variable de position

    puis-je alors par exemple remplacer celle-ci par cela

    size_t position_0 = size_t zigzagVersLineaire(size_t num)

    pascal

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 917
    Par défaut
    Je veux dire que partout où vous faites des appels qui modifient la couleur d'un pixel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      strip.setPixelColor (index, 10, 0, 0);
      strip.show();
    il faut injecter le calcul de l'index en version linéaire puisque votre matrice est câblée différemment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      strip.setPixelColor (zigzagVersLineaire(index), 10, 0, 0);
      strip.show();

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Ok je vais essayer çà sous Wokwi

    merci encore
    pascal

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Bonjour à tous

    Je progresse mais j'ai encore de nombreux bugs
    notamment à titre d'ex sur le remplissage de la dernière ligne

    https://wokwi.com/projects/384266789195555841


    pascal

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 917
    Par défaut
    vous ave mis l'appel à la fonction zigzagVersLineaire() un peu partout, notamment dans la gestion de leur état. Il faut conserver ce tableau comme il est et juste modifier l'affichage, donc intégrer l'appel à la fonction uniquement dans tous les strip.setPixelColor() et uniquement là.


    j'ai fait quelques modifications, pas partout (les animations de fin de partie notamment ne sont pas modifiée avec zigzagVersLineaire() donc ça fait sans doute clignoter de mauvaises cases)

    le bouton de droite au début permet de choisir de jouer contre l'ordinateur

    https://wokwi.com/projects/384354169407758337


    le code est assez laborieux et pas super bien écrit, on dirait que cela a été écrit par quelqu'un qui connait plus python que C++

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    J'y fait mes modestes retouches

    çà semble fonctionner mais grâce à vous Jay M

    https://wokwi.com/projects/384371157598116865


    merci encore mille fois

    Cordialement
    pascal

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 917
    Par défaut
    cool ;

    il faudrait modifier le 5 de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      strip.setBrightness(5);
    parce qu'on n'y voit pas grand chose sur wokwi sinon

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Oui c'est juste mais les Leds sont plus visibles en réalité
    c'est Wokwi qui assombrit beaucoup

    en tout cas je renouvelle mes remerciements pour le coup de main

    A la prochaine ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme Min-Max appliqué au jeu Puissance 4 en C .
    Par hebmaster dans le forum Intelligence artificielle
    Réponses: 17
    Dernier message: 29/10/2012, 07h33
  2. Jeu Puissance 4 en 3D
    Par macbang dans le forum Fortran
    Réponses: 0
    Dernier message: 05/12/2007, 00h21
  3. probleme avec un label pour le jeu du puissance 4
    Par lol88 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2007, 18h55
  4. Réponses: 1
    Dernier message: 13/05/2007, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo