Afficher sprite aléatoirement

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

Afficher sprite aléatoirement

Message par venom »

Bonjour,

Voilà je cherche le meilleur moyen selon vous, pour afficher des sprites dans des positions aléatoire.

Mais attention pas si aléatoire que sa :D Si non c'est trop facile.

J'ai fait un petit code d'exemple, qui explique ce que je souhaite faire.

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- Gadgets Constants
Enumeration

EndEnumeration

;{ 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 sound
  If InitSound() = 0
    MessageRequester("Erreur", "Impossible d'initialisé l'environnement son !", 0)
    End
  EndIf
;}
  

;- Ouverture de la fenetre
  If OpenWindow(#Window_0, 0, 0, 200, 200, "", #PB_Window_ScreenCentered)

;{ Chargement des sprites
;- Chargement des sprites
   If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 200, 200)

    ; on créer le sprite rouge
     If CreateSprite(0, 200, 100, 0)
       StartDrawing(SpriteOutput(0))
        Box(0, 0, 100, 100, RGB(255, 0, 0))
       StopDrawing()
     EndIf 
     
    ; on créer le sprite vert
     If CreateSprite(1, 200, 100, 0)
       StartDrawing(SpriteOutput(1))
        Box(0, 0, 100, 100, RGB(0, 255, 0))
       StopDrawing()
     EndIf 
     
    ; on créer le sprite bleu
     If CreateSprite(2, 200, 100, 0)
       StartDrawing(SpriteOutput(2))
        Box(0, 0, 100, 100, RGB(0, 0, 255))
       StopDrawing()
     EndIf 
     
    ; on créer le sprite jaune
     If CreateSprite(3, 200, 100, 0)
       StartDrawing(SpriteOutput(3))
        Box(0, 0, 100, 100, RGB(255, 255, 0))
       StopDrawing()
     EndIf 
     
   EndIf 
;}

   
;{ affichage des sprites
;- affichage  des sprites
      DisplayTransparentSprite(0, 0, 0)
      DisplayTransparentSprite(1, 100, 0)
      DisplayTransparentSprite(2, 0, 100)
      DisplayTransparentSprite(3, 100, 100)
;}
      

  EndIf 

;- Boiucle d'evenement
  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
         
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until Event = 0
  
    FlipBuffers() 
    ExamineKeyboard()

  Until KeyboardPushed(#PB_Key_Escape) ; on appuie sur echappe pour quitter
 End 
en essayant ce code, vous verrez afficher 4 carré. Un rouge, un vert, un bleu et un jaune. Ces 4 carré sont placé a des endroit bien spécifique. exemple le 1er et en X=0 Y=0 et le 4eme en X=100 Y=100

Ce que je souhaiterais faire, c'est que les sprites s'affichent en X et Y a des endroit bien précis, mais que les sprites eux même changent de place.

8O j'avoue cette phrase ne veux rien dire :lol:

exemple :

voici ce que vous allez voir d'origine :


| R | | V |

| B | | J |

Moi je souhaiterais par exemple avoir sa :


| B | | V |

| J | | R |

Mais de façon aléatoire. J'ai donc pensé donner un numéro a l'id de chaque sprite pour les afficher via un random, mais le problème du random c'est qu'il peut donner plusieurs foi le même numéro. Et sa je ne souhaite pas.

J’espère mettre fait comprendre. :? Car j'ai moi même du mal a rédiger ce topic :D
D'avance merci.





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Afficher sprite aléatoirement

Message par Ar-S »

Tu peux créer une liste chainée de positions 1,20,50,100,150,200 etc... puis randomiser la selection
dans cet exemple, random(5,0) (car il y a 6 éléments), une fois l'élément choisit et le sprite positionné, tu supprimes l'élément de la liste et tu en "pioches" un autre pour le sprite 2 et ainsi de suite.
Lorsque tu as finis tes sprites, tu reinitialise à liste avec 6 positions.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Afficher sprite aléatoirement

Message par Micoute »

Voici comment je pratique, ceci est un exemple où la réponse à 6 positions possibles, mais le principe est le même pour 4 ou 20 positions.

Code : Tout sélectionner

Procedure placerBoutons()
  Protected Hasard
  Hasard = Random(5,0)
  
  Select Hasard
    Case 0
      X1 = 10 : X2 = (LargFen-LargBout)/2 : X3 = LargFen-LargBout-10 : X4 = 10 : X5 = (LargFen-LargBout)/2 : X6 = LargFen-LargBout-10
      Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
      Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
    Case 1
      X1 = (LargFen-LargBout)/2 : X2 = LargFen-LargBout-10 : X3 = 10 : X4 = (LargFen-LargBout)/2 : X5 = LargFen-LargBout-10 : X6 = 10
      Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
      Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
    Case 2
      X1 = LargFen-LargBout-10 : X2 = (LargFen-LargBout)/2 : X3 = 10 : X4 = LargFen-LargBout-10 : X5 = (LargFen-LargBout)/2 : X6 = 10
      Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
      Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
    Case 3
      X1 = 10 : X2 = (LargFen-LargBout)/2 : X3 = LargFen-LargBout-10 : X4 = 10 : X5 = (LargFen-LargBout)/2 : X6 = LargFen-LargBout-10
      Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
      Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
    Case 4
      X1 = (LargFen-LargBout)/2 : X2 = LargFen-LargBout-10 : X3 = 10 : X4 = (LargFen-LargBout)/2 : X5 = LargFen-LargBout-10 : X6 = 10
      Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
      Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
    Case 5
      X1 = LargFen-LargBout-10 : X2 = (LargFen-LargBout)/2 : X3 = 10 : X4 = LargFen-LargBout-10 : X5 = (LargFen-LargBout)/2 : X6 = 10
      Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
      Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
  EndSelect
EndProcedure

Procedure Dispatcher_les_reponses()
  QCM()\Reponse[0] = Random(#NbPays,0)	
  QCM()\Reponse[1] = Random(#NbPays,0)
  QCM()\Reponse[2] = Random(#NbPays,0)
  QCM()\Reponse[3] = Random(#NbPays,0)
  QCM()\Reponse[4] = Random(#NbPays,0)
  QCM()\Reponse[5] = Random(#NbPays,0)
  
  If QCM()\Reponse[1] = QCM()\Reponse[0]
    QCM()\Reponse[1] = Random(#NbPays,0)
  EndIf
  If QCM()\Reponse[2] = QCM()\Reponse[0] Or 
     QCM()\Reponse[2] = QCM()\Reponse[1]
    QCM()\Reponse[2] = Random(#NbPays,0)
  EndIf   
  If QCM()\Reponse[3] = QCM()\Reponse[0] Or 
     QCM()\Reponse[3] = QCM()\Reponse[1] Or 
     QCM()\Reponse[3] = QCM()\Reponse[2]
    QCM()\Reponse[3] = Random(#NbPays,0)
  EndIf
  If QCM()\Reponse[4] = QCM()\Reponse[0] Or 
     QCM()\Reponse[4] = QCM()\Reponse[1] Or 
     QCM()\Reponse[4] = QCM()\Reponse[2] Or 
     QCM()\Reponse[4] = QCM()\Reponse[3]
    QCM()\Reponse[4] = Random(#NbPays,0)
  EndIf
  If QCM()\Reponse[5] = QCM()\Reponse[0] Or 
     QCM()\Reponse[5] = QCM()\Reponse[1] Or 
     QCM()\Reponse[5] = QCM()\Reponse[2] Or 
     QCM()\Reponse[5] = QCM()\Reponse[3] Or 
     QCM()\Reponse[5] = QCM()\Reponse[4]
    QCM()\Reponse[5] = Random(#NbPays,0)
  EndIf  
  If DejaJoue(QCM()\Reponse[0]) = "1"
    Dispatcher_les_reponses()
  EndIf 
  
  QCM()\Question = QCM()\Reponse[0]
  BonneReponse = QCM()\Reponse[0]
  MauvaiseReponse1 = QCM()\Reponse[1]
  MauvaiseReponse2 = QCM()\Reponse[2]
  MauvaiseReponse3 = QCM()\Reponse[3]
  MauvaiseReponse4 = QCM()\Reponse[4]
  MauvaiseReponse5 = QCM()\Reponse[5]
  
  ForEach DejaPosee()
    If DejaPosee()= QCM()\Question
      Dispatcher_les_reponses()
    EndIf
  Next 
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Afficher sprite aléatoirement

Message par Zorro »

Code : Tout sélectionner

;- Window Constants
Enumeration
	#Window_0
EndEnumeration

;- Gadgets Constants
Enumeration
	
EndEnumeration

;{ INITIALISATIONS
;- Initialisation environnement sprite
If InitSprite() = 0
	MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
	End
EndIf
Global dim dd(3)
For i=1 to 4
	dd(i-1)=i
Next i

;- 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 sound
If InitSound() = 0
	MessageRequester("Erreur", "Impossible d'initialisé l'environnement son !", 0)
	End
EndIf
;}


;- Ouverture de la fenetre
If OpenWindow(#Window_0, 0, 0, 200, 200, "", #PB_Window_ScreenCentered)
	AddWindowTimer(#Window_0, 888, 1000)
	
	;{ Chargement des sprites
	;- Chargement des sprites
	If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 200, 200)
		
		; on créer le sprite rouge
		If CreateSprite(0, 200, 100, 0)
			StartDrawing(SpriteOutput(0))
				Box(0, 0, 100, 100, RGB(255, 0, 0))
			StopDrawing()
		EndIf
		
		; on créer le sprite vert
		If CreateSprite(1, 200, 100, 0)
			StartDrawing(SpriteOutput(1))
				Box(0, 0, 100, 100, RGB(0, 255, 0))
			StopDrawing()
		EndIf
		
		; on créer le sprite bleu
		If CreateSprite(2, 200, 100, 0)
			StartDrawing(SpriteOutput(2))
				Box(0, 0, 100, 100, RGB(0, 0, 255))
			StopDrawing()
		EndIf
		
		; on créer le sprite jaune
		If CreateSprite(3, 200, 100, 0)
			StartDrawing(SpriteOutput(3))
				Box(0, 0, 100, 100, RGB(255, 255, 0))
			StopDrawing()
		EndIf
		
	EndIf
	;}
	
	
	
	;}
	
	
EndIf

;- Boiucle d'evenement
Repeat
	; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
	Repeat
		Event = WindowEvent()
		
		Select Event
			Case #PB_Event_Gadget
			If EventGadget() = 0
				End
			EndIf
			
			Case #PB_Event_CloseWindow
			End
			case #PB_Event_Timer
			if EventTimer() = 888
				; display Sprite
				RandomizeArray(dd())
				For spr=0 to 3
					de=dd(spr)
					select de
						case 1
						x=0:y=0
						case 2
						x=100:y=0
						case 3
						x=0:y=100
						case 4
						x=100 :y=100
					EndSelect
					DisplayTransparentSprite(spr, x, y)
				Next spr
			Endif
		EndSelect
	Until Event = 0
	
	
	
	FlipBuffers()
	ExamineKeyboard()
	
Until KeyboardPushed(#PB_Key_Escape) ; on appuie sur echappe pour quitter
End 
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sprite aléatoirement

Message par venom »

Merci pour vos solution.
Comme d'habitude sous purebasic il y a l’embarras du choix :P

Je vais étudié vos proposition et voir celle ui me correspond le mieux. :wink:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Afficher sprite aléatoirement

Message par poshu »

Code : Tout sélectionner

;- Window Constants
Enumeration
	#Window_0
EndEnumeration

;- Gadgets Constants
Enumeration
	
EndEnumeration

;{ 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 sound
If InitSound() = 0
	MessageRequester("Erreur", "Impossible d'initialisé l'environnement son !", 0)
	End
EndIf
;}


;- Ouverture de la fenetre
If OpenWindow(#Window_0, 0, 0, 200, 200, "", #PB_Window_ScreenCentered)
	
	;{ Chargement des sprites
	;- Chargement des sprites
	If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 200, 200)
		
		; on créer le sprite rouge
		If CreateSprite(0, 200, 100, 0)
			StartDrawing(SpriteOutput(0))
			Box(0, 0, 100, 100, RGB(255, 0, 0))
			StopDrawing()
		EndIf
		
		; on créer le sprite vert
		If CreateSprite(1, 200, 100, 0)
			StartDrawing(SpriteOutput(1))
			Box(0, 0, 100, 100, RGB(0, 255, 0))
			StopDrawing()
		EndIf
		
		; on créer le sprite bleu
		If CreateSprite(2, 200, 100, 0)
			StartDrawing(SpriteOutput(2))
			Box(0, 0, 100, 100, RGB(0, 0, 255))
			StopDrawing()
		EndIf
		
		; on créer le sprite jaune
		If CreateSprite(3, 200, 100, 0)
			StartDrawing(SpriteOutput(3))
			Box(0, 0, 100, 100, RGB(255, 255, 0))
			StopDrawing()
		EndIf
		
	EndIf
	;}
	
	
	;{ affichage des sprites
	;- affichage  des sprites
	Define Loop = Random(3)
	DisplayTransparentSprite(Loop, 0, 0)
	Loop = (loop + 1)%4
	DisplayTransparentSprite(Loop, 100, 0)
	Loop = (loop + 1)%4
	DisplayTransparentSprite(Loop, 0, 100)
	Loop = (loop + 1)%4
	DisplayTransparentSprite(Loop, 100, 100)
	Loop = (loop + 1)%4
	;}
	
	
EndIf

;- Boiucle d'evenement
Repeat
	; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
	Repeat
		Event = WindowEvent()
		
		Select Event
			Case #PB_Event_Gadget
				If EventGadget() = 0
					End
				EndIf
				
			Case #PB_Event_CloseWindow
				End
		EndSelect
	Until Event = 0
	
	FlipBuffers()
	ExamineKeyboard()
	
Until KeyboardPushed(#PB_Key_Escape) ; on appuie sur echappe pour quitter
End 
Déterrage de topic! Je *pense* que c'est la solution la plus simple et rapide, et ça ne fait que 5 lignes de plus que ton code d'origine :D
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sprite aléatoirement

Message par venom »

Merci pour ta version poshu. Je testerais des que possible. :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Afficher sprite aléatoirement

Message par poshu »

la technique de dobro est une bonne base aussi, si ce n'est qu'au lieu de random un tableau contenant les positions (ce qui implique un select derrière), il faut mettre dans le tableau les #sprites eux même :p
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sprite aléatoirement

Message par venom »

En faite le but de se topic est, que je souhaiterais programmer un puzzle slide avec pourquoi pas plusieurs niveaux de difficulté(plusieurs fractionnement). Mais je vais déjà voir si j'arrive a faire quelque chose :lol:

Pour le moment le code fait juste découpe l'image en étiquette et la mélange.

voici le code :
Ps : il faut utilisé une image de 800 par 600 ( pour le moment il n'y a pas le redimensionnement automatique ) :D

voici le background

voici le curseur

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration


;- Gadgets Constants
Enumeration
  #Background
  #Vide
EndEnumeration


;{ Initialisation
;- 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 sound
  If InitSound() = 0
    MessageRequester("Erreur", "Impossible d'initialisé l'environnement son !", 0)
    End
  EndIf

;- Initialisation environnement png
  UsePNGImageDecoder()
  UseJPEGImageDecoder()
;}
  
 
 
;- declaration des procedures
  Declare AfficherdecoupeDuPuzzle()
  Declare MelangerLePuzzle()
  Declare DeplacementDuCurseurVersLeHaut()
  
;- Tableaux
Global Dim dd(14)
For i=0 To 14
  dd(i)=i
Next i

Global Dim Id(15)



;- ouverture de la fenetre
  If OpenWindow(#Window_0, 0, 0, 800, 600, "      Puzzle      |     F1 Rétablire l'image     |     F2 Mélanger l'image", #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 800, 600)
     
    ;- chargement des sprites
     LoadSprite(#Background, "background.png", #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
      DisplayTransparentSprite(#Background, 0, 0)
      
     LoadSprite(#Vide, "vide.png", #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
      DisplayTransparentSprite(#Vide, 600, 450)
     
    ;- on coupe le sprite pour preparer le melange
     GrabSprite(0, 0, 0, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision) 
     GrabSprite(1, 200, 0, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(2, 400, 0, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(3, 600, 0, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)

     GrabSprite(4, 0, 150, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision) 
     GrabSprite(5, 200, 150, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(6, 400, 150, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(7, 600, 150, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)

     GrabSprite(8, 0, 300, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision) 
     GrabSprite(9, 200, 300, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(10, 400, 300, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(11, 600, 300, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)

     GrabSprite(12, 0, 450, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision) 
     GrabSprite(13, 200, 450, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(14, 400, 450, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
     GrabSprite(15, 600, 450, 200, 150, #PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)

    ;- on affiche les sprites precedement couper
     AfficherdecoupeDuPuzzle()

   EndIf
  EndIf 
  
  
  ;- Boucle d'evenement
  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    Repeat
      Event = WindowEvent()

      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
        Case #PB_Event_CloseWindow
          End 

      EndSelect
    Until Event = 0
    
    
    FlipBuffers() 
    ExamineKeyboard()
  
;{ Gestion des touches
;- Gestion des touches
    
;- Appuie sur la touche F1
    If KeyboardReleased(#PB_Key_F1)
      AfficherdecoupeDuPuzzle()
    EndIf 


;- Appuie sur la touche F2
    If KeyboardReleased(#PB_Key_F2)
      MelangerLePuzzle() 
    EndIf 

    
;- Appuie sur la touche haut
    If KeyboardReleased(#PB_Key_Up)

    EndIf


;- Appuie sur la touche bas
    If KeyboardReleased(#PB_Key_Down)

    EndIf


;- Appuie sur la touche gauche
    If KeyboardReleased(#PB_Key_Left)

    EndIf


;- Appuie sur la touche droite
    If KeyboardReleased(#PB_Key_Right)

    EndIf

    
; on appuie sur echappe pour quitter
  Until KeyboardPushed(#PB_Key_Escape)
End 
;}


;- on affiche les sprites en cases pour preparer le melange
Procedure AfficherdecoupeDuPuzzle()
   ClearScreen(RGB(0, 0, 0))
   
   DisplayTransparentSprite(0, 0, 0)
   DisplayTransparentSprite(1, 200, 0)
   DisplayTransparentSprite(2, 400, 0)
   DisplayTransparentSprite(3, 600, 0)
    
   DisplayTransparentSprite(4, 0, 150)
   DisplayTransparentSprite(5, 200, 150)
   DisplayTransparentSprite(6, 400, 150)
   DisplayTransparentSprite(7, 600, 150)
   
   DisplayTransparentSprite(8, 0, 300)
   DisplayTransparentSprite(9, 200, 300)
   DisplayTransparentSprite(10, 400, 300)
   DisplayTransparentSprite(11, 600, 300)
   
   DisplayTransparentSprite(12, 0, 450)
   DisplayTransparentSprite(13, 200, 450)
   DisplayTransparentSprite(14, 400, 450)
   DisplayTransparentSprite(15, 600, 450)
   
   ; on ajoute les ID a leurs etiquettes
   For spr= 0 To 15
    Id(spr)=spr 
   Next 

EndProcedure 


;- on melange les pieces et on les affiches
Procedure MelangerLePuzzle()
  ClearScreen(RGB(0, 0, 0))
  RandomizeArray(dd())
     For spr= 0 To 14
      de=dd(spr)
       Select de
        Case 0
         Id(0)=spr
         x=0:y=0
        Case 1
         Id(1)=spr
         x=200:y=0
        Case 2
         Id(2)=spr
         x=400:y=0
        Case 3
         Id(3)=spr
         x=600 :y=0
         
        Case 4
         Id(4)=spr
         x=0:y=150
        Case 5
         Id(5)=spr
         x=200:y=150
        Case 6
         Id(6)=spr
         x=400:y=150
        Case 7
         Id(7)=spr
         x=600 :y=150
          
        Case 8
         Id(8)=spr
         x=0:y=300
        Case 9
         Id(9)=spr
         x=200:y=300
        Case 10
         Id(10)=spr
         x=400:y=300
        Case 11
         Id(11)=spr
         x=600 :y=300
         
        Case 12
         Id(12)=spr
         x=0:y=450
        Case 13
         Id(13)=spr
         x=200:y=450
        Case 14
         Id(14)=spr
         x=400:y=450 
     EndSelect
      DisplayTransparentSprite(spr, x, y)
     Next spr
     
     DisplayTransparentSprite(15, 600, 450)
     Id(15)=15

EndProcedure





@++
Dernière modification par venom le mer. 08/févr./2017 6:42, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Afficher sprite aléatoirement

Message par poshu »

Dans ce cas, la technique c'est le tableau qui contient les ID des sprites.
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sprite aléatoirement

Message par venom »

Merci pour l'info poshu. J'ai ajouté les images au dessus du code. C'est plus simple pour tester que d'en chercher soit même. :P






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Afficher sprite aléatoirement

Message par poshu »

Qu'est ce que je peux faire pour t'aider? Tu veux une base pour travailler?
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Afficher sprite aléatoirement

Message par Zorro »

poshu a écrit :Dans ce cas, la technique c'est le tableau qui contient les ID des sprites.
c'etait le cas de mon exemple ;)

j'ai mis les "id" en tableau
et en fonction de l'id, je choisissais une position (via le select-case )

ce n'est pas les positions qui etaient en tableau , seulement le numero du sprite :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Afficher sprite aléatoirement

Message par poshu »

Zorro a écrit :
poshu a écrit :Dans ce cas, la technique c'est le tableau qui contient les ID des sprites.
c'etait le cas de mon exemple ;)

j'ai mis les "id" en tableau
et en fonction de l'id, je choisissais une position (via le select-case )

ce n'est pas les positions qui etaient en tableau , seulement le numero du sprite :)
Ah, j'avoue, j'ai pas lu le code, juste vu un select et j'en ai déduis que c'était les positions... Du coup... Pourquoi faire le select?
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sprite aléatoirement

Message par venom »

Bonsoir,

J'avoue ne pas avoir les connaissance et donc la logique de le dire par exemple : " pour avoir ce type d'effet, je doit faire comme ça "

J'ai plusieurs petit jeu de commencé, mais je bloque toujours sur peut être des détails pour certain. :oops:


@poshu @all
Pour ce qui est de ton aide, pourrais tu déjà m'expliquer ta façon de penser si tu ferais ce projet ? Sa serait déjà pas mal.


Pour le môment j'ai utilisé la soluce de dobro





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