■ Objectif de l'application.
- Le joueur lance un dés.
- L'application (IA) lance un dés.
- Examen du tirage obtenu.
- Affichage du compte rendu du tirage.
- Affichage des scores.
■ Méthodes.
- Code procédural.
- Eviter la boucle événementielle : Utilisation de BindXXX
■ Remarques.
Dans cet exemple je n'utilise pas de variables globales.
Les scores du joueur et de l'IA sont déclarés Static dans la procédure DrawDice() du tirage des dés.
Une variable Static n'est pas remis à zéro à chaque appel de la procédure qui les contient contrairement aux variables Protected
Le visuel est très moche au profit de la méthode.
■ Code commenté.
Code : Tout sélectionner
;Inserer EnableExplicit pour etre certain de ne pas utiliser des variables non déclarées
EnableExplicit
;Enumérer le ou les fenetres
Enumeration Window
#mf
EndEnumeration
;Enumérer le ou les gadgets
;Ma méthode consiste à faire précéder les gadgets par l'identifiant de la fenetre
Enumeration Gadgets
#mfScrorePlayer ;Score Joueur
#mfScoreIA ;Score IA
#mfIAMessage ;Message de l'IA
#mfDrawDice ;Bouton Tirage des dés
#mfQuit ;Bouton Fermer l'application
EndEnumeration
;Plan de l'application
;Chaque procedure est déclarée
;Commenter chaque procédure brievement
Declare Start() ;Debut du jeu
Declare DrawDice() ;Tirage des des et examen du tirage obtenu
Declare Exit() ;Fin du jeu
Start()
Procedure Start()
If OpenWindow(0, 0, 0, 800, 600, "Jeu de dés", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#mfQuit, 700, 20, 90, 24, "Quitter")
ButtonGadget(#mfDrawDice, 700, 50, 90, 24, "Lancer les dés")
;Explication de l'evenement tirage des des
TextGadget(#mfIAMessage, 10, 80, 700, 100, "Cliquer sur le bouton lancer les dés")
;Score du joueur
FrameGadget(#PB_Any, 10, 180, 100, 50, "Score Joueur")
TextGadget(#mfScrorePlayer, 20, 200, 50, 24, "0", #PB_Text_Center )
;Score de l'IA
FrameGadget(#PB_Any, 120, 180, 100, 50, "Score IA")
TextGadget(#mfScoreIA, 130, 200, 50, 24, "0", #PB_Text_Center )
;Les déclencheurs
BindGadgetEvent(#mfDrawDice, @DrawDice())
BindGadgetEvent(#mfQuit, @Exit())
BindEvent(#PB_Event_CloseWindow, @Exit())
;La boucle evenementielle (Ne rien mettre à l'interieur)
Repeat : WaitWindowEvent() : ForEver
Else
Exit()
EndIf
EndProcedure
;Tirage des dés
Procedure DrawDice()
Static Countshots ;Nombre de tirage
Static ScorePlayer ;Score du joueur
Static ScoreIA ;Score de l'IA (Intelligence Artificiel)
Protected UserDices = Random(6, 1)
Protected IADices = Random(6, 1)
Protected Result.s = "TIRAGE "
Countshots + 1
Result + Countshots + #CRLF$ + "VOUS " + UserDices + " POINTS ET MOI " + IADices + " POINTS"
Select UserDices - IADices
Case 0 ; Egalité
Result + #CRLF$ + "C'EST UNE EGALITE"
Case 1 To 5 ; Gagné
Result + #CRLF$ + "VOUS AVEZ GAGNE CE TIRAGE"
ScorePlayer + 1
Case -5 To -1 ; Perdu
Result + #CRLF$ + "VOUS AVEZ PERDU CE TIRAGE!"
ScoreIA + 1
EndSelect
;Affichage du résultat du tirage
SetGadgetText(#mfIAMessage, Result)
SetGadgetText(#mfScrorePlayer, Str(ScorePlayer))
SetGadgetText(#mfScoreIA, Str(ScoreIA))
EndProcedure
;Fin du jeu
Procedure Exit()
End
EndProcedure