Petit jeu de dés : Se familiariser avec le code événementiel

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Petit jeu de dés : Se familiariser avec le code événementiel

Message par falsam »

Un petit jeu de dés pour se familiariser avec le code événementiel.

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
Je ne détiens pas LA bonne méthode de travail, mais ça fonctionne :wink:
Dernière modification par falsam le mer. 01/août/2018 11:27, modifié 3 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Petit jeu de dés : Se familiariser avec le code événemen

Message par Micoute »

Merci pour le partage, j'adore et je vais réutiliser pour mes petits enfants.
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 !
Répondre