Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1711 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  problème jeu du pendu en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème jeu du pendu en PHP

n°1268698
ephagor
Posté le 16-12-2005 à 18:58:56  profilanswer
 

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

mood
Publicité
Posté le 16-12-2005 à 18:58:56  profilanswer
 

n°1268725
Arjuna
Aircraft Ident.: F-MBSD
Posté le 16-12-2005 à 19:43:39  profilanswer
 

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.

n°1268727
Arjuna
Aircraft Ident.: F-MBSD
Posté le 16-12-2005 à 19:44:33  profilanswer
 

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
n°1268740
ephagor
Posté le 16-12-2005 à 20:06:52  profilanswer
 

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.

n°1268921
ephagor
Posté le 17-12-2005 à 13:34:58  profilanswer
 

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

n°1268950
Arjuna
Aircraft Ident.: F-MBSD
Posté le 17-12-2005 à 15:21:41  profilanswer
 

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...

n°1268951
soju
One shot !
Posté le 17-12-2005 à 15:24:14  profilanswer
 

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..

n°1269088
ephagor
Posté le 17-12-2005 à 19:42:19  profilanswer
 

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.

n°1269536
ephagor
Posté le 18-12-2005 à 17:22:00  profilanswer
 

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
n°1269603
ephagor
Posté le 18-12-2005 à 20:42:15  profilanswer
 

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.

mood
Publicité
Posté le 18-12-2005 à 20:42:15  profilanswer
 

n°1269611
ephagor
Posté le 18-12-2005 à 21:35:15  profilanswer
 

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.

n°1269766
ephagor
Posté le 19-12-2005 à 10:52:16  profilanswer
 

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.

n°1269788
mechkurt
Posté le 19-12-2005 à 11:15:53  profilanswer
 

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
n°1270179
ephagor
Posté le 19-12-2005 à 18:57:25  profilanswer
 

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é.

n°1270380
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-12-2005 à 23:41:19  profilanswer
 

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
n°1270453
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-12-2005 à 08:58:16  profilanswer
 

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

n°1270466
blueteen
Posté le 20-12-2005 à 09:22:49  profilanswer
 

je viens de tester et il marche chez moi :)

n°1271035
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-12-2005 à 09:02:28  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  problème jeu du pendu en PHP

 

Sujets relatifs
[PHP] MatriceProbleme avec les sessions sur IIS6
Probleme de centrageProblème de t=remplace_tag
[css] problème de padding sous firefox[RESOLU] Problème avec un IF imbriqué dans une boucle FOR
Problème avec l'installation d'un wiki[Heeelp] PHP en ligne de commande
Ptite question PHP // Facile pour les pros[PHP] Pendu probleme..
Plus de sujets relatifs à : problème jeu du pendu en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR