Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conway's game of life... Besoin d'aide!

Version BASIC pour TI-83

Sujet résolu
    9 novembre 2017 à 22:26:02

    Bonsoir, 

    Cet après-midi, mon prof de maths (1e S) m'a mis au défi de coder Conway's game of life (Je lui montre souvent des petits jeux que je fais sur ma TI-83 Premium CE)

    J'ai naturellement tenté le défi, mais je dois avouer que j'ai pas d'idée de comment aborder le programme. 

    D'abord j'ai jeté un coup d'oeuil sur les versions indexées sur Rosetta Code, et j'ai trouvé une chouette version semblerait-il: 

    http://rosettacode.org/wiki/Conway%27s_Game_of_Life#TI-83_BASIC

    :While 1
    :For(X,2,9,1)
    :For(Y,2,17,1)
    :If [A](Y,X)
    :Then
    :Output(X-1,Y-1,"X")
    :Else
    :Output(X-1,Y-1," ")
    :End
    :[A](Y-1,X-1)+[A](Y,X-1)+[A](Y+1,X-1)+[A](Y-1,X)+[A](Y+1,X)+[A](Y-1,X+1)+[A](Y,X+1)+[A](Y+1,X+1)→N
    :If ([A](Y,X) and (N=2 or N=3)) or (not([A](Y,X)) and N=3)
    :Then
    :1→[B](Y,X)
    :Else
    :0→[B](Y,X)
    :End
    :End
    :End
    :[B]→[A]
    :End



    Mais... Déjà ça ne marche pas, il semblerait qu'il faut rajouter quelques lignes pour définir les matrices (Elles ne sont pas définies sur le code) 

    Et puis c'est bien beau mais je voudrais faire tout le cheminement intellectuel pour arriver au résultat par moi même. 

    Du coup je me suis en tête de partir à zéro... Et je trouve rien :D

    Voici là où j'en suis: 

    L'utilisateur rentre 3 abscisses et 3 ordonnées de points quelconques, disons A,B,C. 

    On définit un centre M (X=13;Y=5) sur lequel on se basera pour évaluer les progressions des trois autres points. 

    Note: je ne le fais pas encore en fenêtre graphique, je me contente des petites dimensions de la fenêtre Home

    On créé un début de boucle. 

    ...

    C'est là que je suis un peu perdu. Je me doute bien qu'il y a une histoire d'abscisse +/- 1, d'ordonnée +/- 1. 

    Seulement il faudrait que je gère les positions autour des points, c'est à dire si j'ai un point P:

    (Xp-1;Yp)  (Xp-1;Yp-1)  (Xp-1;Yp+1)  (Xp;Yp)  (Xp;Yp-1)  (Xp;Yp+1)  (Xp+1;Yp)  (Xp+1;Yp+1)  (Xp+1;Yp-1) 

    Et sa position par rapport à M (Xp-Xm) (Yp-Ym)

    J'ai remarqué que tout le monde semble utiliser les fonctions matrice pour gérer ces situations. (Dans ce programme aussi, c'est la plus longue ligne qui semble correspondre à ce que j'essaye de comprendre)

    Je n'utilise jamais les matrices, je ne fais que des calculs d'abscisses et ordonnées indépendament mais là j'ai beaucoup plus de choses à gérer. 

    Du coup je suis dans le flou total, vous auriez quelques pistes au niveau de la logique ou bien de l'utilisation de la matrice? 

    Merci d'avance (On sait jamais même si je me doute bien que quelqu'un qui code en TI Basic, qui connait le principe du Conway' s game et gère les matrices tranquille ne court pas les rues :lol:

    Jean. 

    -
    Edité par Dark Boubou 9 novembre 2017 à 22:27:15

    • Partager sur Facebook
    • Partager sur Twitter
      10 novembre 2017 à 12:38:19

      Salut,

      Pourquoi le code que tu donnes ne fonctionne pas? Qu'est-ce qu'il se passe quand tu le lances?

      Pour ta question sur le fait de définir les matrices, c'est déjà fait, elles sont déclarées "par défaut" (à défaut d'un meilleur terme) de [A] à [J] d'après la doc, un peu comme les variables "classiques" de A à Z et thêta.

      Concernant ton algorithme, à quoi serviront les 4 points A, B, C et M?

      Qu'est-ce que tu connais sur les matrices et le principe du jeu?

      • Partager sur Facebook
      • Partager sur Twitter
        11 novembre 2017 à 13:10:52

        Re! 
        Et bien ma calculette m'indique Error: Undefined 
        Script
        Concernant mon algo, ben je sais pas trop :D
        Je vois pas comment aborder le problème, je suis pas à l'aise avec les Matrices (Cependant j'ai 100% sur le cours de TI)
        Je comprends les opérations de base des matrices mais pas plus loin que ça. D'ailleurs je ne les ai toujours pas étudiées en Maths. 
        Le fait de partir avec des points A,B,C définis par M fait qu'on se base sur des coordonnées et non un tableau. (Vu que je sais pas gérer de tableaux ou matrices)
        Mais ma méthode ne sert à rien car d'autres points seront créés, donc ABC ne seront plus suffisants et puis y a sûrement mieux que faire la différence d'ordonnées et d'abscisses pour connaitre la position des points... Et encore je ne sais pas trop à quoi ça m'avance ^^ 
        Si j'ai bien compris le jeu, on a:
        3 cases ON = Donne vie
        2 cases = conserve ON ou OFF
        1 case ou +4 = Set OFF 
        Après il serait utile de laisser l'user choisir les positions des points de départ, ce que ce programe ne fait pas.
        J'ai demandé à mon prof de maths à un intercours et il n'a pas su me répondre :lol:
        Il n'avait pas pensé aux matrices :D Il ne peut pas plus m'aider, donc j'ai bien fait de poster ici :) 
        Du coup...? 
        • Partager sur Facebook
        • Partager sur Twitter
          12 novembre 2017 à 14:18:31

          Apparemment il faut soit la désarchiver soit la dimensionner, voir ce lien : http://tibasicdev.wikidot.com/sk:matrices

          J'ai pas les moyens de tester en ce moment par contre.

          En fait y a pas besoin de faire d'opérations sur les matrices, elles servent juste à stocker des informations dans ce cas-là.

          Tu peux voir une matrice comme une grille, chaque ligne et colonne est numérotée et pour savoir ce qu'il y a dans la case à la ligne 4 colonne 5 de ta grille, tu utilises la matrice : [A](5,4).

          Ensuite, il n'y a pas besoin de demander des points des points à l'utilisateur (enfin pas pour une première implémentation), toutes les cases de la grille "jouent" en même temps, c'est à dire que tu dois appliquer les règles du jeu à toutes les cases, pas quelques unes.

          • Partager sur Facebook
          • Partager sur Twitter
            12 novembre 2017 à 22:02:14

            Merci pour la réponse, ça m'aide mieux à comprendre du coup pour les matrices. 

            J'ai définit [A] en tant que 26*10 et [B] 26*10; cependant la calculette ne m'affiche qu'un écran blanc, aucun "X"... 

            C'est normal? 

            Si je remplace le blanc par un 0 ça me donne: 

            0000000000000000

            0000000000000000

            0000000000000000

            0000000000000000

            0000000000000000

            sur une grande partie de l'écran. 

            Je ne peux pas screener car la calculette ne répond plus (Trop de calcul). 

            Du coup si ça ne m'affiche rien c'est par ce qu'il n'y a pas de point au début sur lequel appliquer la loi? 

            Il y a une seule ligne que je ne comprends pas: 

            If [A](Y,X)

            Qu'est-ce que ça veut dire?? 

            -
            Edité par Dark Boubou 12 novembre 2017 à 22:17:06

            • Partager sur Facebook
            • Partager sur Twitter
              12 novembre 2017 à 22:43:10

              J'ai trouvé!! 

              Le code est tout simplement incomplet! :D

              :1->[A](2,2)
              :1->[A](3,3)
              :1->[A](4,2)
              : // 3 valeurs par exemple, on peut en mettre autant qu'on veut à l'initiation
              :While 1
              :For(X,2,9,1)
              :For(Y,2,17,1)
              :If [A](Y,X)=1
              :Then
              :Output(X-1,Y-1,"X")
              :Else
              :Output(X-1,Y-1," ")
              :End
              :[A](Y-1,X-1)+[A](Y,X-1)+[A](Y+1,X-1)+[A](Y-1,X)+[A](Y+1,X)+[A](Y-1,X+1)+[A](Y,X+1)+[A](Y+1,X+1)→N
              :If ([A](Y,X) and (N=2 or N=3)) or (not([A](Y,X)) and N=3)
              :Then
              :1→[B](Y,X)
              :Else
              :0→[B](Y,X)
              :End
              :End
              :End
              :[B]→[A]
              :End


              Du coup pour fixer les valeurs au départ me reste plus qu'à créer une grille sur laquelle l'user pose ses points qui vont évoluer! :D 

              Yaouh je suis content! :lol:

              Il manquait aussi ceci: 

              :If [A](Y,X)=1  au lieu de 
              :If [A](Y,X)

              -
              Edité par Dark Boubou 12 novembre 2017 à 22:44:07

              • Partager sur Facebook
              • Partager sur Twitter

              Conway's game of life... Besoin d'aide!

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown