Toujours dans ma quête des petits "puzzles games", voici un Taquin très minimaliste. J'y ai ajouter un menu pour le fun (même si ce dernier reste complétement inutile et sommaire)
Comme d'habitude, je l'ai fait avant tout pour m'amuser. Pour jouer, il suffit de déplacer avec les fleches du clavier
Voici le lien pour telecharger le code + les fichiers
et ci-dessous le code seul :
Code : Tout sélectionner
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; + Autor : Venom +
; + Project name : Puzzle Slide +
; + Version : V 1.0 +
; + Compilator : PureBasic V5.72 +
; + Date : 20/08/2020 +
; + OS : Windows 10 +
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Window Constants
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enumeration
#Window_0
EndEnumeration
Enumeration
#Tuile1
#Tuile2
#Tuile3
#Tuile4
#Tuile5
#Tuile6
#Tuile7
#Tuile8
#Curseur
#Button_New_Game
#Button_Quitter
#Button_Win
#Slide
EndEnumeration
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Structures
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Declarations variables
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Global TAILLE_BLOC = 128
Global LARGEUR_FENETRE = TAILLE_BLOC*3, HAUTEUR_FENETRE = TAILLE_BLOC*3
Global CheminImages$ = "GFX\", CheminSons$ = "SFX\"
Global Dim TuileTab(8), Dim Id(8)
Global EtatAffichage = 0
Global OldTuile, NewTuile
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Declarations procedures
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Declare Initialisations()
Declare GameLoad()
Declare AffichageMenu()
Declare AffichageVictoire()
Declare NewGame()
Declare win()
Declare GameUpdate()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Ouverture de la fenetre principale
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
If OpenWindow(#Window_0, 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE, "Puzzle Slide", #PB_Window_TitleBar | #PB_Window_ScreenCentered)
Initialisations() ; initialise les differents environments
If OpenWindowedScreen(WindowID(#Window_0), 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE) ; Ouverture OpenWindowedScreen
GameLoad() ; chargements des sprites
EndIf
EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Boucle
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Repeat
Repeat
Event_Window = WindowEvent()
Select Event_Window
Case #PB_Event_CloseWindow
End
EndSelect
Until Event_Window = 0
ExamineKeyboard()
ExamineMouse()
ClearScreen(RGB(0, 0, 0))
GameUpdate() ; met le jeu a jour
FlipBuffers()
ForEver
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Procedures
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Initialisations()
; Initialisation environnement sprite
If InitSprite() = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
End
EndIf
; Initialisation environnement clavier
If InitKeyboard() = 0
MessageRequester("Erreur", "Impossible d'initialisé le clavier !", 0)
End
EndIf
; Initialisation environnement souris
If InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialisé la souris !", 0)
End
EndIf
; Initialisation environnement son
If InitSound() = 0
MessageRequester("Erreur", "Impossible d'initialisé le son", 0)
End
EndIf
; Activations des supports
UsePNGImageDecoder()
UseOGGSoundDecoder()
EndProcedure
Procedure GameLoad()
; chargement des tuiles
LoadSprite(#Curseur, CheminImages$+"\Tuiles\Curseur.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile1, CheminImages$+"\Tuiles\Tuile1.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile2, CheminImages$+"\Tuiles\Tuile2.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile3, CheminImages$+"\Tuiles\Tuile3.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile4, CheminImages$+"\Tuiles\Tuile4.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile5, CheminImages$+"\Tuiles\Tuile5.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile6, CheminImages$+"\Tuiles\Tuile6.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile7, CheminImages$+"\Tuiles\Tuile7.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Tuile8, CheminImages$+"\Tuiles\Tuile8.png", #PB_Sprite_AlphaBlending)
; chargement des boutons menu
LoadSprite(#Button_New_Game, CheminImages$+"\Menu\Button_New_Game.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Button_Quitter, CheminImages$+"\Menu\Button_Quitter.png", #PB_Sprite_AlphaBlending)
LoadSprite(#Button_Win, CheminImages$+"\Menu\Button_Win.png", #PB_Sprite_AlphaBlending)
; chargement des sons
LoadSound(#Slide, CheminSons$+"slide.ogg", 0)
; remplissage du tableau
For a = 0 To 8
TuileTab(a) = a
Next
EndProcedure
Procedure AffichageMenu()
; affichage des tuiles
DisplayTransparentSprite(#Tuile1, 0, 0)
DisplayTransparentSprite(#Tuile2, 128, 0)
DisplayTransparentSprite(#Tuile3, 256, 0)
DisplayTransparentSprite(#Tuile4, 0, 128)
DisplayTransparentSprite(#Tuile5, 128, 128)
DisplayTransparentSprite(#Tuile6, 256, 128)
DisplayTransparentSprite(#Tuile7, 0, 256)
DisplayTransparentSprite(#Tuile8, 128, 256)
DisplayTransparentSprite(#Curseur, 256, 256)
; affichage des boutons du menu
DisplayTransparentSprite(#Button_New_Game, LARGEUR_FENETRE/2-SpriteWidth(#Button_New_Game)/2, 128-SpriteHeight(#Button_New_Game)/2)
DisplayTransparentSprite(#Button_Quitter, LARGEUR_FENETRE/2-SpriteWidth(#Button_Quitter)/2, 256-SpriteHeight(#Button_Quitter)/2)
; appuie sur la touche espace
If KeyboardReleased(#PB_Key_Space)
RandomizeArray(TuileTab()) ; mélange le tableau avant l'affichage de la nouvelle partie
EtatAffichage = 1 ; si la barre espace est enfoncer dans l'ecran menu, on met EtatAffichage a 1
EndIf
; appuie sur la touche echap
If KeyboardReleased(#PB_Key_Escape)
End
EndIf
EndProcedure
Procedure AffichageVictoire()
; affichage des tuiles
DisplayTransparentSprite(#Tuile1, 0, 0)
DisplayTransparentSprite(#Tuile2, 128, 0)
DisplayTransparentSprite(#Tuile3, 256, 0)
DisplayTransparentSprite(#Tuile4, 0, 128)
DisplayTransparentSprite(#Tuile5, 128, 128)
DisplayTransparentSprite(#Tuile6, 256, 128)
DisplayTransparentSprite(#Tuile7, 0, 256)
DisplayTransparentSprite(#Tuile8, 128, 256)
DisplayTransparentSprite(#Curseur, 256, 256)
; affiche le bouton victoire
DisplayTransparentSprite(#Button_Win, LARGEUR_FENETRE/2-SpriteWidth(#Button_Win)/2, HAUTEUR_FENETRE/2-SpriteHeight(#Button_Win)/2)
; appuie sur la touche echap
If KeyboardReleased(#PB_Key_Escape)
EtatAffichage = 0
EndIf
EndProcedure
Procedure NewGame()
;{ affichage des tuiles mélanger a l'écran
ClearScreen(RGB(0, 0, 0))
For spr = 0 To 8
de = TuileTab(spr)
Select de
Case 0
Id(0)=spr
DisplayTransparentSprite(spr, 0, 0)
Case 1
Id(1)=spr
DisplayTransparentSprite(spr, 128, 0)
Case 2
Id(2)=spr
DisplayTransparentSprite(spr, 256, 0)
Case 3
Id(3)=spr
DisplayTransparentSprite(spr, 0, 128)
Case 4
Id(4)=spr
DisplayTransparentSprite(spr, 128, 128)
Case 5
Id(5)=spr
DisplayTransparentSprite(spr, 256, 128)
Case 6
Id(6)=spr
DisplayTransparentSprite(spr, 0, 256)
Case 7
Id(7)=spr
DisplayTransparentSprite(spr, 128, 256)
Case 8
Id(8)=spr
DisplayTransparentSprite(spr, 256, 256)
EndSelect
Next spr
;}
; appuie sur la touche du haut
If KeyboardReleased(#PB_Key_Up)
If TuileTab(8) > 2 ; verifie si le curseur n'est pas tout en haut de l'ecran
PosDepart = TuileTab(8)
PosArriver = TuileTab(8)-3
Swap TuileTab(Id(PosDepart)), TuileTab(Id(PosArriver)) ; on inverse les tuiles
PlaySound(#Slide, 0, 100) ; joue le son slide
Else ; si non il reste a sa place
TuileTab(8) = TuileTab(8)
EndIf
EndIf
; appuie sur la touche du bas
If KeyboardReleased(#PB_Key_Down)
If TuileTab(8) < 6 ; verifie si le curseur n'est pas tout en bas de l'ecran
PosDepart = TuileTab(8)
PosArriver = TuileTab(8)+3
Swap TuileTab(Id(PosDepart)), TuileTab(Id(PosArriver)) ; on inverse les tuiles
PlaySound(#Slide, 0, 100) ; joue le son slide
If TuileTab(8) = 8 ; si le curseur se trouve sur la case en bas a droite
win() ; on verifie si le puzzle est terminer
EndIf
Else ; si non il reste a sa place
TuileTab(8) = TuileTab(8)
EndIf
EndIf
; appuie sur la touche de gauche
If KeyboardReleased(#PB_Key_Left)
If TuileTab(8) = 0 ; verifie si le curseur est tout a gauche de l'ecran
TuileTab(8) = TuileTab(8)
ElseIf TuileTab(8) = 3
TuileTab(8) = TuileTab(8)
ElseIf TuileTab(8) = 6
TuileTab(8) = TuileTab(8)
Else ; si non il se deplace
PosDepart = TuileTab(8)
PosArriver = TuileTab(8)-1
Swap TuileTab(Id(PosDepart)), TuileTab(Id(PosArriver)) ; on inverse les tuiles
PlaySound(#Slide, 0, 100) ; joue le son slide
EndIf
EndIf
; appuie sur la touche de droite
If KeyboardReleased(#PB_Key_Right)
If TuileTab(8) = 2 ; verifie si le curseur est tout a droite de l'ecran
TuileTab(8) = TuileTab(8)
ElseIf TuileTab(8) = 5
TuileTab(8) = TuileTab(8)
ElseIf TuileTab(8) = 8
TuileTab(8) = TuileTab(8)
Else ; si non il se deplace
PosDepart = TuileTab(8)
PosArriver = TuileTab(8)+1
Swap TuileTab(Id(PosDepart)), TuileTab(Id(PosArriver)) ; on inverse les tuiles
PlaySound(#Slide, 0, 100) ; joue le son slide
If TuileTab(8) = 8 ; si le curseur se trouve sur la case en bas a droite
win() ; on verifie si le puzzle est terminer
EndIf
EndIf
EndIf
; appuie sur la touche echap dans le jeu
If KeyboardReleased(#PB_Key_Escape)
EtatAffichage = 0 ; si la touche echap est enfoncer dans l'ecran jeu, on met EtatAffichage a 0 pour revenir au menu
For a = 0 To 8 ; et on refait un nouveau tableau pour la partie future
TuileTab(a) = a
Next
EndIf
EndProcedure
Procedure win()
If TuileTab(0) = 0 And TuileTab(1) = 1 And TuileTab(2) = 2 And TuileTab(3) = 3 And TuileTab(4) = 4 And TuileTab(5) = 5 And TuileTab(6) = 6 And TuileTab(7) = 7 And TuileTab(8) = 8
EtatAffichage = 2
EndIf
EndProcedure
Procedure GameUpdate()
If EtatAffichage = 0
AffichageMenu()
ElseIf EtatAffichage = 1
NewGame()
ElseIf EtatAffichage = 2
AffichageVictoire()
EndIf
EndProcedure
@++