problème jeu du pendu en PHP

problème jeu du pendu en PHP - PHP - Programmation

Marsh Posté le 16-12-2005 à 18:58:56    

Bonsoir,  
J'ai un problème avec mon script PHP. en fait je voudrais faire un jeu du pendu en php.
pour l'instant je fais mon script avec un seul mot mais cela s'étendra via une BD plus tard.  
j'arrive à cacher les lettre de mon mot. j'ai aussi affiché le choix sous forme de lien. et c'est là ou est le problème.  
en fait, mon script ne garde pas en "mémoire" les précédents choix effectué pour trouver le mot. je vous met mon script pour mieux comprendre (ne fiates pas attention à certains commentaires. il y a pas mal d'essai dedans):
 

Code :
  1. <?php
  2. //session_start();
  3. $lettres="abcdefghijklmnopqrstuvwxyz";//on déclare les lettres de l'aphabet utilisées pour le pendu
  4. $tabL = preg_split('//', $lettres, -1, PREG_SPLIT_NO_EMPTY);//on éclate la chaine dans un tableau $tabL
  5. $tailleTab1=count($tabL);
  6. //$_SESSION['result']=$choix;
  7. //$result=$_SESSION['result'];
  8. //$Choix=$_GET["lettre"];
  9. $mot="bonjour";
  10. $Mjeu=$mot;
  11. //$gagne=false;
  12. //on défini le nombre d'erreur à 0 au départ
  13. $erreur=0;
  14. $tabM = preg_split('//', $mot, -1, PREG_SPLIT_NO_EMPTY); //éclate la chaine dans un tableau $tabM
  15. $tailleTab2=count($tabM);//compte le nombre de lettres du mot
  16. for($k=1; $k<$tailleTab2; $k++){
  17.  $Mjeu{$k}="*";
  18. }
  19. if($Mjeu!==$mot){
  20.  for($i=1; $i<$tailleTab2; $i++){
  21.   if ($choix==$tabM[$i]){
  22.    $Mjeu{$i}=$choix;
  23.   }
  24.  }
  25. }
  26. else {
  27. echo "t'es un champion";
  28. }
  29. ?>
  30. <html>
  31. <title>penduGame</title>
  32. <body>
  33.  <br><br>
  34.  <?
  35.   echo $Mjeu;
  36.   echo "<br>";
  37.   for($j=0; $j<=$tailleTab1; $j++){
  38.    echo "<a href=\"$PHP_SELF?choix=$tabL[$j]\">$tabL[$j]</a>"." ";
  39.   }
  40.  ?>
  41.         </body>
  42. </html>


pour le moment je cherche juste à faire fonctionner mon pendu le plus simple. c'est à dire afficher toutes les lettres du mot au fur et à mesure que je trouve les lettres.
merci de votre aide

Reply

Marsh Posté le 16-12-2005 à 18:58:56   

Reply

Marsh Posté le 16-12-2005 à 19:43:39    

stock les lettres déjà proposées dans un champ caché.
 
quand on clique sur le lien d'une lettre, tu ajoutes la lettre à cette liste, puis du parcours la liste caractère par caractère pour démasquer les lettres trouvées, et recompter les coups rattés.

Reply

Marsh Posté le 16-12-2005 à 19:44:33    

tu peux aussi passer par une variable de session, m'enfin c'est un peu la marteau pour casser la noisette


Message édité par Arjuna le 16-12-2005 à 19:44:40
Reply

Marsh Posté le 16-12-2005 à 20:06:52    

ta solution du champ caché à l'air interessante mais je vois pas du totu comment je pourrai faire.
Sinon j'avai déjà commencé à tatonner avec les variables de sessions (qques ébauches ds les commentaires) mais je en trouve pas la solution.
J'ai pensé au départ à faire une nouvelle page ou serait stocké un tableau dynamique. à chaque fois que je clic, la variable est inseré dans ce tableau et, au lieu de regarder la variable du click, mon script irait chercher dans le tableau les lettres inserés seulement je vois pas par ou commencer non plus.

Reply

Marsh Posté le 17-12-2005 à 13:34:58    

je na trouve pas la solution. si quelqu'un peut, m'aider merci d'avance

Reply

Marsh Posté le 17-12-2005 à 15:21:41    

Ben je voulais en écrire un en C# avec SQL Server, mais j'ai une couille avec C#, et vu que personne ne me réponds...

Reply

Marsh Posté le 17-12-2005 à 15:24:14    

tout ça juste pour un pendu ?
 
ton code est faux et tu peux le réduire de moitié, des indices :
- pourquoi preg_split ? http://fr.php.net/string#language.types.string.substr
- ligne 17 : pourquoi $k=1 ?
- ligne 21 :  $Mjeu ne sera jamais égal à $mot donc tu ne seras jamais un "champion"  ;)  
- au lieu d'envoyer qu'une lettre dans $choix, envois la partie du mot déjà trouvé + une lettre
etc..

Reply

Marsh Posté le 17-12-2005 à 19:42:19    

oui je sais que c'est un peu le bordel et que mon code est partiellement faux.  
pour l'instant je m'attache juste au fait de pouvoir garder en mémoire les précédents choix. pour le reste, j'optimiserai plus tard puisque je pense pas avoir de soucis:
 
- j'utilise preg_split car je voulai "éclater" mon mot dans un tableau ($tabM) pour ensuite parcourir lettre par lettre. c'est vrai que c'est pas hyper bien trouvé comme idée mais je savais pas ,au départ, qu'on pouvai parcourir directement une chaine de caractères sans passer par un tableau.
 
- $k=1 car je veux afficher la 1ere lettre du mot et donc ne pas tout cacher dès le début.
 
- la je vois pas trop pourquoi il ne le sera jamais. dans l'état actuel des choses, c'est vrai puisque j'arrive pas a modifier tous les "*" par les bonnes lettres.
 
- si je comprend bien j'envoi en paramètres $Mjeu & $choix ?
 
en tout cas merci à vous 2 pour votre aide.

Reply

Marsh Posté le 18-12-2005 à 17:22:00    

bon je n'arrive toujours pas à résoudre mon problème:
je vous met mes dernières modifications de mes script:
 
pendu.php------------------------

Code :
  1. <?php
  2.         //on déclare les lettres de l'aphabet utilisées pour le pendu
  3. $lettres="abcdefghijklmnopqrstwxyz";
  4.         //on éclate la chaine dans un tableau $tabL
  5. $tabL = preg_split('//', $lettres, -1, PREG_SPLIT_NO_EMPTY);
  6. $tailleTab1=count($tabL);
  7. $erreur=0;
  8. include_once('init.inc');
  9. if($Mjeu!==$mot){
  10.  for($i=1; $i<strlen($mot); $i++){
  11.   if ($choix==$mot{$i}){
  12.    $Mjeu{$i}=$choix;
  13.   }
  14.  }
  15. }
  16. else {
  17. echo "t'es un champion";
  18. }
  19. ?>
  20. <html>
  21. <title>penduGame</title>
  22. <body>
  23.  <br><br>
  24.  <?
  25.   echo $Mjeu;
  26.   echo "<br>";
  27.   for($j=0; $j<=$tailleTab1; $j++){
  28.    echo "<a href=\"$PHP_SELF?choix=$tabL[$j]\">$tabL[$j]</a>"." ";
  29.   }
  30.  ?>
  31. </body></html>


 
init.inc--------------------

Code :
  1. <?php
  2. $mot="bonjour";
  3. $Mjeu=$mot;
  4. for($k=1; $k<strlen($mot); $k++){
  5.  $Mjeu{$k}="*";
  6. }
  7. ?>


j'ai séparé l'initialisation du mot dans un autre script pour éviter à la page de recharger l'état inital de $mot mais ça ne change rien. j'ai testé avec des variables de sessions mais ça ne foncitonne pas non plus( en tout cas je n'y arrive pas)
j'ai toujours le meme problème. quand je clic qur un autre choix, ça ne garde pas en mémoire les vlaeurs de $mot précédantes.


Message édité par ephagor le 18-12-2005 à 17:24:13
Reply

Marsh Posté le 18-12-2005 à 20:42:15    

en fait j'avai déjà pensé à stocker l'état actuel du mot en le passant par le lien mais ça ne marchait pas mais je viens de trouver.
en fait la variable qui stocke l'état du mot s'appelle $hist:
je met le code du lien d ela façon suivante:
 

Code :
  1. echo "<a href=\"$PHP_SELF?hist=$Mjeu&choix=$tabL[$j]\">$tabL[$j]</a>"." ";


 
dnas mon script je rajoute la ligne $Mjeu=$hist juste apres le include_once('init.inc')

Code :
  1. $lettres="abcdefghijklmnopqrstuwxyz";//on déclare les lettres de l'aphabet utilisées pour le pendu
  2.     $tabL = preg_split('//', $lettres, -1, PREG_SPLIT_NO_EMPTY);
  3.     $tailleTab1=count($tabL);
  4.     $erreur=0;
  5.     echo $hist;
  6.     include_once('init.inc');
  7.     $Mjeu=$hist;
  8.     if($Mjeu!==$mot){
  9.         for($i=1; $i<strlen($mot); $i++){
  10.             if ($choix==$mot{$i}){
  11.                 $Mjeu{$i}=$choix;
  12.             }
  13.         }
  14.     }


de cette façon la variable $hist sert de stockage temporaire et $Mjeu va récuperer cette valeur.
apparemment ça à l'air de marcher donc c'est parfait.
en tout cas merci de votre aide.

Reply

Marsh Posté le 18-12-2005 à 20:42:15   

Reply

Marsh Posté le 18-12-2005 à 21:35:15    

bon finalement on retombe sur le meme problème. puisque le fait de faire "$Mjeu=$hist" apres le init.inc, annule completement le contenu de init.inc donc l'affichage au départ du mot caché + l'initialisation de $Mjeu puisque $hist n'est pas initialisé également.

Reply

Marsh Posté le 19-12-2005 à 10:52:16    

un p'ti up pour savoir si quelqu'un peut m'aider.
en fait j'ai plus ou moins cerné le problème. suivant la position de init.inc, $Mjeu n'as pas la meme valeur. avant le init, $Mjeu prend la valeur passé en paramètre lors d'un choix précédent. juste apres init, $Mjeu reprend ses valeurs initiales (ici b******) et apres le script de calcul, $Mjeu prend comme valeur le choix qu'on vient juste de passer en paramètre.
Donc le problème vient plus ou moins du init.inc qui remet les valeurs de $Mjeu à l'initiale. il faudrait trouver un moyen pour que le init.inc n'intervienne qu'une suele fois au départ mais je ne trouve pas la solution
donc si quelqu'un à une idée, ça m'aiderai beaucoup.

Reply

Marsh Posté le 19-12-2005 à 11:15:53    

premiere reponse:

Citation :

stock les lettres déjà proposées dans un champ caché.
 
quand on clique sur le lien d'une lettre, tu ajoutes la lettre à cette liste, puis du parcours la liste caractère par caractère pour démasquer les lettres trouvées, et recompter les coups rattés.


 
tu ne peut pas te fier sur une variable initialiser dans ton script PHP puis qu'elle est initialisé a chaque appel de ta page PHP, il faut lui envoyer en parametre ($_cookie $_session $_post ou $_get) tous ce qui est suceptible de noter l'evolution du jeu (l'array des lettres deja proposé, ton mot, et le personnage du pendu (ou le score) quoique avec un peu de jugeotte on peut deduire certaine valeur en fonction d'autres ;) )


---------------
D3
Reply

Marsh Posté le 19-12-2005 à 18:57:25    

bon j'ai finalement réussi à résoudre mon problème.  
en fait, j'ai mis un if (!isset($Mjeu)){} qui englobe mon fichier init.inc, comme ça $Mjeu ne s'initialise qu'une suele fois au départ et donc la page en se recharge plus à chaque fois avec les valeurs initiales de $Mjeu et peux donc garder en mémoire via l'url les anciennes valeurs de choix.
Merci en tout cas de m'avoir aidé.

Reply

Marsh Posté le 19-12-2005 à 23:41:19    

T'ain comment j'en ai chié pour le faire en C# :o
 
M'enfin ça marche :D
 
Reste plus qu'à ajouter le plus gros, c'est à dire l'ajout de mots, et surtout, le mode AI, où c'est le PC qui cherche le mot :)
 
http://magicweb.manga-torii.com/magicpendu
 
Sources :
http://magicweb.manga-torii.com/magicpendu/source.zip
 
PS: Si vous savez comment faire plus gore niveau code, appelez-moi, parce que là, c'est édifiant :ouch: :D


Message édité par Arjuna le 19-12-2005 à 23:42:29
Reply

Marsh Posté le 20-12-2005 à 08:58:16    

Vous aussi vous avez ça comme message ?
 

Citation :


Server Application Unavailable  
The web application you are attempting to access on this web server is currently unavailable.  Please hit the "Refresh" button in your web browser to retry your request.  
 
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.  


 
C'est chelou, en local ça marche :spamafote:
 
De quoi ça peut venir encore ? :o T'ain, .NET 2.0 c'est vraiment de la merde. Depuis que je l'ai mis, y'a plus un seul de mes sites 1.1 qui marche, et en plus de ça, les 2.0 marchent pas non plus :o

Reply

Marsh Posté le 20-12-2005 à 09:22:49    

je viens de tester et il marche chez moi :)

Reply

Marsh Posté le 21-12-2005 à 09:02:28    

Maintenant, il marche plus, j'ai fait le ménage sur mon serveurhier soir :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed