Puzzle slide

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Puzzle slide

Message par venom »

Bonjour a tous,

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) :lol:

Comme d'habitude, je l'ai fait avant tout pour m'amuser. :wink: 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





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: Puzzle slide

Message par grendizer »

Salut Venom pas mal du tout merci du partage
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

Salut grendizer,

De rien :wink:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Puzzle slide

Message par falsam »

Je ne suis pas assez patient pour aligner correctement tes 9 cases :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Puzzle slide

Message par SPH »

Merci venom pour ce petit jeu. Mais, y a t'il une solution a chaque partie ? (je fini par faire 1-2-3-4-5-6-8-7)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

@falsam

Je comprends :lol: il faut de la patience pour ce genre de jeu. Et il faut aimé :)

@sph
Ça m'arrive aussi :wink: Je n'ai pas la solution ultime malheureusement. Mais je l'ai fini a plusieurs reprises.

Il y a des cerveaux qui vont fumé :D En tout cas, ça a l'air de fonctionner chez vous.







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Puzzle slide

Message par G-Rom »

Simple et efficace , sympa comme petit code ^^
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

Merci G-Rom. Je prend ça pour un compliment 8) :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Puzzle slide

Message par Kwai chang caine »

Joli ce jeu 8)
Bon...étonnant qu'il bloque la souris et il n'y a pas l'icone pour la compilation
Mais il est cool, pour les patients :oops:
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

Kwai chang caine a écrit :Bon...étonnant qu'il bloque la souris et il n'y a pas l'icone pour la compilation
Qu'entend tu par "il n'y a pas l'icône pour la compilation ?







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Demivec
Messages : 90
Inscription : sam. 18/sept./2010 18:13

Re: Puzzle slide

Message par Demivec »

venom a écrit :
Kwai chang caine a écrit :Bon...étonnant qu'il bloque la souris et il n'y a pas l'icone pour la compilation
Qu'entend tu par "il n'y a pas l'icône pour la compilation ?
Les paramètres du compilateur pour "puzzle slide.pb" dans le zip indiquent d'utiliser l'icône "..\ICONS\puzzle slide.ico".
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

Ah !!! :lol:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Puzzle slide

Message par SPH »

Comme promis sur le tchat, voici ma version dont le code est plus petit de 51% !!

Enjoy :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   Code : SPH
;   Graphisme : venom
;   But de ce code : reduire de + de 50% la taille du code de venom =)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire pour ouvrir ce jeu !", 0)
  End
EndIf

Enumeration
  #Curseur
  #Slide
  #Button_New_Game=20
  #Button_Quitter=21
  #Button_Win=22
EndEnumeration

; Activations des supports
UsePNGImageDecoder()
UseOGGSoundDecoder()

