PureBasic

Forums PureBasic
Nous sommes le Mer 23/Oct/2019 19:40

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 74 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Sam 14/Juil/2018 17:00 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
Ah oui, je viens de voir un ENDSELECT était mal placé... merci ! :)

Ah zut effectivement j'avais pas réfléchi minutieusement... Bon, pour la prochaine version du jeu, je vais apporter des modif pour rectifier l'équilibre. (Du genre donner +2 points quand on gagne avec les ciseaux, et un seul point lorsque l'on gagne avec le papier.

Sinon je vais voir de compléter en modifiant le jeu pour rajouter des options.

A bientôt ^^


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Sam 14/Juil/2018 17:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8769
pers j'aurai pas mis le puit.
sinon je ferai un bind général pour les event gadget et unr proce à part pour les points (j'ai gardé ton code au plus près de ce qu il était)
Code:
EnableExplicit
Enumeration
  #Pierre
  #Papier
  #Ciseaux
  #Puit
  #Texte
  #Score
 
 
EndEnumeration

Global.b Mes_points, resultat
Global.b Ses_points
Global Formwith = 800
Global a$

Declare Checkpoint()


Procedure ChekPoint()
 
  If Mes_Points = 6
    Resultat = MessageRequester("Felicitations","Bravo, tu as gagné ! On rejoue ? ",#PB_MessageRequester_YesNo)
  EndIf
  If Resultat = #PB_MessageRequester_Yes   
    a$ + "Oui"
  Else               
    a$ + "Non"
  EndIf
 
  If resultat = 6
    Ses_points = 0
    Mes_Points = 0
  Else
    If resultat = 7
      End
    EndIf
   
   
    If Ses_points = 6
      Resultat = MessageRequester("Dommage","Oh, tu as perdu... On rejoue ?",#PB_MessageRequester_YesNo)
    EndIf
   
    If Resultat = 6     
      a$ + "Oui"
    Else               
      a$ + "Non"
    EndIf
   
    If resultat = 6
      Ses_points = 0
      Mes_Points = 0
    Else
      If resultat = 7
        End
      EndIf
    EndIf
  EndIf
 
  SetGadgetText(#Score, Str(Mes_Points) + " <==== TOI / IA ====> " + Str(Ses_points))
EndProcedure


;==================================================================================



Procedure Partie()
 
 
  ; PIERRE
 
  Protected.b Adversaire
  Protected.l a$
 
  Select EventGadget()
     
    Case #Pierre
      Adversaire = Random(4,1)
     
      Select Adversaire
        Case 1
          MessageRequester(" . . . . Choix . . . .","Pierre")
        Case 2   
          MessageRequester(" . . . . Choix . . . .","Papier")
          Ses_Points +1
        Case 3
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Mes_points +1
        Case 4
          MessageRequester(". . . . Choix . . . .","Puit")
         
      EndSelect
     
      ChekPoint()
     
      ; PAPIER
     
    Case #Papier
      Adversaire = Random(4,1)
     
      Select Adversaire
        Case 1
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Mes_Points +1
        Case 2
          MessageRequester(" . . . . Choix . . . .","Papier")
        Case 3
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          ses_points +1
        Case 4
          MessageRequester(". . . . Choix . . . .","Puit")
          Mes_Points +1
         
      EndSelect
     
      ChekPoint()
     
      ; CISEAUX
     
    Case #Ciseaux
      Adversaire = Random(4,1)
     
      Select Adversaire
        Case 1
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Ses_Points +1
        Case 2
          MessageRequester(" . . . . Choix . . . .","Papier")
          Mes_Points +1
        Case 3
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
        Case 4
          MessageRequester(". . . . Choix . . . .","Puit")
          Ses_Points +1
         
      EndSelect
     
      ; PUIT
      ChekPoint()
     
     
    Case #Puit
      Adversaire = Random(4,1)
     
     
      Select Adversaire
        Case 1
          MessageRequester(" . . . . Choix . . . .","Pierre")
         
        Case 2
          MessageRequester(" . . . . Choix . . . .","Papier")
          Ses_Points +1
        Case 3
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Mes_Points +1
        Case 4
          MessageRequester(". . . . Choix . . . .","Puit ")
         
      EndSelect
      ChekPoint()
     
      EndSelect
     
     
    EndProcedure
   
   
   
    ;==================================================================================
   
   
   
    Procedure Resize()
     
      Protected wf = WindowWidth(0,1),wh = WindowHeight(0,1),bw = GadgetWidth(0,1),bh = GadgetHeight(0,1)
     
     
      ResizeGadget(#pierre,(wf /2) - (bw /0.3),(wh /1.85) - (bh /2),#PB_Ignore,#PB_Ignore) ; Pierre
      ResizeGadget(#Papier,(wf /2) - (bw /0.3),(wh /1.72) - (bh /2),#PB_Ignore,#PB_Ignore) ; Papier
      ResizeGadget(#Ciseaux,(wf /2) - (bw /0.3),(wh /2) - (bh /2),#PB_Ignore,#PB_Ignore)   ; Ciseaux
      ResizeGadget(#Puit,(wf /2) - (bw /0.3),(wh /2.19) - (bh /2),#PB_Ignore,#PB_Ignore)   ; Puit
      ResizeGadget(#Texte,(wf /2) - (bw /0.3),(wh /6.5) - (bh /2),#PB_Ignore,#PB_Ignore)   ; Texte
      ResizeGadget(#Score,(wf /2) - (bw /0.5),(wh /3) - (bh /2),#PB_Ignore,#PB_Ignore)     ; Score
     
     
     
    EndProcedure
   
   
   
    ;==================================================================================
   
   
   
    Procedure Fenetre()
     
     
      If OpenWindow(0,0,0,formWith,600,"Pierre, Papier, Ciseaux V.1.1",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
       
        ButtonGadget(#Pierre,0,0,230,20,"Pierre")
        ButtonGadget(#Papier,0,0,230,20,"Papier")
        ButtonGadget(#Ciseaux,0,0,230,20,"Ciseaux")
        ButtonGadget(#Puit,0,0,230,20,"Puit")
        TextGadget(#Texte,10,10,240,30,"Salut ! Tu veux jouer avec moi ? On va en 6 points",#PB_Text_Center)
        TextGadget(#Score,50,6,240,30,"0 <==== TOI / IA ====> 0")
       
       
        Resize()
       
        BindEvent(#PB_Event_SizeWindow,@Resize(),0)
       
        BindEvent(#PB_Event_Gadget , @Partie())
        ; BindGadgetEvent(#Papier, @Partie())
        ; BindGadgetEvent(#Ciseaux, @Partie())
        ; BindGadgetEvent(#Puit, @partie())
      EndIf
    EndProcedure
    fenetre()
   
   
   
    ;==================================================================================
   
    Define.l Event
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
    End

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Sam 14/Juil/2018 17:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8769
Une version dégrossie.
Regarde surtout la différence de la proce checkpoint

Code:
EnableExplicit
Enumeration
  #Pierre
  #Papier
  #Ciseaux
  #Texte
  #Score
 
 
EndEnumeration

Global.b Mes_points, resultat
Global.b Ses_points
Global Formwith = 800
Global message1$, message2$

Declare Checkpoint()


Procedure ChekPoint()
 
  If Mes_points = 6 Or Ses_points = 6
   
    If Mes_Points = 6
     
      Message1$ = "Felicitations"
      Message2$ = "Bravo, tu As gagné ! On rejoue ? "
     
    ElseIf Ses_points = 6
     
      Message1$ = "Dommage"
      Message2$ = "Oh, tu as perdu... On rejoue ?"
     
    EndIf
   
    Resultat = MessageRequester(Message1$, Message2$, #PB_MessageRequester_YesNo)
   
    If Resultat = #PB_MessageRequester_Yes   
      Ses_points = 0
      Mes_Points = 0
    Else               
      End
    EndIf
   
  EndIf
 
  SetGadgetText(#Score, Str(Mes_Points) + " <==== TOI / IA ====> " + Str(Ses_points))
EndProcedure


;==================================================================================



Procedure Partie()
 
 
  ; PIERRE
 
  Protected.b Adversaire
  Protected.l a$
 
  Select EventGadget()
     
    Case #Pierre
      Adversaire = Random(2)
     
      Select Adversaire
        Case 0
          MessageRequester(" . . . . Choix . . . .","Pierre = égalité")
        Case 1   
          MessageRequester(" . . . . Choix . . . .","Papier")
          Ses_Points +1
        Case 2
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Mes_points +1
         
      EndSelect
     
      ChekPoint()
     
      ; PAPIER
     
    Case #Papier
      Adversaire = Random(2)
     
      Select Adversaire
        Case 0
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Mes_Points +1
        Case 1
          MessageRequester(" . . . . Choix . . . .","Papier = égalité")
        Case 2
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          ses_points +1
         
      EndSelect
     
      ChekPoint()
     
      ; CISEAUX
     
    Case #Ciseaux
      Adversaire = Random(2)
     
      Select Adversaire
        Case 0
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Ses_Points +1
        Case 1
          MessageRequester(" . . . . Choix . . . .","Papier")
          Mes_Points +1
        Case 2
          MessageRequester(" . . . . Choix . . . .","Ciseaux = égalité")
                 
      EndSelect
     
      ChekPoint()
     
     
      EndSelect
     
     
    EndProcedure
   
   
   
    ;==================================================================================
   
   
   
    Procedure Resize()
     
      Protected wf = WindowWidth(0,1),wh = WindowHeight(0,1),bw = GadgetWidth(0,1),bh = GadgetHeight(0,1)
     
     
      ResizeGadget(#pierre,(wf /2) - (bw /0.3),(wh /1.85) - (bh /2),#PB_Ignore,#PB_Ignore) ; Pierre
      ResizeGadget(#Papier,(wf /2) - (bw /0.3),(wh /1.72) - (bh /2),#PB_Ignore,#PB_Ignore) ; Papier
      ResizeGadget(#Ciseaux,(wf /2) - (bw /0.3),(wh /2) - (bh /2),#PB_Ignore,#PB_Ignore)   ; Ciseaux
      ResizeGadget(#Texte,(wf /2) - (bw /0.3),(wh /6.5) - (bh /2),#PB_Ignore,#PB_Ignore)   ; Texte
      ResizeGadget(#Score,(wf /2) - (bw /0.5),(wh /3) - (bh /2),#PB_Ignore,#PB_Ignore)     ; Score
     
     
     
    EndProcedure
   
   
   
    ;==================================================================================
   
   
   
    Procedure Fenetre()
     
     
      If OpenWindow(0,0,0,formWith,600,"Pierre, Papier, Ciseaux V.1.1",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
       
        ButtonGadget(#Pierre,0,0,230,20,"Pierre")
        ButtonGadget(#Papier,0,0,230,20,"Papier")
        ButtonGadget(#Ciseaux,0,0,230,20,"Ciseaux")
        TextGadget(#Texte,10,10,240,30,"Salut ! Tu veux jouer avec moi ? On va en 6 points",#PB_Text_Center)
        TextGadget(#Score,50,6,240,30,"0 <==== TOI / IA ====> 0")
       
       
        Resize()
       
        BindEvent(#PB_Event_SizeWindow,@Resize(),0)
       
        BindEvent(#PB_Event_Gadget , @Partie())
        ; BindGadgetEvent(#Papier, @Partie())
        ; BindGadgetEvent(#Ciseaux, @Partie())
        ; BindGadgetEvent(#Puit, @partie())
      EndIf
    EndProcedure
    fenetre()
   
   
   
    ;==================================================================================
   
    Define.l Event
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
    End

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Sam 14/Juil/2018 18:03 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
Citation:
pers j'aurai pas mis le puit.
sinon je ferai un bind général pour les event gadget et unr proce à part pour les points


Concernant le puit, je vais équilibrer en rajoutant un cinquième élément : le cheval (Oui bon c'est ma fille qui a choisi... x) )
J'ai réussi ainsi à rééquilibrer le système de points, qui sera à présent de un nul, deux échecs et deux réussites pour tout le monde.

Pour ton bind général je ne savais pas que cela était possible, je retiens ça ce sera plus pratique merci ^^

Pour les boutons YES/NO merci aussi, c'est ce que je voulais faire à la base c'est beaucoup plus simple ainsi et plus propre. J'avais juste pas réussi à le faire comme ça, malgré la doc j'ai pu faire que le deuxième système plutôt alambiqué :lol:
Pourquoi faire simple quand on peut faire compliqué comme on dit lol

Je préfère ta deuxième version, je vais faire ainsi, pas mal le système de points à part aussi.

Merci beaucoup ! :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Dim 15/Juil/2018 2:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 31/Juil/2004 22:32
Messages: 1140
FR4NK13 a écrit:
le cheval (Oui bon c'est ma fille qui a choisi... x) )

C'est cool, comme ça Cheval contre Ciseaux, ça fait de la colle et des lasagnes :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Lun 16/Juil/2018 21:38 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
poshu a écrit:
FR4NK13 a écrit:
le cheval (Oui bon c'est ma fille qui a choisi... x) )

C'est cool, comme ça Cheval contre Ciseaux, ça fait de la colle et des lasagnes :D


Pouahahaha écoeurant xD

Voilà maintenant mon code marche pour l'instant (comprenez ; avant ma prochaine amélioration^^)
Mais j'aurais quelques questions @Ar-S :

J'ai fait des modifications, et j'aimerais avoir ton avis dessus. (Au besoin je remettrai comme tu as fait si c'est mieux)

Dans l'ordre :

- Pourquoi Random(2) ? ce n'est pas Random (3,1) normalement ? J'ai rajouté Puit et Cheval, du coup j'ai mis (4,0)
- Pourquoi ne pas mettre le Random une seule fois, au début de Partie comme j'ai fait là ?
- Pourquoi faut-il déclarer CHECKPOINT, mais pas les autres procédures ?
- Pourquoi ces message$ au lieu du Requester ? Comme cela, ça a l'air plus compliqué car il faut déclarer une variable.

Je crois que c'est à peu près tout... Ah oui, pourquoi "Resultat et après la virgule de la variable "mes points" et non à part ?

voici mon code :

Code:
EnableExplicit

Enumeration
  #Pierre
  #Papier
  #Ciseaux
  #Puit
  #Cheval
  #Texte
  #Score
EndEnumeration

Global.b Mes_points, resultat
Global.b Ses_points
Global Formwith = 800
Global message1$, message2$

Declare Checkpoint()

;==================================================================================


Procedure ChekPoint()

  If Mes_points = 6 Or Ses_points = 6
   
    If Mes_Points = 6
     
      Message1$ = "Felicitations"
      Message2$ = "Bravo, tu as gagné ! On rejoue ? :D "
     
    ElseIf Ses_points = 6
     
      Message1$ = "Dommage"
      Message2$ = "Oh, tu as perdu... On rejoue ? :)"
     
    EndIf
   
    Resultat = MessageRequester(Message1$, Message2$, #PB_MessageRequester_YesNo)
   
    If Resultat = #PB_MessageRequester_Yes   
      Ses_points = 0
      Mes_Points = 0
    Else               
      End
    EndIf
   
  EndIf

  SetGadgetText(#Score, Str(Mes_Points) + " <==== TOI / IA ====> " + Str(Ses_points))
EndProcedure


;==================================================================================


Procedure Partie()
 
  Protected.b Adversaire = Random(4,0)

  Select EventGadget()
     
      ; PIERRE
     
    Case #Pierre     
     
      Select Adversaire
        Case 0
          MessageRequester(" . . . . Choix . . . .","Pierre")
        Case 1   
          MessageRequester(" . . . . Choix . . . .","Papier")
          Ses_Points +1
        Case 2
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Mes_points +1
        Case 3
          MessageRequester(" . . . . Choix . . . .","Puit")
          Ses_Points +1
        Case 4
          MessageRequester(" . . . . Choix . . . .","Cheval")
          Mes_points +1
      EndSelect
     
      ChekPoint()
     
      ; PAPIER
     
    Case #Papier     
     
      Select Adversaire
        Case 0
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Mes_Points +1
        Case 1
          MessageRequester(" . . . . Choix . . . .","Papier")
        Case 2
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          ses_points +1
        Case 3
          MessageRequester(" . . . . Choix . . . .","Puit")
           Mes_Points +1
        Case 4
          MessageRequester(" . . . . Choix . . . .","Cheval")
          ses_points +1
      EndSelect
     
      ChekPoint()
     
      ; CISEAUX
     
    Case #Ciseaux     
     
      Select Adversaire
        Case #Pierre
          MessageRequester(" . . . . Choix . . . .","Pierre")
          Ses_Points +1
        Case #Papier
          MessageRequester(" . . . . Choix . . . .","Papier")
          Mes_Points +1
        Case #Ciseaux
          MessageRequester(" . . . . Choix . . . .","Ciseaux")     
        Case #Puit
          MessageRequester(" . . . . Choix . . . .","Puit")
          Ses_Points +1
        Case #Cheval 
          MessageRequester(" . . . . Choix . . . .","Cheval")
          Mes_Points +1
      EndSelect
     
      ChekPoint()
     
       ; PUIT
     
    Case #Puit     
     
      Select Adversaire
        Case #Pierre
          MessageRequester(" . . . . Choix . . . .","Pierre")
           Mes_Points +1
        Case #Papier
          MessageRequester(" . . . . Choix . . . .","Papier")
          Ses_Points +1
        Case #Ciseaux
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Mes_Points +1
        Case #Puit
          MessageRequester(" . . . . Choix . . . .","Puit")     
        Case #Cheval
          MessageRequester(" . . . . Choix . . . .","Cheval")
           Ses_Points +1
      EndSelect
     
      ChekPoint()
     
     
         ; CHEVAL
     
    Case #Cheval     
     
      Select Adversaire
        Case #Pierre
          MessageRequester(" . . . . Choix . . . .","Pierre")
            Ses_Points +1
        Case #Papier
          MessageRequester(" . . . . Choix . . . .","Papier")
          Mes_Points +1
        Case #Ciseaux
          MessageRequester(" . . . . Choix . . . .","Ciseaux")
          Ses_Points +1
        Case #Puit 
          MessageRequester(" . . . . Choix . . . .","Puit")
         Mes_Points +1
        Case #Cheval
          MessageRequester(" . . . . Choix . . . .","Cheval")
      EndSelect
     
      ChekPoint()
      ;===============================================================================================
     
      EndSelect
     
    EndProcedure   
   
   
;==================================================================================   
   
   
Procedure Resize()
     
      Protected wf = WindowWidth(0,1),wh = WindowHeight(0,1),bw = GadgetWidth(0,1),bh = GadgetHeight(0,1)
     
      ResizeGadget(#pierre,(wf /2) - (bw /0.3),(wh /2) - (bh /2),#PB_Ignore,#PB_Ignore)     ; Pierre
      ResizeGadget(#Papier,(wf /2) - (bw /0.3),(wh /1.85) - (bh /2),#PB_Ignore,#PB_Ignore)  ; Papier
      ResizeGadget(#Ciseaux,(wf /2) - (bw /0.3),(wh /1.72) - (bh /2),#PB_Ignore,#PB_Ignore) ; Ciseaux
      ResizeGadget(#Puit,(wf /2) - (bw /0.3),(wh /1.60) - (bh /2),#PB_Ignore,#PB_Ignore)    ; Puit
      ResizeGadget(#Cheval,(wf /2) - (bw /0.3),(wh /1.50) - (bh /2),#PB_Ignore,#PB_Ignore)  ; Cheval
      ResizeGadget(#Texte,(wf /2) - (bw /0.3),(wh /6.5) - (bh /2),#PB_Ignore,#PB_Ignore)    ; Texte
      ResizeGadget(#Score,(wf /2) - (bw /0.5),(wh /3) - (bh /2),#PB_Ignore,#PB_Ignore)      ; Score
 
    EndProcedure
   
   
;==================================================================================
   
     
    Procedure Fenetre()
     
     
      If OpenWindow(0,0,0,formWith,600,"Pierre, Papier, Ciseaux V.1.2",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
       
        ButtonGadget(#Pierre,0,0,230,20,"Pierre")
        ButtonGadget(#Papier,0,0,230,20,"Papier")
        ButtonGadget(#Ciseaux,0,0,230,20,"Ciseaux")
        ButtonGadget(#Puit,0,0,230,20,"Puit")
        ButtonGadget(#Cheval,0,0,230,20,"Cheval")
        TextGadget(#Texte,10,10,240,30,"Salut ! Tu veux jouer avec moi ? On va en 6 points",#PB_Text_Center)
        TextGadget(#Score,50,6,240,30,"0 <==== TOI / IA ====> 0")
       
       
        Resize()
       
        BindEvent(#PB_Event_SizeWindow,@Resize(),0)
        BindEvent(#PB_Event_Gadget , @Partie())
   
      EndIf
    EndProcedure
    fenetre()

   
;==================================================================================
   
    Define.l Event
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
    End


Bonne soirée :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Lun 16/Juil/2018 23:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8769
Salut.
- Excepté checkpoint(), tes proces sont appelées par callback. Mais dans tous les cas, tu peux (devrais) les déclarer, ça peut éviter des pépins dans les longs codes.
- Random (2) équivaut à random (2,0) Dans mon exemples, les choix étaient 0 1 2 (pierre feuille ciseaux)
Citation:
Pourquoi ne pas mettre le Random une seule fois, au début de Partie comme j'ai fait là ?

Pas en début de partie mais en début de ta proce qui s'active à chaque clic oui, j'aurai du le faire ainsi (même si ça change rien au déroulement de la chose)
Il en va de même pour ChekPoint() que tu peux simplement appeler une fois après ton endselect Ligne 180
Citation:
Pourquoi ces message$ au lieu du Requester ?

Le requester est une commande. Je ne l'appelle qu'une fois.. Donc pour l'appeler une seule fois en permettant d'afficher différente phrases, ils faut que ses phrases soient stockées dans des variables. Message1$ pour le titre du requester, Message2$ pour le contenu du message.
Imagine que tu veuilles traduire ton jeu en anglais... Il te faudrait faire une procédure qui dirait
Si langue FR alors Ciseaux.s = "ciseaux" OU si langue = US alors Ciseaux.s = "scissors" ainsi dans ton code tu affiches juste ton bouton(#bouton,x,y,l,h, Ciseaux.s)
Etc.. 8)

Citation:
pourquoi "Resultat et après la virgule de la variable "mes points" et non à part ?

ça c'est une synthaxe. On s'en fout un peu de l'ordre ici.
Je déclare globalement en .b tout ce qui se trouve à droite du .b
ça évite de devoir écrire : Global toto.b, titi.b, tata.b etc...
Je préfère déclarer les même types de variable sur la même ligne ainsi.
D'ailleurs j'avais utilisé .b car tes .l sont inutiles
Regarde dans la doc. (dans l'index, la commande =) tu verras que les .b (byte) vont d'une valeur de -128 à 128
ça suffit amplement pour résultat qui doit aller jusqu'à 6 ainsi que le score.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 20:45 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
Et me revoilà ici comme promis !

Donc j'ai tenté de refaire le pierre papier ciseaux sans regarder mon ancien code (j'ai eu du mal, j'ai un peu zieuté quand même.... :oops: :roll: ) bon pas trop non plus, juste pour le SELECT et le REPEAT à la fin.

Il y a juste un soucis que je n'arrive pas à résoudre sans tricher, le+STR pour le score.

PS : Merci Ar-s pour tes explications sur le post précédent, j'avais oublié de répondre :oops:

Code:
EnableExplicit

Enumeration
  #Texte
  #Score
  #Pierre
  #Papier
  #Ciseaux
EndEnumeration

Global Event
Global.b Mes_points, Ses_Points

Declare fenetre()
Declare Points()
Declare Partie()


Procedure fenetre()
 
 
  If OpenWindow(0, 0, 0, 1000, 1000, "Pierre, Papier, Ciseaux V.1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
    TextGadget(#Texte,470,100,100,100,"Bon jeu!")
    TextGadget(#Score,490,370,100,100,"0 - 0")
   
    ButtonGadget(#Pierre, 400,  190, 200, 20, "Pierre")
    ButtonGadget(#Papier, 400,  220, 200, 20, "Papier")
    ButtonGadget(#Ciseaux, 400, 250, 200, 20, "Ciseaux")
   
   
   
   
  EndIf
 
  ; Ici, j'ai répété trois fois l'opération pour ne pas tricher et regarder le code,
  ;mais je sais que l'on peut le faire en un seul Bind, en remplaçant la constante personnalisée par une constante unique de purebasic
  ;du genre "#Event_Pure_basic".
 
  BindGadgetEvent(#Pierre, @Partie())
  BindGadgetEvent(#Papier, @Partie())
  BindGadgetEvent(#Ciseaux, @Partie())
EndProcedure
fenetre()

Procedure points()
 
  If Mes_points = 1
    MessageRequester("info","tu as gagné")
    End ; Oui je sais, c'est pas bien. Il faut utiliser close_Windows. Mais c'est quoi la différence concrètement ? J'arrive pas à utiliser Close_Windows --'
  Else
    If Ses_Points = 1
      MessageRequester("info","Tu as perdu")
       End
    EndIf
   
  EndIf
 
  ; Voilà tout marche sauf la ligne ci-après. Je n'arrive pas à utiliser le +STR...
 
  TextGadget(#Score,490,370,100,100,""+Str(Mes_points.b)"")
 
EndProcedure

Procedure partie()
 
    Protected.b Adversaire = Random(3,1)

    ;Ici j'ai dû regarder mon code car je ne m'en sortais pas ; dans la doc, il manquait le select eventgadget
    ;et le case #constante
   
  Select EventGadget()
     
    Case #Pierre     
      Select Adversaire   
        Case 1
          MessageRequester("info","Pierre")
        Case 2
          MessageRequester("info","Papier")
          Ses_Points+1
        Case 3
          MessageRequester("info","Ciseaux")
          Mes_Points+1
      EndSelect
     
    Case #Papier
      Select Adversaire         
        Case 1       
         MessageRequester("info","Pierre")
          Mes_Points+1
        Case 2     
         MessageRequester("info","Papier")   
        Case 3     
         MessageRequester("info","Ciseaux")
          Ses_Points+1
      EndSelect
     
    Case #Ciseaux     
      Select Adversaire         
        Case 1         
          MessageRequester("info","Pierre")
          Ses_Points+1
        Case 2         
          MessageRequester("info","Papier") 
          Mes_Points+1
        Case 3         
        MessageRequester("info","Ciseaux")             
      EndSelect     
 
  EndSelect
  points()
EndProcedure

  ; Bon ici j'ai dû "tricher" un peu et jeter un oeil à mon ancien code,
  ;mais uniquement parce qu'il me manquait le "Event = WaitWindowEvent()"
  ;qui ne figurait pas dans la doc, et cela ne marchait pas sans.
 
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 20:53 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Citation:
; Voilà tout marche sauf la ligne ci-après. Je n'arrive pas à utiliser le +STR...

TextGadget(#Score,490,370,100,100,""+Str(Mes_points.b)"")

Code:
TextGadget(#Score,490,370,100,100,Str(Mes_points.b))

ou
Code:
TextGadget(#Score,490,370,100,100,"score :"+Str(Mes_points.b))


tes "" ne servent à rien s'il ne contiennent pas de text


Dernière édition par boby le Mar 31/Juil/2018 20:55, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 20:54 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
Merci Boby, tellement frustrant de foirer une ligne à cause de deux guillemets de trop... :roll:

Cela dit, l'affichage des points reste à 0 même si la valeur s'ajuste bien. J'ai encore dû mal placer un truc :lol:


Dernière édition par FR4NK13 le Mar 31/Juil/2018 20:56, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 20:56 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
je t'ai répondu trop vite sans vraiment lire, j'ai donc édit mon poste.
et tes guillemets n'était de trop que par-ce qu'elles étaient vide, mais tu peux très bien faire :
Code:
TextGadget(#Score,490,370,100,100,"score : "+Str(Mes_points.b)+" points")


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 20:58 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
C'est bon ça marche, j'avais oublié de retirer le ; lol...

Merci :)

Bon par contre je suis incapable de rajouter le 2e +STR pour le score adverse et ce, même avec le modèle... --'


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 21:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 31/Juil/2004 22:32
Messages: 1140
Bon.

Déjà, je vais profiter de cette histoire de "" + str() machin pour expliquer un truc : La conversion de type.
Comme tu as déjà du t'en rendre compte, Pure Basic est typé, ça veut dire qu'une variable ne peut contenir que ceux pour quoi elle a été créée. Une variable de .s ne peut contenir qu'une chaine de caractères, une .u ne peut contenir qu'un entier naturel inférieur à 65536, une .f supporte des nombre à virgule flottante, etc etc...

Mais que se passe-t-il quand on veut convertir l'un en l'autre?
On peut utiliser des fonctions comme str(), round() ou val(), mais Pure Basic est souvent capable de faire cette conversion tout seul : par exemple, il va arrondir tout seul si j'écris A.i = B.f . On appelle ça l'auto cast, c'est moins précis que si on le fait manuellement, mais c'est plus pratique quand on a est pas sur des calcules d'une grande précision...
J'en arrive maintenant au cas particulier des strings : en PB, pour convertir une variable en string, on a donc Str(), ce qui nous permet d'écrire String.s = Str(value.q).

Mais PB est aussi capable d'auto cast les valeurs en string, pour peu qu'on le fasse dans l'ordre. Ainsi String.s = Value.q + "quelquechose" renvoie l'erreur :
Code:
Line 1: Can't mix strings with numerical values.

Mais, si on place une string en premier, alors ça va marcher : String.s = "quelquechose" + Value.q ne pose aucun problème.
C'est un petit quirk, probablement lié au fait que le compilateur de PB soit single pass... Pas très important mais toujours rigolo.

Bon, je zieute ton code maintenant....


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mar 31/Juil/2018 22:15 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 31/Juil/2004 22:32
Messages: 1140
Aloooors. Déjà, en dehors du problème de string d'au dessus, ça marche, et ça c'est cool!

Je vais répondre à quelques questions :
Citation:
; Ici, j'ai répété trois fois l'opération pour ne pas tricher et regarder le code,
;mais je sais que l'on peut le faire en un seul Bind, en remplaçant la constante personnalisée par une constante unique de purebasic
;du genre "#Event_Pure_basic".
Alors là, y'a une petite confusion. Il y a deux type de bindevent dans pure : ceux sur des gadgets et ceux sur des events généraux.
Tu penses à BindEvent(#PB_Event_Gadget,@partie()); mais ce sont deux fonctions vraiment différentes : d'un coté, tu lies TOUS les gadgets à une seule fonction, de l'autre tu lies un gadget spécifique à une fonction spécifique.

Citation:
End ; Oui je sais, c'est pas bien. Il faut utiliser close_Windows. Mais c'est quoi la différence concrètement ? J'arrive pas à utiliser Close_Windows --'
Et bien non plus. End est effectivement la bonne commande pour fermer ton programme; closewindow() aurait fermé ta fenêtre, mais le programme aurait continué à tourner en tache de fond (enfin, il aurait planté à la boucle suivante, mais c'est un autre sujet)

Code:
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Bon, effectivement, la boucle event c'est pas pratique ni instinctif à utiliser pour un débutant. Cela dit, là, y'a une grosse redondance : tu stocks le résultat de la commande WaitWindowEvent() dans une variable que tu ne vas réutiliser qu'une seule fois, c'est donc inutile de la stocker :
Code:
Repeat
Until WaitWindowEvent()= #PB_Event_CloseWindow
(C'est du détail, mais ça me stresse :p)

Maintenant on va voir ensemble -étape par étape- les problèmes et tu vas essayer de les régler :
Premier problème :
Code:
Procedure fenetre()
   If OpenWindow(0, 0, 0, 1000, 1000, "Pierre, Papier, Ciseaux V.1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      
      TextGadget(#Texte,470,100,100,100,"Bon jeu!")
      TextGadget(#Score,490,370,100,100,"0 - 0")
      
      ButtonGadget(#Pierre, 400,  190, 200, 20, "Pierre")
      ButtonGadget(#Papier, 400,  220, 200, 20, "Papier")
      ButtonGadget(#Ciseaux, 400, 250, 200, 20, "Ciseaux")
      
   EndIf
   
   BindGadgetEvent(#Pierre, @Partie())
   BindGadgetEvent(#Papier, @Partie())
   BindGadgetEvent(#Ciseaux, @Partie())
EndProcedure
fenetre()
Qu'est ce qui t'a motivé à écrire ça comme ça? Est ce que tu vois le problème dans ce petit extrait?


Dernière édition par poshu le Mer 01/Aoû/2018 12:03, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Pierre Papier Ciseaux
MessagePosté: Mer 01/Aoû/2018 10:50 
Hors ligne

Inscription: Mar 03/Juil/2018 9:30
Messages: 72
Merci Poshu pour tes réponses ! :)

Alors je vais essayer de répondre sans rien oublier.

Concernant le callback, dans mon ancien pierre papier ciseaux je me souviens d'avoir fait un seul bind pour pierre papier et ciseaux qui appelaient @partie. Ca marchait très bien d'ailleurs, puisque les seuls boutons sont pierre papier ciseaux ici, et il n'y a pas de boutons qui appellent une autre procédure que partie. Donc tant mieux si là j'ai bien fait, mais je ne comprends pas pourquoi du coup bien que j'ai compris parfaitement ce que tu veux dire :lol:


Tant mieux pour End aussi alors ! Je pensais que close_windows était plus approprié. Je prends note que End est donc bien la commande à utiliser, que l'autre ne ferme pas le programme mais seulement la fenêtre. Logique encore une fois, car windows veut dire fenêtre. Merci :)


Pour le repeat effectivement j'ai compris le soucis maintenant, j'ai fait un système involontaire de variable avec le "event" sur une ligne seule. Je retiens donc de le maître à la suite du until.



Concernant le passage dans le code que tu me montres, de ce que j'ai compris hier, j'ai mal placé les bind, c'est ça ?

Je vais essayer de détailler ce que j'ai voulu faire :

1 : J'ouvre la fenêtre dans une procédure, j'y place les gadgets.
2 : Je place les bind dans la procédure, mais après le endif afin qu'il ne soit pas dans la condition. (Si tu me demandes pourquoi hors de la condition, je ne saurais pas te répondre et effectivement ça paraît illogique... :roll: me semblait que dedans ça plantait.

3 : j'ai appelé la procedure à la fin pour deux raisons ; la première, c'est que j'avais une erreur qui me disait en gros qu'il fallait au moins une fenêtre d'ouverte pour ne je sais plus quoi ; je n'ai pu régler ce problème qu'en appelant la procédure. La deuxième, j'ai choisi cette procédure à appeler car c'était la première à appeler selon moi vu que c'est la fenêtre.

Pour le STR+, je suis un peu perdue je t'avouerais. J'ai là aussi compris le principe : faire un système mixte de lettres/symboles et numériques, mais le procédé m’échappe encore.

Voilà, merci beaucoup encore pour tes messages :)

Je rententerai une troisième fois de refaire ce programme pierre papier ciseaux.

Le soucis avec la doc, c'est que par moment elle n'est pas très appropriée ou bien elle est incomplète (comme pour le select et le repeat/until).

Je vais donc m'entrainer avec les conditions if/select puis dans les autres fonctions à part comme pour ouvrir une fenetre Yes/No avant de me relancer une dernière fois dans le codage du pierre papier ciseaux.

Certes le plus délicat pour moi dans ce programme, c'est l'affichage du score. Donc une fois que je me serais encore un peu mieux familiariser avec les conditions, je vais essayer de travailler sur ça jusqu'à comprendre correctement le fonctionnement.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 74 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye