Bonjour, c'est la premiere fois que je demande votre aide pour l'un de mes petit project.
Voila je me suis dit que j'allais réalisé mario sokoban comme dans le cours C sur le site du zero.
► Afficher le texteLe principe du jeu
Vous dirigez un petit personnage (avec les fleches directionnel du clavier par exemple) et vous devez pousser des caisses sur des "interrupteurs". Une fois que tout les interrupteurs sont recouvert d'une caisse, vous avez gagné.
J'ai donc représenté mario par un carré rouge de 20pixel, les cases "blocantes" par un carré noir et les cases vide par un carré blanc (je n'ai donc pas encore créer les caisses). Mais voila que j'ai un probléme pour effectuer le deplacement de Mario. En effet, lorsque j'apppuie avec répetition sur la fléche du haut et celle de droite, le carré rouge (mario) ce déplace en diagonale (en réalité : une fois à droite puis une fois vers le haut). Seulement parfois le carré rouge ce démultiplie voici un petit apercu :

Ps : Cet effet peut etre reproduit en appuyant sur une fleche du haut ou du bas ET une fleche de gauche ou de droite simultanément. Il arrive parfois en passant autour d'un carré rouge démultiplié que la case rouge redevienne blanche mais reste toujours bloqué au passage de mario (le vrai :p)
Voici mon code :
► Afficher le texteMario Sokoban
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
HotKeySet("{UP}", "_haut")
HotKeySet("{DOWN}", "_bas")
HotKeySet("{LEFT}", "_gauche")
HotKeySet("{RIGHT}", "_droite")
$Form1 = GUICreate("Form1", 240, 240)
GUISetState(@SW_SHOW)
Dim $Array_Case[2][145]
Dim $Array_Pos[2]
$Array_Pos[0] = 0
$Array_Pos[1] = 0
$Position = 131
$Nb_Ligne = 0
$Ligne_Type = "Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Null/Bloc/Bloc/Null/Null/Null/Null/Null/Null/Null/Null/Null/Mario/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/Bloc/"
$Array_Type = StringSplit($Ligne_Type, "/")
For $Nombre = 1 To 144
$Array_Case[0][$Nombre] = $Array_Type[$Nombre]
If $Array_Case[0][$Nombre] = "Mario" Then
$Picture = GUICtrlCreatePic("C:\Users\Franck\Desktop\Sans titre.jpg", $Array_Pos[0], $Array_Pos[1], 20, 20)
$Array_Case[1][$Nombre] = $Picture
EndIf
If $Array_Case[0][$Nombre] = "Bloc" Then
$Picture = GUICtrlCreatePic("C:\Users\Franck\Desktop\Sans titre2.jpg", $Array_Pos[0], $Array_Pos[1], 20, 20)
$Array_Case[1][$Nombre] = $Picture
EndIf
If $Array_Case[0][$Nombre] = "Null" Then
$Picture = GUICtrlCreatePic("C:\Users\Franck\Desktop\Sans titre3.jpg", $Array_Pos[0], $Array_Pos[1], 20, 20)
$Array_Case[1][$Nombre] = $Picture
EndIf
If Int($Nombre / 12) > $Nb_Ligne Then
$Nb_Ligne = $Nb_Ligne + 1
$Array_Pos[0] = 0
$Array_Pos[1] = $Array_Pos[1] + 20
Else
$Array_Pos[0] = $Array_Pos[0] + 20
EndIf
Next
While 1
sleep(500)
WEnd
Func _haut()
If $Array_Case[0][$Position - 12] = "Null" Then
$Array_Case[0][$Position] = "Null"
GUICtrlSetImage($Array_Case[1][$Position], "C:\Users\Franck\Desktop\Sans titre3.jpg")
$Array_Case[0][$Position - 12] = "Mario"
GUICtrlSetImage($Array_Case[1][$Position - 12], "C:\Users\Franck\Desktop\Sans titre.jpg")
$Position = $Position - 12
EndIf
EndFunc
Func _bas()
If $Array_Case[0][$Position + 12] = "Null" Then
$Array_Case[0][$Position] = "Null"
GUICtrlSetImage($Array_Case[1][$Position], "C:\Users\Franck\Desktop\Sans titre3.jpg")
$Array_Case[0][$Position + 12] = "Mario"
GUICtrlSetImage($Array_Case[1][$Position + 12], "C:\Users\Franck\Desktop\Sans titre.jpg")
$Position = $Position + 12
EndIf
EndFunc
Func _gauche()
If $Array_Case[0][$Position - 1] = "Null" Then
$Array_Case[0][$Position] = "Null"
GUICtrlSetImage($Array_Case[1][$Position], "C:\Users\Franck\Desktop\Sans titre3.jpg")
$Array_Case[0][$Position - 1] = "Mario"
GUICtrlSetImage($Array_Case[1][$Position - 1], "C:\Users\Franck\Desktop\Sans titre.jpg")
$Position = $Position - 1
EndIf
EndFunc
Func _droite()
If $Array_Case[0][$Position + 1] = "Null" Then
$Array_Case[0][$Position] = "Null"
GUICtrlSetImage($Array_Case[1][$Position], "C:\Users\Franck\Desktop\Sans titre3.jpg")
$Array_Case[0][$Position + 1] = "Mario"
GUICtrlSetImage($Array_Case[1][$Position + 1], "C:\Users\Franck\Desktop\Sans titre.jpg")
$Position = $Position + 1
EndIf
EndFunc
Aurriez-vous une idée, car je ne vois pas du tout d'ou vien le probleme x)
Navré pour les fautes d'orthographe.
Merci de votre aide !