[..] Pendu

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

[..] Pendu

#1

Message 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
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Pendu

#2

Message 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)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Pendu

#3

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Pendu

#4

Message 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
Fichiers joints
pendu.zip
(9.79 Kio) Téléchargé 78 fois
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Pendu

#5

Message par timmalos »

Pour limiter l'input à un charactere, il y a plus simple:

Code : Tout sélectionner

GuiCtrlSetLimit($input,1)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Pendu

#6

Message 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...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#7

Message par bromy »

Merci a tous, des que je rentre lundi je test tout ça ;)
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#8

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Pendu

#9

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#10

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Pendu

#11

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#12

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Pendu

#13

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Pendu

#14

Message 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
Modifié en dernier par legend le dim. 11 sept. 2011 23:06, modifié 1 fois.
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#15

Message 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.
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Pendu

#16

Message 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.
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#17

Message 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 ^^
bromy
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 sept. 2011 23:07
Status : Hors ligne

Re: [..] Pendu

#18

Message 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
Répondre