Tout ceci à pour but de montrer qu'avec peu, on peut faire tout un espace en PB
Le scrolling est grossier mais il ne tiens qu'à vous d'en faire un tout beau avec cette base, c'est le but.
Ce code utilise :
1 structure
1 tableau
2 sprites
1 macro (facultative)
Je ne vais pas m’épancher ici car j'ai sur-commenté le code.
Code : Tout sélectionner
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Petit tuto de Noël dédicacé à Michaeo
; Exemple de scroll stars 2D basic
; par Ar-S / 27/12/2015
; utilisation d'une structure, une macro, deux sprites et un tableau
; Pressez ECHAP pour quitter
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ////////////// INITIALISATION //////////////////////
InitSprite()
InitKeyboard()
Enumeration 0
#ET0
#ET1
EndEnumeration
; nombre d'étoiles désirées
#MAXETOILE = 99
; Structure qui va regrouper les infos de nos étoiles
Structure ETOILE
X.i ; Position X
Y.i ; Position Y
V.b ; Vitesse
ID.b ; définira etoile blanche ou rouge
EndStructure
; Création d'un tableau ou seront stockées les infos de toutes les étoiles
Global Dim ETOILE.ETOILE(#MAXETOILE)
; Cette macro sert JUSTE à simplier l'écriture du tableau
Macro ET(Numero_Etoile) ; <=== on ecrira ça
ETOILE.Etoile(Numero_Etoile) ; <==== au lieu de ça
EndMacro
; ////////////// PROCEDURES //////////////////////
; Dessinons les étoiles
Procedure CreationEtoile()
; On crée 2 sprites vides
CreateSprite(#ET0,2,2)
CreateSprite(#ET1,2,2)
; Dessin de l'etoile 0 qui sera blanche
StartDrawing(SpriteOutput(#ET0))
Box(0,0,2,2,$FFFFFF)
StopDrawing()
; Dessin de l'etoile 1 qui sera rouge
StartDrawing(SpriteOutput(#ET1))
Box(0,0,2,2,$0000FF)
StopDrawing()
EndProcedure
; Initialisation des paramètres de départ des étoiles
Procedure Initialisation()
For i = 0 To #MAXETOILE ; nombre d'étoiles
; On définit N endroits au hazard de façon vertical de 0 à 600 (hauteur de notre screen)
ET(i)\Y = Random(600)
; On définit N positions en X d'etoiles de 0 à 100 (car random ne permet pas les négatifs)
ET(i)\X = Random(100,0)
; Une fois la valeur au hazard choisit on la passe en négative pour que les étoiles débutent avant le début de notre screen
ET(i)\X = -ET(i)\X
; On choisit au hazard si ce sera l'étoile rouge ou blanche
ET(i)\ID = Random(1,0)
; On choisit au hazard la vitesse de défilement des étoiles de 2 à 8
ET(i)\V = Random(8,2)
Next
EndProcedure
; On Fait défiler les étoiles
Procedure deplacement()
For i = 0 To #MAXETOILE
DisplaySprite(ET(i)\ID, ET(i)\X, ET(i)\Y) ; On affiche le sprite etoile à ces coordonnées
ET(i)\X + ET(i)\V ; On ajout la vitesse à l'etoile
If ET(i)\X > 800 ; Si l'etoile sort de l'ecran
ET(i)\X = Random(100,0) ; On positionne les etoiles avant l'ecran de façon aléatoire
ET(i)\X = -ET(i)\X ; Une fois la valeur au hazard choisit on la passe en négative
EndIf
Next
EndProcedure
; /////////////////////////////////////////////////
; ////////////// PROGRAMME PRINCIPAL //////////////////////
OpenScreen(800,600,32,"STARS")
CreationEtoile()
Initialisation()
Repeat
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
EXIT = 1
EndIf
deplacement() ; On déplace les étoiles
Until EXIT = 1