Voilà je me suis amusé a faire quelques essais de jeu en purebasic. Jusque la rien de très spécial, mais j'aurais voulu savoir comment on organise un code quand il y a par exemple :
- un menu avant de lancer le jeu
- plusieurs niveaux
- un tableau des scores quand on perd
- un générique de fin
etc...
Donc ma réel question est comment boucler tout ça ?
Est ce que l'on programme chaque étape dans différents fichiers (chacun utilise son screen, chacun utilise le clavier etc..) qu'on inclus ensuite via des procédures ? (je ne pense pas)
Ou autre façon ?
Je ne demande pas un code complet mais savoir comment un tel projet peut se goupiller.
Pour exemple, voici un code qui affiche un menu avec pour option :
Démarrer, Options, Quitter.
Il y inclue la fonction clavier qui permet de choisir son menu et via la touche entrée de sélectionner le menu désiré:
Code : Tout sélectionner
;{ Initialisations
; /////////////////////////////////////////////////////////////////////////////
If InitSprite() = 0
MessageRequester("Erreur", "Le système de Sprite ne peut être initialisé", 0)
End
EndIf
If InitKeyboard() = 0
MessageRequester("Erreur", "Le clavier ne peut être initialisé", 0)
End
EndIf
If InitSound() = 0
MessageRequester("Erreur", "L'environnement sonorene peut être initialisé", 0)
End
EndIf
;}
;{ Enumerations
; /////////////////////////////////////////////////////////////////////////////
Enumeration
#Police_0
#Sprite_Menu
#Sprite_Menu_Demarrer
#Sprite_Menu_Options
#Sprite_Menu_Quitter
#Window_0
EndEnumeration
;}
;{ Police de caractere
; /////////////////////////////////////////////////////////////////////////////
LoadFont(#Police_0, "Comic sans ms", 70, #PB_Font_Bold)
;}
;{ Ouverture de la fenetre
; /////////////////////////////////////////////////////////////////////////////
If OpenWindow(#Window_0, 0, 0, 1024, 768, "", #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 1024, 768)
;{ création du menu
; /////////////////////////////////////////////////////////////////////////////
If CreateSprite(#Sprite_Menu, 1024, 768, #PB_Sprite_AlphaBlending)
If CreateSprite(#Sprite_Menu_Demarrer, 300, 50)
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Sprite_Menu_Options, 300, 50)
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(310, 300, "OPTIONS", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Sprite_Menu_Quitter, 300, 50)
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(315, 500, "QUITTER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
sprite = #Sprite_Menu_Demarrer
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
;}
EndIf
EndIf
;}
;{ Event_Loop
; /////////////////////////////////////////////////////////////////////////////
Repeat
Repeat
EventID = WindowEvent()
Until EventID = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
ExamineKeyboard()
;{ Gestion du menu avec les flèches
; /////////////////////////////////////////////////////////////////////////////
If KeyboardReleased(#PB_Key_Up)
If sprite = #Sprite_Menu_Demarrer
sprite = #Sprite_Menu_Quitter
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(315, 500, "QUITTER", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
ElseIf sprite = #Sprite_Menu_Options
sprite = #Sprite_Menu_Demarrer
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(310, 300, "OPTIONS", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
ElseIf sprite = #Sprite_Menu_Quitter
sprite = #Sprite_Menu_Options
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(315, 500, "QUITTER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(310, 300, "OPTIONS", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
EndIf
If KeyboardReleased(#PB_Key_Down)
If sprite = #Sprite_Menu_Demarrer
sprite = #Sprite_Menu_Options
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(310, 300, "OPTIONS", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
ElseIf sprite = #Sprite_Menu_Options
sprite = #Sprite_Menu_Quitter
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(310, 300, "OPTIONS", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(315, 500, "QUITTER", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
ElseIf sprite = #Sprite_Menu_Quitter
sprite = #Sprite_Menu_Demarrer
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(315, 500, "QUITTER", RGB(255, 255, 255), RGB(0, 0, 0))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Menu))
DrawingFont(FontID(#Police_0))
DrawText(265, 100, "DEMARRER", RGB(255, 0, 0), RGB(0, 0, 0))
StopDrawing()
EndIf
EndIf
EndIf
;}
;{ quand ont fait ENTREE sur un menu
; /////////////////////////////////////////////////////////////////////////////
If KeyboardReleased(#PB_Key_Return)
If sprite = #Sprite_Menu_Demarrer ; quand ont fait entree sur le menu demarrer
Debug"demarrer"
EndIf
If sprite = #Sprite_Menu_Options ; quand ont fait entree sur le menu options
Debug"options"
EndIf
If sprite = #Sprite_Menu_Quitter ; quand ont fait entree sur le menu quitter
Debug"quitter"
End
EndIf
EndIf
;}
;- Affichage du menu a l'écran
; /////////////////////////////////////////////////////////////////////////////
DisplaySprite(#Sprite_Menu, 0, 0)
;- appuie sur la touche echap pour quitter
; /////////////////////////////////////////////////////////////////////////////
If KeyboardPushed(#PB_Key_Escape)
EventID = #PB_Event_CloseWindow
EndIf
Until EventID = #PB_Event_CloseWindow
;}
Code : Tout sélectionner
If InitSprite() = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
End
EndIf
If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 170, 135, 45, 20, "Quitter")
If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
CreateSprite(0, 20, 20)
If StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing()
EndIf
Else
MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
End
EndIf
EndIf
direction = 2
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()
ClearScreen(RGB(0, 0, 0))
DisplaySprite(0, x, x)
x + direction
If x > 140 : direction = -2 : EndIf
If x < 0 : direction = 2 : EndIf
Delay(1)
ForEver
Je pense que cette question peut paraitre bête aux yeux de certain, mais je ne doit pas être le seul ma m'avoir déjà posé cette question.
j'espere
Merci de votre futur réponse.
@++