Global TAILLE_BLOC = 128
Global LARGEUR_FENETRE = TAILLE_BLOC*3, HAUTEUR_FENETRE = TAILLE_BLOC*3
Global CheminImages$ = "GFX\", CheminSons$ = "SFX\"

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Ouverture de la fenetre principale
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
If OpenWindow(0, 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE, "Puzzle Slide", #PB_Window_TitleBar | #PB_Window_ScreenCentered)
  If OpenWindowedScreen(WindowID(0), 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE) ; Ouverture OpenWindowedScreen
  EndIf         
EndIf 
;;;;
LoadSprite(0, CheminImages$+"\Tuiles\Curseur.png", #PB_Sprite_AlphaBlending)
For i=1 To 8
  LoadSprite(i, CheminImages$+"\Tuiles\Tuile"+Str(i)+".png", #PB_Sprite_AlphaBlending)
Next

; chargement des boutons menu
LoadSprite(10, CheminImages$+"\Menu\Button_New_Game.png", #PB_Sprite_AlphaBlending)
LoadSprite(11, CheminImages$+"\Menu\Button_Quitter.png", #PB_Sprite_AlphaBlending)
LoadSprite(12, CheminImages$+"\Menu\Button_Win.png", #PB_Sprite_AlphaBlending)
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)

;;;;;;;;;;;;;;;;;

Dim brique(8)
For i=0 To 8
  brique(i)=i
Next
run = 0

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; 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))
  
  
  ;;;;;;; Keyboard
  If KeyboardReleased(#PB_Key_Space)
    For i=0 To 8
      Swap brique(i),brique(Random(8))
    Next
    run=1
  EndIf 
  ;;;
  
  x=0
  y=0
  If KeyboardReleased(#PB_Key_Up)
    y=1
  ElseIf KeyboardReleased(#PB_Key_Down)
    y=-1
  ElseIf KeyboardReleased(#PB_Key_Left)
    x=1
  ElseIf KeyboardReleased(#PB_Key_Right)
    x=-1
  EndIf
  ;;;
  
  If x+y<>0
    xx=-1
    yy=0
    For i=0 To 8
      xx+1
      If xx=3
        xx=0
        yy+1
      EndIf
      If brique(i)=0
        Break
      EndIf
    Next
    
    ;;;;;    
    If x=1 And xx>0
      Swap brique(xx-1+yy*3),brique(xx+yy*3)
      PlaySound(#Slide, 0, 100) ; joue le son slide
    EndIf
    
    If x=-1 And xx<2
      Swap brique(xx+1+yy*3),brique(xx+yy*3)
      PlaySound(#Slide, 0, 100) ; joue le son slide
    EndIf
    
    If y=1 And yy>0
      Swap brique(xx+(yy-1)*3),brique(xx+yy*3)
      PlaySound(#Slide, 0, 100) ; joue le son slide
    EndIf
    
    If y=-1 And yy<2
      Swap brique(xx+(yy+1)*3),brique(xx+yy*3)
      PlaySound(#Slide, 0, 100) ; joue le son slide
    EndIf
    
    ;;;;; verif si on a fini le puzzle
    For nb=1 To 8
      If brique(nb-1)<>nb
        nb=-1
        Break
      EndIf
    Next
    
    If nb=9
      run=2
    EndIf
    
  EndIf
  
  ;;;;;;; DisplayTransparentSprite()
  nb=0
  For u=0 To 2
    For i=0 To 2
      DisplayTransparentSprite(brique(nb), i*128, u*128) : nb+1
    Next
  Next
  If run=0
    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)
  EndIf
  If run=2
    DisplayTransparentSprite(#Button_Win, LARGEUR_FENETRE/2-SpriteWidth(#Button_Win)/2, HAUTEUR_FENETRE/2-SpriteHeight(#Button_Win)/2)
  EndIf
  
  
  FlipBuffers()
  
Until KeyboardReleased(#PB_Key_Escape)

End
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
crisot
Messages : 98
Inscription : lun. 30/août/2004 21:03

Re: Puzzle slide

Message par crisot »

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   Code : Crisot
;   Graphisme : venom
;   But de ce code : reduire encore le code de SPH :)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Procedure Panic()
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire pour ouvrir ce jeu !", 0)
  End
EndProcedure

Global TAILLE_BLOC = 128
Global LARGEUR_FENETRE = TAILLE_BLOC*3, HAUTEUR_FENETRE = TAILLE_BLOC*3
Global CheminImages$ = "GFX\", CheminSons$ = "SFX\"

; Dépendances
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0 : Panic() : EndIf
UsePNGImageDecoder()
UseOGGSoundDecoder()

; Ouverture de la fenetre principale
If Not OpenWindow(0, 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE, "Puzzle Slide", #PB_Window_TitleBar | #PB_Window_ScreenCentered) : Panic() : EndIf
If Not OpenWindowedScreen(WindowID(0), 0, 0, LARGEUR_FENETRE, HAUTEUR_FENETRE) : Panic() : EndIf

; Chargement des sprites : Attention sprite 8 = curseur []
For i=0 To 7
  LoadSprite(i, CheminImages$+"\Tuiles\Tuile"+Str(i+1)+".png", #PB_Sprite_AlphaBlending)
Next
LoadSprite(8, CheminImages$+"\Tuiles\Curseur.png", #PB_Sprite_AlphaBlending)

; Chargement des boutons menu
LoadSprite(10, CheminImages$+"\Menu\Button_New_Game.png", #PB_Sprite_AlphaBlending)
LoadSprite(11, CheminImages$+"\Menu\Button_Quitter.png", #PB_Sprite_AlphaBlending)
LoadSprite(12, CheminImages$+"\Menu\Button_Win.png", #PB_Sprite_AlphaBlending)

; chargement des sons
LoadSound(0, CheminSons$+"slide.ogg", 0)

; Plateau de jeu vide 12345678[]
Dim brique(8)
For i=0 To 8
  brique(i)=i
Next

;;;;;; Boucle principale ;;;;;;
Repeat
  ExamineKeyboard()
  ExamineMouse()
  ClearScreen(RGB(0, 0, 0))
  
  ; Affichage du plateau de jeu
  For i=0 To 8
    DisplayTransparentSprite(brique(i), (i%3)*128, (i/3)*128)
  Next
  
  ;;; Menu ;;;
  If run=0
    DisplayTransparentSprite(10, LARGEUR_FENETRE/2-SpriteWidth(10)/2, 128-SpriteHeight(10)/2)
    DisplayTransparentSprite(11, LARGEUR_FENETRE/2-SpriteWidth(11)/2, 256-SpriteHeight(11)/2)
      
    If KeyboardReleased(#PB_Key_Space)
      For i=0 To 8
        Swap brique(i),brique(Random(8))
      Next
      For i=0 To 8
        If brique(i)=8
          x=i%3 : y=i/3 ; On trouve le x,y de la brique vide
        EndIf
      Next  
      run=1
    EndIf
    
  ;;; Jeu ;;;
  ElseIf run=1
    ox = x : oy = y
    If KeyboardReleased(#PB_Key_Up) And y>0 : y-1
    ElseIf KeyboardReleased(#PB_Key_Down) And y<2 : y+1
    ElseIf KeyboardReleased(#PB_Key_Left) And x>0 : x-1
    ElseIf KeyboardReleased(#PB_Key_Right) And x<2 : x+1
    EndIf
     
    If x!ox Or y!oy
      Swap brique(x+y*3), brique(ox+oy*3)
      PlaySound(0, 0, 100) ; joue le son slide
    EndIf
     
    ; Vérification du puzzle
    run=2
    For nb=0 To 8
      If brique(nb)!nb
        run=1
      EndIf
    Next
         
  ;;; Fin ;;;
  ElseIf run=2
    DisplayTransparentSprite(12, LARGEUR_FENETRE/2-SpriteWidth(12)/2, HAUTEUR_FENETRE/2-SpriteHeight(1)/2)
  EndIf
 
  FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Puzzle slide

Message par venom »

Merci du partage. Je vais analyser vos code réduits :D

EDIT :
En effet, le résultat fonctionne. Pas exactement comme moi (concernant le retour au menu) Mais ça marche. Merci du partage. C'est cool de voir d'autres façon de faire. Il y a des idées a piocher :P

Vivement mon prochain jeu... :lol:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre