Partage
  • Partager sur Facebook
  • Partager sur Twitter

Morpion en php

idées

    7 mai 2006 à 22:13:15

    Bonjour, je veux faire un morpion en php.
    mais alors la je sais pas comment imposer de l'intelligence artificielle (IA) a mon proramme;
    En gros je sais pas du tout comment réaliser ce programme : joueur contre serveur ...
    vous avez desidées ?
    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2006 à 22:17:54

      Créer de l'IA en PHP ça doit être assez dur, c'est pas tellement fait pour ça.
      Met bon tu peux toujours essayer de lui apprendre des techniques (y en a des imparables ^^ ). Par contre t'as intérêt de bien manipuler les arrays et les interactions visiteur/serveur ^^
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        7 mai 2006 à 22:17:58

        Déjà, pour un morpion, il faudra que tu utilises un mélange PHP Javascript Xml : AJAX
        Celui ci permettra de rendre ton morpion dynamique ;)
        • Partager sur Facebook
        • Partager sur Twitter
          7 mai 2006 à 22:18:58

          Citation : Tonio 76

          Déjà, pour un morpion, il faudra que tu utilises un mélange PHP Javascript Xml : AJAX
          Celui ci permettra de rendre ton morpion dynamique ;)


          C'est préférable mais il ne faut pas obligatoirement le faire
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            7 mai 2006 à 22:29:36

            Oui ! Commentce à réfléchir à comment ça va se passer...

            Un array en session ça peut être bien ! Tu as donc neuf case : 1-1,1-2,1-3,2-1,2-2,2-3,3-1,3-2,3-3

            L'ordinateur aura les ronds (par exemple) et l'utilisateur les croix !
            Au début, tu initialises ton array donc :

            session_start();
            $jeu = Array('1-1' => '',
                         '1-2' => '',
                         '1-3' => '',
                         '2-1' => '',
                         '2-2' => '',
                         '2-3' => '',
                         '3-1' => '',
                         '3-2' => '',
                         '3-3' => '');
            $_SESSION['jeu'] = $jeu;

            Voilà qui est fait, tu as donc ton tableau de jeu ! Quand la valeur del a case est vide, la case vide, quand c'est 'rond', il y a un rond, quand c'est 'croix', il y a une croix !

            Pour l'instant, rien de plus ! Tu vas appeler l'entrée 1-3 ?
            $_SESSION['jeu']['1-3']


            Il te faut maintenant créer une fonction qui permet de voir si un des utilisateurs a trois cases d'affilée !
            Si oui, tu affiches qu'i a gagné, pas de liens et un lien rejouer ;)

            Il te faut créer aussi une fonction qui cherche si un des joueurs a deux cases d'affilée (et peux donc gagner avec aisance) ! Ca, ça va t'être pas mal utile pour si c'est à toi de jor, à gagner ou à empêcher l'autre de gagner !

            La clé de l'AI sera vraiment là je pense, et c'est plutôt simple ;)

            Si il y a pas de ces deux cas, bah tu en prends une au pif !



            Comment coder une des fonction de ce genre ?
            Ca va peut-être te paraître idiot mais il y a simplement 8 possibilités d'avoir 3 de ses cases cochées ! Pourquoi ne pas toutes les testés, puisqu'un morpion fait 3*3 ?
            Tu mets un return pour savoir où cocher ou n'importe, et c'ets dans la poche !
            • Partager sur Facebook
            • Partager sur Twitter
              7 mai 2006 à 22:41:52

              Allez tant qu'à partir dans les pistes pour le faire, je vais donner un petit peu de précisions quant à ce que j'aurais fait ^^ .
              Le truc de flobard à l'air pas mal, mais moi j'y ajouteré une dimension (ne nous privons pas, elles sont illimités ^^ ).
              Donc mon array ressembleré à celui-ci (je suis pas trop sûr que ça marche ^^ ):
              $jeu = Array(
              '1' => Array('1' => '', '2' => '', '3' => ''),
              '2' => Array('1' => '', '2' => '', '3' => ''),
              '3' => Array('1' => '', '2' => '', '3' => ''));

              Je sais pas si c'est très correct, mais en gros cela devrait donner des variables de ce genre :
              $jeu[1][1], $jeu[1][2] ...
              Je pense que comme ça il serait plus simple de voir les alignements de points
              • Partager sur Facebook
              • Partager sur Twitter
                7 mai 2006 à 22:50:05

                Autant ne pas mettre de clés et mettre les valeurs à 0 quand rien n'est coché, à 1 quand c'est le joueur 1 et à 2 quand c'est le joueur 2, la grille de départ serait donc

                $jeu = array(
                  array(0, 0, 0),
                  array(0, 0, 0),
                  array(0, 0, 0)
                );


                Ensuite les variables seraient $jeu[0][0] par exemple.

                Dans ton exemple ça va pas parce que tu définies les clés comme des strings et tu les appeles comme des ints.
                • Partager sur Facebook
                • Partager sur Twitter
                  7 mai 2006 à 22:59:05

                  Je trouve ça moyen, pour se réperer ça va pas du tout, et pour mes array, ça a toujours maché comme ça, et c'était juste pour l'exemple.
                  Moi ensuite pour me réperer et surtout pour voir les alignements de trois, c'est assez simple, certes beaucoup de if mais on peut pas y échapper (je pense qu'on peut arriver jusqu'à 4 if écrits (donc s'ils sont dans une boucle c'est pas grave ^^ ) et le maximum c'est 8)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    7 mai 2006 à 23:10:02

                    Ca m'a donné envie de le faire ce petit morpion !

                    Ce sont tous ces if's les plus lourds : faut surtout pas se gourer :s
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 mai 2006 à 23:13:49

                      Moi aussi ça m'as donné envie, pour quand je serais à l'internat je pense ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 mai 2006 à 23:20:01

                        Citation : A-spec59

                        Je trouve ça moyen, pour se réperer ça va pas du tout, et pour mes array, ça a toujours maché comme ça, et c'était juste pour l'exemple.
                        Moi ensuite pour me réperer et surtout pour voir les alignements de trois, c'est assez simple, certes beaucoup de if mais on peut pas y échapper (je pense qu'on peut arriver jusqu'à 4 if écrits (donc s'ils sont dans une boucle c'est pas grave ^^ ) et le maximum c'est 8)



                        Enfin, c'est bcp moins lourd, et puis si t'arrives pas à te reperer dans 9 neufs cases, je peux plus rien pr toi :p
                        C'est normal que cela marche puisque la notion de types en php est très floue, mais il faudrait tt de même mettre $jeu['1']['1'] pour que cela soit vraiment correct. (ou changer les clés en int, à toi de voir)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          7 mai 2006 à 23:23:40

                          Je vois pas trop en quoi c'est moins lourd :s
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 mai 2006 à 23:25:28

                            C'est pas pour moi que ça doit être plus simple, mais pour l'IA qu'il veut créer, ton cerveau faut peut être pas tout lui dire, un ordi si, donc au plus tu fais simple, au plus ça le sera pour lui expliquer
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 mai 2006 à 23:27:54

                              Et dans un ordinateur, le premier chiffre, c'est ... 0 donc c'est toujours plus simple d'utiliser le 0.

                              C'est moins lourd dans le sens ou ce n'est plus un tableau associatif ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 mai 2006 à 23:31:05

                                ha c'est pas con ça, on gagnera au moins 2 millisecondes comme ça, c'est vraiment génial (regarde ma signature ^^ ).
                                Je préfère privilégier la simplicité au gain de 5 millisecondes, et je pense ne pas être le seul comme ça ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 mai 2006 à 23:40:10

                                  Oui mais là, c'est un gain en simplicité et en rapidité donc bon...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    7 mai 2006 à 23:42:50

                                    On doit pas avoir tous le cerveau fait de la même manière ! Commencer par 1 me paraît plus simple ! Tant mieux pour toi si tu gagnes logique et radidité, mais je vois pas dans mon script que je suis en train de faire en quoi tu y gagnes ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 mai 2006 à 23:45:16

                                      Enfin bon, faites comme vous voulez, à la limite, c'est pas pr moi le script donc bon...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        8 mai 2006 à 9:35:52

                                        Une méthode simple pour gagner ^^ :
                                        1er coup
                                        - - -
                                        - - -
                                        X - -

                                        2eme coup
                                        - - O
                                        - - -
                                        X - -

                                        3eme coup
                                        X - O
                                        - - -
                                        X - -

                                        4eme coup
                                        X - O
                                        O - -
                                        X - -

                                        5eme coup
                                        X - O
                                        O - -
                                        X - X

                                        Ensuite il reste 2 possibilités pour gagner ^^ , c'est assez simple et normalement on peut le mettre dans n'importe quelle partie.
                                        Edit: je viens de vérifier, en faisant le premier coup dans un coin, peu importe là ou l'autre fait son premier coup, il y a moyen de gagner.
                                        Ensuite le coup d'après ne doit pas être raté, car c'est lui qui forcera l'autre à mettre ses ronds là où vous le souhaitez, il faut toujours qu'à partir de votre deuxième coup, le coup de l'autre soit pour vous bloquer, jusqu'à votre troisième où il ne peut bloquer deux trucs en même temps
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          8 mai 2006 à 9:57:58

                                          Citation : Baptiste

                                          Autant ne pas mettre de clés et mettre les valeurs à 0 quand rien n'est coché, à 1 quand c'est le joueur 1 et à 2 quand c'est le joueur 2, la grille de départ serait donc


                                          $jeu = array(
                                            array(0, 0, 0),
                                            array(0, 0, 0),
                                            array(0, 0, 0)
                                          );



                                          Ensuite les variables seraient $jeu[0][0] par exemple.

                                          Dans ton exemple ça va pas parce que tu définies les clés comme des strings et tu les appeles comme des ints.



                                          C'est la meilleur méthode, tant au plan simplicité que rapidité, pas besoin de faire un array asociatif pour un morpion >_<
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            8 mai 2006 à 11:42:30

                                            Citation : A-spec59

                                            Edit: je viens de vérifier, en faisant le premier coup dans un coin, peu importe là ou l'autre fait son premier coup, il y a moyen de gagner.
                                            Ensuite le coup d'après ne doit pas être raté, car c'est lui qui forcera l'autre à mettre ses ronds là où vous le souhaitez, il faut toujours qu'à partir de votre deuxième coup, le coup de l'autre soit pour vous bloquer, jusqu'à votre troisième où il ne peut bloquer deux trucs en même temps



                                            Et si l'adversaire place son 1er coup au centre ?

                                            Match nul :p
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              8 mai 2006 à 11:44:49

                                              attention message HS...

                                              A-spec59 fan de => ^^

                                              voila voila :-°
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                8 mai 2006 à 13:21:57

                                                Bonjour, merci de vos aides !
                                                Flobard, je vais essayer de faire la fonction qui permet au serveur de jouer au mieux quand il a deux cases.
                                                Mais si me serveur n'a qu'une case d'affilé on va quand meme pas faire une case au hasard pour jouer ?
                                                Donc si je résumes :
                                                une fonction qui, si on a deux cases d'affilées , essaye de gagner.
                                                Une autre fonction qui s'éxécute si on a pas deux cases d'affilées et/ou qu'on peux pas placer un 3 rond : elle recherche si l'autre a deux cases d'affilées et l'empeche de gagner
                                                enfin, si ces deux fonctions ne peuvent etre exécutées, on met au pif
                                                es bon comme plan ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  8 mai 2006 à 16:36:41

                                                  Citation : strucky

                                                  Et si l'adversaire place son 1er coup au centre ?

                                                  Match nul :p


                                                  Ben tu fais un if pour savoir si le premier coup de l'autre n'est pas au centre ^^ (oui je sais j'en suis fan ^^ ), si ce n'est pas le cas, t'initialise une variable stratégie (par exemple à 1), si par contre son coup est au milieu t'initialise la stratégie 0 (consiste à faire tout pour qu'il y ai match nul ou à profitter d'un truc pas vu par l'autre ^^ ). Il suffit qu'il place une seule fois son coup ailleurs qu'au centre, et le serveur peut mener la partie jusqu'à la fin ^^ (si le script a bien été programmé ^^ )
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    8 mai 2006 à 16:39:07

                                                    Citation : A-spec59

                                                    Ben tu fais un if pour savoir si le premier coup de l'autre n'est pas au centre ^^ (oui je sais j'en suis fan ^^ ), si ce n'est pas le cas, t'initialise une variable stratégie (par exemple à 1), si par contre son coup est au milieu t'initialise la stratégie 0 (consiste à faire tout pour qu'il y ai match nul ou à profitter d'un truc pas vu par l'autre ^^ ). Il suffit qu'il place une seule fois son coup ailleurs qu'au centre, et le serveur peut mener la partie jusqu'à la fin ^^ (si le script a bien été programmé ^^ )

                                                    ---

                                                    J'aime bien les gens de caractère, pas des gars qui partent au milieu d'une argumentation parce qu'ils en ont marre.
                                                    Méthode d'argumentation préférée: l'absurde ^^
                                                    Si j'ai l'air de dire nimp, regarde ce que tu dis, c'est encore pire ^^



                                                    1 ^^ 2 ^^ 3 ^^ 4 ^^ 5 ^^ 6 ^^ 7 ^^ !

                                                    waou... :p

                                                    ok promis j'arrete ===>[]
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      8 mai 2006 à 16:41:19

                                                      Et alors ? Ca fait coloré ^^, et d'abord je fais ce que je veux ^^ !!
                                                      T'as vraiment rien d'autre à faire que regarder ça o_O^^ ??
                                                      C'est bien sûr pour rire ^^
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        8 mai 2006 à 17:12:31

                                                        si si j'ai pleins d'autres truc a faire...
                                                        mais j'ai pa eu a regarder ca ca m'a sauté aux yeux ^^
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          8 mai 2006 à 18:44:13

                                                          La j'ai un probleme, mon foreach marche pas dans une fonction mais marche en dehors de la fonction ...
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            8 mai 2006 à 18:53:08

                                                            Citation : lapras123

                                                            La j'ai un probleme, mon foreach marche pas dans une fonction mais marche en dehors de la fonction ...


                                                            Oué ba oué bien sûr ^^
                                                            Ca serait pas mieux si tu nous donnais ton code ??
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Morpion en php

                                                            × 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