Page 1 sur 1
[R] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 05:15
par timano
Bonjour ,
Aujourd'hui je voulais écrire un émail anglais , et quand j'ai changé le clavier j'avais des problèmes avec le nouveau clavier avec le changement d'emplacement des touches ..
alors je voudrais bien faire un petit script comme un jeu qui m'aide à maitrisé le nouveau clavier , alors l'idée est très simple ..
des lettres qui tombent du ciel et ne doivent pas touchés les carreaux en rouge
moi quand je clic au clavier sur une lettre elle disparait
sinon si cette lettre touches un carreau il devient gris
et si tout les carreaux sont devenue gris alors "game over"
et le passage d'un niveau à un autre augmentera la vitesse et le nombres des lettres qui tombent
alors si c'est possible m'aider à réalisé ce script ça sera gentil de votre part
pour des questions je suis ici ,,
Amicalement .
Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 12:49
par Baku
Bonjour !
Suite à votre demande j'ai réalisé ce script :
► Afficher le texte
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: Warden
#ce ----------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
HotKeySet("{a}","_A")
HotKeySet("{b}","_B")
HotKeySet("{c}","_C")
HotKeySet("{d}","_D")
HotKeySet("{e}","_E")
HotKeySet("{f}","_F")
HotKeySet("{g}","_G")
HotKeySet("{h}","_H")
HotKeySet("{i}","_I")
HotKeySet("{j}","_J")
HotKeySet("{k}","_K")
HotKeySet("{l}","_L")
HotKeySet("{m}","_M")
HotKeySet("{n}","_N")
HotKeySet("{o}","_O")
HotKeySet("{p}","_P")
HotKeySet("{q}","_Q")
HotKeySet("{r}","_R")
HotKeySet("{s}","_S")
HotKeySet("{t}","_T")
HotKeySet("{u}","_U")
HotKeySet("{v}","_V")
HotKeySet("{w}","_W")
HotKeySet("{x}","_X")
HotKeySet("{y}","_Y")
HotKeySet("{z}","_Z")
Opt("GUIOnEventMode", 1)
Local $y[27], $Label[27], $xLettre = 195
#region ------------------------------------------------------------------------
#region GUI :
#endregion ---------------------------------------------------------------------
Local $wWidth = 400, $wHeight = 500
Local $vitesse = 20, $vies = 5, $points = 0
Local $add = 10, $remove = 10
$Fenetre = GUICreate("Entrainement à la frappe", $wWidth, $wHeight)
$Score = GUICtrlCreateLabel("Score : " & @CRLF & $points, 8, 8)
$ViesRest = GUICtrlCreateLabel("Vies restantes : " & @CRLF & $vies, 8, 36)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
GUISetState(@SW_SHOW)
#region ------------------------------------------------------------------------
#region Script :
#endregion ---------------------------------------------------------------------
AdlibRegister("_AleaLettre", 1000)
_AleaLettre()
While 1
For $i = 1 to 26
If $Label[$i] <> "" Then
$y[$i] = $y[$i] + $vitesse
If $y[$i] > $wHeight Then
GUICtrlDelete($Label[$i])
$Label[$i] = ""
$y[$i] = ""
ConsoleWrite("Vie -1" & @CRLF)
$vies = $vies - 1
Else
GUICtrlSetPos($Label[$i],$xLettre,$y[$i])
EndIf
EndIf
Next
Sleep(100)
GUICtrlSetData($Score,"Score : " & @CRLF & $points)
GUICtrlSetData($ViesRest,"Vies restantes : " & @CRLF & $vies)
If $vies = 0 Then
MsgBox(0,"Partie Terminée","Vous avez perdu."&@CRLF&"Vous avez un score de : "&$points&"points.")
Exit
EndIf
WEnd
#region ------------------------------------------------------------------------
#region Fonctions :
#endregion ---------------------------------------------------------------------
Func _Close()
Exit
EndFunc
Func _AleaLettre()
$lRand = Round(Random(1,26))
$Label[$lRand] = GUICtrlCreateLabel(_Nouvelle($lRand),$xLettre,$y[$lRand])
EndFunc
Func _Nouvelle($lettre)
Switch $lettre
Case 1
Return "A"
Case 2
Return "B"
Case 3
Return "C"
Case 4
Return "D"
Case 5
Return "E"
Case 6
Return "F"
Case 7
Return "G"
Case 8
Return "H"
Case 9
Return "I"
Case 10
Return "J"
Case 11
Return "K"
Case 12
Return "L"
Case 13
Return "M"
Case 14
Return "N"
Case 15
Return "O"
Case 16
Return "P"
Case 17
Return "Q"
Case 18
Return "R"
Case 19
Return "S"
Case 20
Return "T"
Case 21
Return "U"
Case 22
Return "V"
Case 23
Return "W"
Case 24
Return "X"
Case 25
Return "Y"
Case 26
Return "Z"
EndSwitch
EndFunc
Func _A()
If $Label[1] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[1])
$Label[1] = ""
$y[1] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _B()
If $Label[2] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[2])
$Label[2] = ""
$y[2] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _C()
If $Label[3] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[3])
$Label[3] = ""
$y[3] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _D()
If $Label[4] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[4])
$Label[4] = ""
$y[4] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _E()
If $Label[5] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[5])
$Label[5] = ""
$y[5] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _F()
If $Label[6] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[6])
$Label[6] = ""
$y[6] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _G()
If $Label[7] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[7])
$Label[7] = ""
$y[7] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _H()
If $Label[8] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[8])
$Label[8] = ""
$y[8] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _I()
If $Label[9] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[9])
$Label[9] = ""
$y[9] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _J()
If $Label[10] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[10])
$Label[10] = ""
$y[10] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _K()
If $Label[11] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[11])
$Label[11] = ""
$y[11] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _L()
If $Label[12] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[12])
$Label[12] = ""
$y[12] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _M()
If $Label[13] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[13])
$Label[13] = ""
$y[13] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _N()
If $Label[14] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[14])
$Label[14] = ""
$y[14] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _O()
If $Label[15] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[15])
$Label[15] = ""
$y[15] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _P()
If $Label[16] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[16])
$Label[16] = ""
$y[16] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _Q()
If $Label[17] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[17])
$Label[17] = ""
$y[17] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _R()
If $Label[18] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[18])
$Label[18] = ""
$y[18] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _S()
If $Label[19] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[19])
$Label[19] = ""
$y[19] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _T()
If $Label[20] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[20])
$Label[20] = ""
$y[20] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _U()
If $Label[21] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[21])
$Label[21] = ""
$y[21] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _V()
If $Label[22] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[22])
$Label[22] = ""
$y[22] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _W()
If $Label[23] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[23])
$Label[23] = ""
$y[23] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _X()
If $Label[24] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[24])
$Label[24] = ""
$y[24] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _Y()
If $Label[25] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[25])
$Label[25] = ""
$y[25] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Func _Z()
If $Label[26] <> "" Then
ConsoleWrite("Points +1" & @CRLF)
$points = $points + $add
GUICtrlDelete($Label[26])
$Label[26] = ""
$y[26] = ""
Else
ConsoleWrite("Points -1" & @CRLF)
$points = $points - $remove
EndIf
EndFunc
Il reste des améliorations à faire, du genre : définir une position x aléatoire pour chaque lettre, changements de niveaux...
Et j'ai changé l'idée des cases en bas par des vies, beaucoup plus simple pour le même résultat
Certaines valeurs peuvent être modifiées pour modifier le gameplay :
- Ligne 47 : Vitesse, vies.
- Ligne 48 : nombre de points à ajouter quand on réussit, nombres de points à enlever quand on se trompe de touche
- Ligne 60 : AdlibRegister => la valeur 1000 correspond au nombre de millisecondes avant que la prochaine lettre apparaisse (EX : 1000 => une lettre apparait toutes les secondes)
Voilà

Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 12:54
par TommyDDR
Prenez l'habitude de ne plus utiliser HotKeySet (ou alors pour du debug)
1) Votre touche ne sera plus accessible nul part ailleurs
2) Si vous appuyez sur "r" puis "t" (en relâchant un peu trop tard "r") alors aucun HotKeySet ne s'activera car par de HotKeySet("rt", xxx) n'a été défini.
-> Regardez du coté de _IsPressed()
Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 13:03
par Baku
Je sais et j'y ai pensé, mais je trouve plus lourd à utiliser "_isPressed()" (que j'utilise souvent), et pour ce genre d'application, j'ai estimé que hotkeyset suffisait amplement

Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 13:05
par TommyDDR
oui mais pour une application où il faut taper vite, il est évident que vous n'allez pas appuyer sur UNE SEULE touche à la fois (voir mon "2)") Donc il y aura des moments où le programme ne prendra pas certaines touches.
Sauf si vous "jouez" à un doigt.. ^^'
Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 13:14
par Baku
Les lettres ne défilent pas à toute vitesse, non plus, c'est pour s'entrainer à connaitre son clavier, pas taper 200mots à la minute

Re: [..] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 14:35
par timano
merci beaucoup à Baku
je vais bien lire le code source pour apprendre les instructions
merci encore
Re: [R] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 15:36
par Iste
Sinon, vous pouvez utiliser les GUISetAccelerators a la place des hotkey.
Les hotkey n'ont pas de sens si elles ne sont utilisées que sur la gui du programme..
Re: [R] Un script pour maitriser l'emplacement des touches
Posté : sam. 17 sept. 2011 22:06
par mikell
Ouala

Pour faire des niveaux de difficulté il suffit de modifier les 2 réglages
remarque : il n'y a jamais la même lettre affichée 2 fois (c'est plus sympa)
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Misc.au3>
Global $key, $win = -1, $lost = 0
Dim $labels[1]
Global $string = "azertyuiopqsdfghjklmwxcvbn"
;======REGLAGES============
Global $vitesse_creation_lettres = 1000
Global $vitesse_descente = 500
;===========================
$gui = GUICreate("My GUI", -1, -1, 400, 400)
GUISetBkColor(0xffffff)
GUISetFont(12, 600, 0, "Tahoma")
GUICtrlCreateLabel ("", 0, 330, 400, 4)
GUICtrlSetBkColor(-1, 0xff0000)
GUICtrlCreateLabel ("SCORE", 20, 340, 80, 20)
GUICtrlCreateLabel ("gagnés :", 120, 340, 70, 20)
$winlabel = GUICtrlCreateLabel ("", 200, 340, 30, 20)
GUICtrlCreateLabel ("perdus :", 260, 340, 70, 20)
$lostlabel = GUICtrlCreateLabel ("0", 340, 340, 30, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUISetState()
New_Lettre()
AdLibRegister("New_Lettre", $vitesse_creation_lettres)
$begin = TimerInit()
While 1
If _IsPressed("41") Then $key = "a"
If _IsPressed("42") Then $key = "b"
If _IsPressed("43") Then $key = "c"
If _IsPressed("44") Then $key = "d"
If _IsPressed("45") Then $key = "e"
If _IsPressed("46") Then $key = "f"
If _IsPressed("47") Then $key = "g"
If _IsPressed("48") Then $key = "h"
If _IsPressed("49") Then $key = "i"
If _IsPressed("4A") Then $key = "j"
If _IsPressed("4B") Then $key = "k"
If _IsPressed("4C") Then $key = "l"
If _IsPressed("4D") Then $key = "m"
If _IsPressed("4E") Then $key = "n"
If _IsPressed("4F") Then $key = "o"
If _IsPressed("50") Then $key = "p"
If _IsPressed("51") Then $key = "q"
If _IsPressed("52") Then $key = "r"
If _IsPressed("53") Then $key = "s"
If _IsPressed("54") Then $key = "t"
If _IsPressed("55") Then $key = "u"
If _IsPressed("56") Then $key = "v"
If _IsPressed("57") Then $key = "w"
If _IsPressed("58") Then $key = "x"
If _IsPressed("59") Then $key = "y"
If _IsPressed("5A") Then $key = "z"
If NOT StringInStr($string, $key) Then
For $i = 0 to UBound($labels)-2
If GuiCtrlRead($labels[$i]) = $key Then
GuiCtrlDelete($labels[$i])
_ArrayDelete($labels, $i)
$string &= $key
$win += 1
GuiCtrlSetData($winlabel, $win)
EndIf
Next
EndIf
If TimerDiff($begin)>$vitesse_descente Then
For $i = 0 to UBound($labels)-2
$pos = ControlGetPos ($gui, "", $labels[$i])
If $pos[1]>260 Then
GUICtrlSetBkColor($labels[$i], 0xff9999)
EndIf
If $pos[1]>280 Then
GUICtrlSetBkColor($labels[$i], 0xff2222)
EndIf
If $pos[1]>290 Then
$string &= GuiCtrlRead($labels[$i])
GUICtrlSetBkColor($labels[$i], 0xff0000)
GuiCtrlDelete($labels[$i])
_ArrayDelete($labels, $i)
$lost += 1
GuiCtrlSetData($lostlabel, $lost)
Else
GUICtrlSetPos($labels[$i], $pos[0], $pos[1]+20)
EndIf
Next
$begin = TimerInit()
EndIf
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func New_Lettre()
$char = StringSplit($string, "")
$lettre = $char[Random(1, $char[0]-1, 1)]
$xpos = Random(1, 18, 1)*20
$new = GUICtrlCreateLabel ($lettre, $xpos, 10, 20, 20, 1) ; $SS_CENTER = 0x1
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
_ArrayAdd($labels, $new)
$string = StringReplace($string, $lettre, "")
EndFunc
Re: [R] Un script pour maitriser l'emplacement des touches
Posté : dim. 18 sept. 2011 17:45
par Baku
Géant Mikell, bien plus simple et plus joli que le mien !

Et merci pour le conseil Iste, j'vais me renseigner sur ces fonctions ^^
Re: [R] Un script pour maitriser l'emplacement des touches
Posté : lun. 19 sept. 2011 10:28
par mikell
Baku a écrit :Géant Mikell, bien plus simple et plus joli que le mien !

Et merci pour le conseil Iste, j'vais me renseigner sur ces fonctions ^^
Plus compact oui, plus simple c'est pas sûr...

Pour les fonctions :
HotKeySet => attribue une hotkey à une fonction mais sans se limiter à la gui (j'essaie d'utiliser le moins possible)
GUISetAccelerators => c'est sympa, ça attribue une hotkey à un controle donc souvent on crée avec un controle 'bidon' (un bouton invisible...) qui commande une fonction avec des instructions
If _IsPressed() Then... => si la touche est pressée ça envoie directement les instructions (là c'était le plus simple)
Re: [R] Un script pour maitriser l'emplacement des touches
Posté : lun. 19 sept. 2011 12:26
par Iste
mikell a écrit :c'est sympa, ça attribue une hotkey à un controle donc souvent on crée avec un controle 'bidon' (un bouton invisible...) qui commande une fonction avec des instructions
GUICtrlCreateDummy()
