Mise à jour de la SpriteDemo de Danilo

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Mise à jour de la SpriteDemo de Danilo

Message par Guimauve »

Bonjour à tous,

Je m'ennuyais alors j'ai ré-écrit le SpriteDemo de Danilo à ma façon pour PB V4.0.
Les noms des macros et les commentaires sont en anglais, mais le code est plutôt facile à suivre.

Voiçi le code, amusez-vous bien !

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Exemple : Sprite Demo
; Author : Danilo
; Date : 18-04-2003
; Updated by : Guimauve
; Last Update : 29-07-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration >>>>>

Structure Sprite
   
   id.l
   PositionX.w
   PositionY.w
   MoveX.w
   MoveY.w
   
EndStructure

; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>

Macro SetSpriteID(ObjectA, P_ID)
   
   ObjectA\id = P_ID
   
EndMacro

Macro SetSpritePositionX(ObjectA, P_PositionX)
   
   ObjectA\PositionX = P_PositionX
   
EndMacro

Macro SetSpritePositionY(ObjectA, P_PositionY)
   
   ObjectA\PositionY = P_PositionY
   
EndMacro

Macro SetSpriteMoveX(ObjectA, P_MoveX)
   
   ObjectA\MoveX = P_MoveX
   
EndMacro

Macro SetSpriteMoveY(ObjectA, P_MoveY)
   
   ObjectA\MoveY = P_MoveY
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>

Macro GetSpriteID(ObjectA)
   
   ObjectA\id
   
EndMacro

Macro GetSpritePositionX(ObjectA)
   
   ObjectA\PositionX
   
EndMacro

Macro GetSpritePositionY(ObjectA)
   
   ObjectA\PositionY
   
EndMacro

Macro GetSpriteMoveX(ObjectA)
   
   ObjectA\MoveX
   
EndMacro

Macro GetSpriteMoveY(ObjectA)
   
   ObjectA\MoveY
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 15 ms <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Customs Macro - Uncomment if needed >>>>>

; Macro RandomMinMax(min, max)
   ; 
   ; (max - Random(max - min))
   ; 
; EndMacro

; Macro RGBColor(Red, Green, Blue)
   ; 
   ; (((Blue << 8 + Green) << 8) + Red)
   ; 
; EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Constants and variables >>>>>

Screen_W = GetSystemMetrics_(#SM_CXSCREEN)
Screen_H = GetSystemMetrics_(#SM_CYSCREEN)

#Quantity = 500
#SpriteSize = 8
 
Dim SpriteList.Sprite(#Quantity)
 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Initialize DirectX >>>>>

If InitKeyboard() = 0 Or InitSprite() = 0 
   MessageRequester("ERROR","Cant initialize DirectX!",#MB_ICONERROR)
   End 
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<
; <<<<< OpenScreen >>>>>

If OpenScreen(Screen_W, Screen_H, 32, "Sprite Demo") = 0 
   If OpenScreen(Screen_W, Screen_H, 24, "Sprite Demo") = 0 
      If OpenScreen(Screen_W, Screen_H, 16, "Sprite Demo") = 0 
         MessageRequester("ERROR", "Cant open DirectX screen!", #MB_ICONERROR)
         End
      EndIf
   EndIf
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Create 21 differents Sprites >>>>>

For SpriteID = 0 To 20 
   
   If CreateSprite(SpriteID, #SpriteSize, #SpriteSize) 
      StartDrawing(SpriteOutput(SpriteID)) 
      Circle(#SpriteSize >> 1, #SpriteSize >> 1, #SpriteSize >> 1, RGBColor(RandomMinMax($50, $FF), RandomMinMax($50, $FF), RandomMinMax($50, $FF))) 
      StopDrawing() 
   Else 
      CloseScreen() 
      MessageRequester("ERROR","Cant create Sprite!",#MB_ICONERROR)
      End 
   EndIf 
   
Next  

; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Animation Setup >>>>>

For Index = 0 To #Quantity
   
   SetSpriteID(SpriteList(Index), Random(20))
   SetSpritePositionX(SpriteList(Index), Random(Screen_W >> 1))
   SetSpritePositionY(SpriteList(Index), Random(Screen_H >> 1))
   SetSpriteMoveX(SpriteList(Index), RandomMinMax(2, 6))
   SetSpriteMoveY(SpriteList(Index), RandomMinMax(2, 6))
   
Next 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Run Sprite Demo >>>>>

Repeat 
   
   FlipBuffers() 
   ExamineKeyboard() 
   
   If IsScreenActive() 
      
      ClearScreen(0) 
      
      For Index = 0 To #Quantity 
         
         ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
         ; If the sprites are about to fly outside of the screen area
         ; we reverse the Move direction.
         
         If GetSpritePositionX(SpriteList(Index)) > (Screen_W - #SpriteSize) Or GetSpritePositionX(SpriteList(Index)) < 0 
            SetSpriteMoveX(SpriteList(Index), -GetSpriteMoveX(SpriteList(Index))) 
         EndIf 
         
         If GetSpritePositionY(SpriteList(Index)) > (Screen_H - #SpriteSize) Or GetSpritePositionY(SpriteList(Index)) < 0  
            SetSpriteMoveY(SpriteList(Index), -GetSpriteMoveY(SpriteList(Index)))
         EndIf 
         
         ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
         ; We compute a new positions and we display sprites to 
         ; their new positions.
         
         SetSpritePositionX(SpriteList(Index), GetSpritePositionX(SpriteList(Index)) + GetSpriteMoveX(SpriteList(Index)))
         SetSpritePositionY(SpriteList(Index), GetSpritePositionY(SpriteList(Index)) + GetSpriteMoveY(SpriteList(Index)))
         DisplayTransparentSprite(GetSpriteID(SpriteList(Index)), GetSpritePositionX(SpriteList(Index)), GetSpritePositionY(SpriteList(Index))) 
         
      Next 
      
      ; If GetTickCount_() => zeit + 1000 
         ; FrameSek = Frames 
         ; Frames = 0 
         ; zeit = GetTickCount_() 
      ; Else 
         ; Frames + 1 
      ; EndIf      
      
      ; If StartDrawing(ScreenOutput()) 
         ; DrawingMode(1) 
         ; DrawText(20,20,"Frames/Sekunde: "+Str(FrameSek), RGBColor($FF,$FF,$00)) 
         ; StopDrawing() 
      ; EndIf 
      
   Else 
      
      Delay(10) 
      
   EndIf 
   
Until KeyboardPushed(#PB_Key_Escape) 

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<