Page 1 sur 1

[..] Pendu

Posté : ven. 09 sept. 2011 09:02
par bromy
Bonjour,

J'essaye a faire un jeu du pendu, seulement, plusieurs choses ne fonctionnent pas et je n'arrive pas a les résoudres.
Voila mon

Voici la liste de mot
Liste de mot.txt
(15.13 Kio) Téléchargé 77 fois
Et le code :
► Afficher le texte
Pouvez vous m'aider ? Voici les quelques problemes que j'ai reperer.
Si le mot fait 5 lettres et que je tape 5 fois une lettre bonne, sa me fais quand meme gagner.
Mon dessin du pendu ne sâffiche que si je reduit et ré affiche la GUI.
Possibilité de bloqué un INPUT a 1 seul lettre ?
Si vous voyer d'autre probleme je veux bien le savoir x)

Merci
Bromy

Re: [..] Pendu

Posté : ven. 09 sept. 2011 10:16
par timmalos
Plusieurs remarques:

-Random, si vous rajoutez le flag 1 vous obtenez un entier, ce qui evite l'utilisation de Floor
-On peut declarer ces variables avec un mot clef, utilisez le ca vous permet d'avoir un script plus lisible. Ici Global va très bien.

-Ensuite, concernant l'ecriture des lettres deja ecrites , vous devez pouvoir TOUT remplacer par juste:

Code : Tout sélectionner

GUICtrlCreateLabel($lettre, 424 + Mod($NbTotalEssais, 5) * 32, 224 + (Round($NbTotalEssais / 5)) * 32, 20, 20)
            If Not $result Then
                GUICtrlSetColor(-1, 0xFF0000)
            Else
                GUICtrlSetColor(-1, 0x0000FF)
            EndIf
 
(A verifier, fait de tête)

Re: [..] Pendu

Posté : ven. 09 sept. 2011 14:01
par mikell
bromy a écrit :Si le mot fait 5 lettres et que je tape 5 fois une lettre bonne, sa me fais quand meme gagner.
Tu pourrais, à chaque bonne lettre trouvée, redéfinir le mot à tester avec cette lettre en moins
exemple : CHAT, trouvé le A, prochain test sur le mot CHT
bromy a écrit :Mon dessin du pendu ne sâffiche que si je reduit et ré affiche la GUI.

Code : Tout sélectionner

#include <WinAPI.au3>
[color=#008000]et[/color]
 _WinAPI_RedrawWindow($Jeu, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
[color=#008000]après les GUICtrlSetGraphic()[/color]
bromy a écrit :Possibilité de bloqué un INPUT a 1 seul lettre ?

Code : Tout sélectionner

$text = GuiCtrlRead($input)
If StringLen($text)>1 Then GuiCtrlSetData($input, StringLeft($text, 1)
(A verifier, fait de tête) :mrgreen:

Re: [..] Pendu

Posté : ven. 09 sept. 2011 15:40
par pierrotm777
J'avais trouvé cet exemple je ne sais plus trop où ! Je te le livre tel quel !
J'y ai ajouté un script permettant de découper un dictionnaire en trois afin d'obtenir trois niveau de difficultés :D

Re: [..] Pendu

Posté : ven. 09 sept. 2011 19:15
par timmalos
Pour limiter l'input à un charactere, il y a plus simple:

Code : Tout sélectionner

GuiCtrlSetLimit($input,1)

Re: [..] Pendu

Posté : ven. 09 sept. 2011 19:29
par mikell
timmalos a écrit :Pour limiter l'input à un charactere, il y a plus simple:

Code : Tout sélectionner

GuiCtrlSetLimit($input,1)
Image... évidemment...

Re: [..] Pendu

Posté : sam. 10 sept. 2011 23:06
par bromy
Merci a tous, des que je rentre lundi je test tout ça ;)

Re: [..] Pendu

Posté : dim. 11 sept. 2011 14:00
par bromy
Re,

deux autres problemes que je viens de voir,

Dans le mot "etat" par exemple
Si je rentre le "e", sa me met faux, il faut mettre le "é"; comment résoudre ce probleme sans a avoir a enlever tout les accents de ma liste de mots >< ?

Et
Dans le mot frapper par exemple
Il y a 2 p et 2 r,

Donc quand je met p il me met les deux, pareil pour le r, sauf que quand jai trouver le mot, faut que je rajoute encore 2 lettre pour avoir le "bravo, tu as trouver le mot"
Merci d'avance
Bromy

EDIT :

Pour ce qui est de ca :

Code : Tout sélectionner

GUICtrlCreateLabel($lettre, 424 + Mod($NbTotalEssais, 5) * 32, 224 + (Round($NbTotalEssais / 5)) * 32, 20, 20)
            If Not $result Then
                GUICtrlSetColor(-1, 0xFF0000)
            Else
                GUICtrlSetColor(-1, 0x0000FF)
            EndIf
Je suis senser le mettre ou et a la place de quoi ? Pas tout compris

Re: [..] Pendu

Posté : dim. 11 sept. 2011 14:19
par mikell
comment résoudre ce probleme sans a avoir a enlever tout les accents de ma liste de mots
Essaye ce petit script :

Code : Tout sélectionner

#include <Misc.au3>

While 1
    Sleep (100)
    If _IsPressed("32") OR _IsPressed("37") Then   [color=#FF0000]; <= le é ou le è[/color]
    MsgBox(0,"", "en fait ça écrit : e")    [color=#FF0000]; <= ligne à remplacer par : Send("e")[/color]
    ExitLoop
    EndIf
WEnd
a la place de quoi ?
Apparemment, à la place de tout ça :
► Afficher le texte

Re: [..] Pendu

Posté : dim. 11 sept. 2011 14:25
par bromy
Pour le petit script j'ai compris
Mais je trouve pas comment faire pour que quand le joueur tape e, que le e marche aussi pour les é et è du mot a trouver.

Re: [..] Pendu

Posté : dim. 11 sept. 2011 14:35
par mikell
En gros, tu fais une liste de conditions du genre

Code : Tout sélectionner

If StringInStr($motàtrouver, "e") Then
     If _IsPressed("32") OR _IsPressed("37") Then Send("e")
Else If StringInStr($motàtrouver, "é") Then
     If _IsPressed("45") OR _IsPressed("37") Then Send("é")
...etc...
EndIf

Re: [..] Pendu

Posté : dim. 11 sept. 2011 16:52
par bromy
Donc j'ai rajouter sa

Code : Tout sélectionner

 Case $Valider
            
            If StringInStr($mot, "é") Then
            If _IsPressed("45") Then Send("é")
                endif
            If StringInStr($mot, "è") Then
            If _IsPressed("45") Then Send("è")
                endif
 
Je fais un test avec le mot "supérieur"
Je tape "e"; et sa me met sa comme erreur

If _IsPressed("45") Then Send("é")
If ^ ERROR

Edit :
J'ai rajouter sa :

Code : Tout sélectionner

$mot = StringReplace($mot, "é", "e")
Sauf que ducoup les accents n'apparaissent pas dans les lettres trouvés, si je prend un mot comme "pitié", sa donnera "pitie" et le joueur risque de rien comprendre x)

EDIT2 :

Tjr pas compris pour le :

Code : Tout sélectionner

 GUICtrlCreateLabel($lettre, 424 + Mod($NbTotalEssais, 5) * 32, 224 + (Round($NbTotalEssais / 5)) * 32, 20, 20)
            If Not $result Then
                GUICtrlSetColor(-1, 0xFF0000)
            Else
                GUICtrlSetColor(-1, 0x0000FF)
            EndIf
 
:(

Edit3 :

Code : Tout sélectionner

$liste = FileRead("Liste de mot.txt")
$Jeu = GUICreate("Jeu'broms", 200, 200, 200, 200)

$Label1 = GUICtrlCreateInput($liste,10,10,180,180)
GUISetState(@SW_SHOW)
J'aimerais ajouter une parti "Dico", qui s'ouvre quand je clic sur "Edition", puis "Dico"
Comment je peux faire pour que dans mon Input, s'affiche ma liste de mot, avec un mot par ligne, et pas tous a la suite sur une seul ligne :/
Pour par la suite ajouter une fonction Suprimer ou ajouter un mot.

Re: [..] Pendu

Posté : dim. 11 sept. 2011 18:47
par mikell
bromy a écrit :If _IsPressed("45") Then Send("é")
If ^ ERROR
T'aurais pas oublié l'include des fois ?

Code : Tout sélectionner

#include <Misc.au3>
...
If StringInStr($motàtrouver, "é") Then
     If _IsPressed("45") OR _IsPressed("37") Then Send("é") ; <--  [color=#FF0000]45 = e, 37 = è, 32 = é[/color]
Pour ton Dico, je suggère quelques petites recherches sur le forum Image
Autre suggestion : tu essaies de résoudre trop de problèmes à la fois, fais ça progressivement un problème après l'autre, en comprenant bien à chaque fois ce que tu fais et pourquoi tu le fais
Ce que timmalos t'a proposé c'est de l'optimisation, c'est bien mais ce n'est pas indispensable alors garde ça pour la fin quand tu auras solutionné le reste

Re: [..] Pendu

Posté : dim. 11 sept. 2011 19:18
par legend
voici un petit exemple qui fait rien de mal ^^
► Afficher le texte
je vous conseille de faire une fonction qui vérifie si la touche a été préssée et fait toutes ces actions si c'est le cas.
tu passe la touche (lettre) a chaque fois. ça aidera a raccourcir ton code et le rendre plus clair.
ce sera du genre :
► Afficher le texte

Re: [..] Pendu

Posté : dim. 11 sept. 2011 21:04
par bromy
Je m'y perd un peu la x)

Actuellement j'en suis a la
► Afficher le texte
Depuis mon premier message :
- j'ai modifier l'input bloqué a 1 lettre
- ajouter l'heure (pour le fun)
- ajouter le lien vers le dico, mais les mots ne s'affiche tjr pas :x
- ajouter un chrono pour calculer le temps qu)a fait le joueur a trouver le mot ( j'ai je n'arrive toujours pas afficher le chrono sur la GUi :x)
- J'ai toujours pas trouver comment faire pour que je ne soit pas obliger de minimizer; maximizer la GUI pour que le dessin s'affiche
-Toujours pas trouver comment reglé le coup de la saisi de la meme lettre plusieurs fois.

Re: [..] Pendu

Posté : dim. 11 sept. 2011 21:45
par legend
regarde les fonctions _Timer . . .

Code : Tout sélectionner

$init = _Timer_Init ()
sleep (1000)
msgbox (0, "", _Timer_Diff ($init)) ; affichera une valeur proche de 1000ms (le temps passé dans le sleep entre le timerinit et le timerdiff)
 
donc _Timer_Init quand il fait le premier submit et _Timer_Diff quand il finit.

Si tu te perd dans ton propre script!!! comment veut tu qu'on s'y perd pas! :evil: :evil:
Personne ne voudra passer des heures a lire un code non commenté (ce sera comme s'il recode lui même)
je pense que mon exemple marche (juste testé sur la lettre E).
je te conseille de faire plusieurs fonctions avec un nom explicatif.
puis tu met une petite boucle qui ne dépasse pas 30lignes (et non pas 350)
si tu veut qu'on t'aide cherche toi même d'ou vient le problème.

Re: [..] Pendu

Posté : dim. 11 sept. 2011 22:37
par bromy
Ça je l'est déjà fait, je voulais l'afficher sur la gui maintenant, mais j'ai pas trouver x)
Je mis perd pas dans mon code, mais dans toute vos solutions ^^

Re: [..] Pendu

Posté : jeu. 15 sept. 2011 15:31
par bromy
Re,
J'ai un peu avancer mon script, me reste juste le probleme que ma GUI ne s'actualise pas a chaque erreur, et ducoup il faut diminuer/mazimiser la page pour que le trait s'affiche, comment puis je reglé ca ?
merci
Bromy