[AutoIt] Mr. Square

Voir le sujet précédent Voir le sujet suivant Aller en bas

Normal [AutoIt] Mr. Square

Message par M.Pong le Jeu 3 Déc 2015 - 10:11

Hello  Very Happy

Aujourd'hui j'ai découvert un jeu de logique sur iPhone, Mr. Square:



J'ai donc décider de réaliser un clone du jeu, sur PC.
Et c'est une réussite  cheers

Le but du jeu est de remplir toute les cases, en vous déplaçant à l'aide des flèches directionnelles. (R pour relancer le niveau, ECHAP pour quitter)
Vous pouvez également créer/éditer vos niveau avec le Bloc-Note, puis enregistrer sous la forme [N°Niveau].txt :


Code:
. = Vide
X = Joueur
# = Mur

Exemple - Niveau 16 (16.txt):

32 <- La dimension en pixel d'une case (Pas obligé que ce soit 32). C'est la première ligne à mettre !
....
..X.
....
.X..
....
..#.


Comme vous le voyez, comme dans le jeu original, on peut contrôler plusieurs joueur !
Les 21 premiers niveaux du jeu original sont jouables Wink

Code Source:

Spoiler:

Code:

#Include <File.Au3>
#Include <Misc.Au3>
#Include <GUIConstants.Au3>
#Include <GUIConstantsEx.Au3>
#Include <WindowsConstants.Au3>
HotKeySet("{ESC}", _Quitter)
Global $Niveau = 1
_ChargerNiveau(".\Niveaux\" & $Niveau & ".txt")
Func _ChargerNiveau($1)
   Global $Taille_Case = FileReadLine($1, 1)
   Global $Nb_Ligne = 0
   For $I = 3 To _FileCountLines($1)
   $Nb_Ligne+=1
   Next
   Global $Case = StringSplit(FileReadLine($1, 3), "")
   Global $X = 3
   Global $Y = 3
   Global $Vitesse = 80
   Global $Case_X = 3
   Global $Case_Y = 3
   Global $Nb_Case_Libre = 0
   Global $Largeur = $Case[0]*$Taille_Case+(3*$Case[0])+3
   Global $Hauteur = $Nb_Ligne*$Taille_Case+(3*$Nb_Ligne)+3
   Global $Nb_Joueur = 0
   Global $GUI = GUICreate("Niveau " & $Niveau, $Largeur, $Hauteur, (@DesktopWidth-$Largeur)/2, (@DesktopHeight-$Hauteur)/2)
   GUISetState(@SW_SHOW, $GUI)
   For $I = 3 To _FileCountLines($1)
   Global $Case = StringSplit(FileReadLine($1, $I), "")
   For $J = 1 To $Case[0]
   If $Case[$J] = "X" Then
   $Nb_Joueur+=1
   Assign("Case_" & $Case_X & "_" & $Case_Y & "_Type", "Joueur", 2)
   Assign("Joueur_" & $Nb_Joueur & "_X", $Case_X, 2)
   Assign("Joueur_" & $Nb_Joueur & "_Y", $Case_Y, 2)
   EndIf
   If $Case[$J] = "." Then
   $Nb_Case_Libre+=1
   Assign("Case_" & $Case_X & "_" & $Case_Y & "_Type", "Libre", 2)
   EndIf
   If $Case[$J] = "#" Then Assign("Case_" & $Case_X & "_" & $Case_Y & "_Type", "Mur", 2)
   Assign("Case_" & $Case_X & "_" & $Case_Y, GUICtrlCreateLabel("", $X, $Y, $Taille_Case, $Taille_Case), 2)
   If Eval("Case_" & $Case_X & "_" & $Case_Y & "_Type") = "Libre" Then GUICtrlSetBkColor(Eval("Case_" & $Case_X & "_" & $Case_Y), "0xC0C0C0")
   If Eval("Case_" & $Case_X & "_" & $Case_Y & "_Type") = "Joueur" Then GUICtrlSetBkColor(Eval("Case_" & $Case_X & "_" & $Case_Y), "0x970000")
   If Eval("Case_" & $Case_X & "_" & $Case_Y & "_Type") = "Mur" Then GUICtrlSetBkColor(Eval("Case_" & $Case_X & "_" & $Case_Y), "0x404040")
   $X+=$Taille_Case+3
   $Case_X+=1
   Next
   $Y+=$Taille_Case+3
   $Case_Y+=1
   Global $Case_X = 3
   Global $X = 3
   Next
   While $Nb_Case_Libre <> 0
   If _IsPressed("25") Then _Gauche()
   If _IsPressed("27") Then _Droite()
   If _IsPressed("26") Then _Haut()
   If _IsPressed("28") Then _Bas()
   If _IsPressed("52") Then
   GUIDelete()
   _ChargerNiveau(".\Niveaux\" & $Niveau & ".txt")
   EndIf
   WEnd
   $Niveau+=1
   If FileExists(".\Niveaux\" & $Niveau & ".txt") Then
   GUIDelete()
   _ChargerNiveau(".\Niveaux\" & $Niveau & ".txt")
   Else
   Exit
   EndIf
EndFunc
Func _Gauche()
   For $I = 1 To $Nb_Joueur
   While Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") <> "Mur"
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Joueur" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Libre" Then
   Assign("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type", "Joueur", 2)
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Joueur" Then
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")), "0xC70000")
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X")-1 & "_" & Eval("Joueur_" & $I & "_Y")), "0x970000")
   EndIf
   Assign("Joueur_" & $I & "_X", Eval("Joueur_" & $I & "_X")-1, 2)
   $Nb_Case_Libre-=1
   Sleep($Vitesse)
   EndIf
   WEnd
   Next
EndFunc
Func _Droite()
   For $I = 1 To $Nb_Joueur
   While Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") <> "Mur"
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Joueur" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Libre" Then
   Assign("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type", "Joueur", 2)
   If Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y") & "_Type") = "Joueur" Then
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")), "0xC70000")
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X")+1 & "_" & Eval("Joueur_" & $I & "_Y")), "0x970000")
   EndIf
   Assign("Joueur_" & $I & "_X", Eval("Joueur_" & $I & "_X")+1, 2)
   $Nb_Case_Libre-=1
   Sleep($Vitesse)
   EndIf
   WEnd
   Next
EndFunc
Func _Haut()
   For $I = 1 To $Nb_Joueur
   While Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type") <> "Mur"
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type") = "" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type") = "Joueur" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type") = "Libre" Then
   Assign("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type", "Joueur", 2)
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1 & "_Type") = "Joueur" Then
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")), "0xC70000")
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")-1), "0x970000")
   EndIf
   Assign("Joueur_" & $I & "_Y", Eval("Joueur_" & $I & "_Y")-1, 2)
   $Nb_Case_Libre-=1
   Sleep($Vitesse)
   EndIf
   WEnd
   Next
EndFunc
Func _Bas()
   For $I = 1 To $Nb_Joueur
   While Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type") <> "Mur"
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type") = "" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type") = "Joueur" Then ExitLoop
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type") = "Libre" Then
   Assign("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type", "Joueur", 2)
   If Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1 & "_Type") = "Joueur" Then
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")), "0xC70000")
      GUICtrlSetBkColor(Eval("Case_" & Eval("Joueur_" & $I & "_X") & "_" & Eval("Joueur_" & $I & "_Y")+1), "0x970000")
   EndIf
   Assign("Joueur_" & $I & "_Y", Eval("Joueur_" & $I & "_Y")+1, 2)
   $Nb_Case_Libre-=1
   Sleep($Vitesse)
   EndIf
   WEnd
   Next
EndFunc

Func _Quitter()
   Exit
EndFunc

Télécharger: Mr. Square.zip

Dans la prochaine version, vous aurez:
- Apparition d'un menu
- Apparition des portails de téléportation

Je vous invites à postez vos niveaux, et pourquoi pas les solutions des niveaux sous la forme:

Code:

*** Solution Niveau 3 ***
HAUT - DROITE - BAS - GAUCHE - BAS - DROITE - HAUT - GAUCHE - BAS

Amusez-vous bien  Very Happy
Dylan
avatar
M.Pong
Petit créateur
Petit créateur

Messages : 44
Pourcentage d'avancement : 5%

Voir le profil de l'utilisateur http://www.bbat.forumeiro.com

Revenir en haut Aller en bas

Normal Re: [AutoIt] Mr. Square

Message par esria le Dim 13 Déc 2015 - 17:43

Je viens de tester... J'aime bien et ça marche bien. Il faudrait que j'essaye de créer mon propre niveau.


Mon twitter : esria_francis
avatar
esria
Rédacteur
Rédacteur

Messages : 563

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum