Pierre Papier Ciseaux
Re: Pierre Papier Ciseaux
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 ^^
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 ^^
Re: Pierre Papier Ciseaux
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)
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 : Tout sélectionner
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 ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Pierre Papier Ciseaux
Une version dégrossie.
Regarde surtout la différence de la proce checkpoint
Regarde surtout la différence de la proce checkpoint
Code : Tout sélectionner
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 ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Pierre Papier Ciseaux
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) )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 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é
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 !
Re: Pierre Papier Ciseaux
C'est cool, comme ça Cheval contre Ciseaux, ça fait de la colle et des lasagnesFR4NK13 a écrit : le cheval (Oui bon c'est ma fille qui a choisi... x) )
Re: Pierre Papier Ciseaux
Pouahahaha écoeurant xDposhu a écrit :C'est cool, comme ça Cheval contre Ciseaux, ça fait de la colle et des lasagnesFR4NK13 a écrit : le cheval (Oui bon c'est ma fille qui a choisi... x) )
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 : Tout sélectionner
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
Re: Pierre Papier Ciseaux
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)
Il en va de même pour ChekPoint() que tu peux simplement appeler une fois après ton endselect Ligne 180
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..
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.
- 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)
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)Pourquoi ne pas mettre le Random une seule fois, au début de Partie comme j'ai fait là ?
Il en va de même pour ChekPoint() que tu peux simplement appeler une fois après ton endselect Ligne 180
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.Pourquoi ces message$ au lieu du Requester ?
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..
ça c'est une synthaxe. On s'en fout un peu de l'ordre ici.pourquoi "Resultat et après la virgule de la variable "mes points" et non à part ?
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 ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Pierre Papier Ciseaux
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.... ) 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
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.... ) 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
Code : Tout sélectionner
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
Re: Pierre Papier Ciseaux
; 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 : Tout sélectionner
TextGadget(#Score,490,370,100,100,Str(Mes_points.b))
Code : Tout sélectionner
TextGadget(#Score,490,370,100,100,"score :"+Str(Mes_points.b))
Dernière modification par boby le mar. 31/juil./2018 20:55, modifié 1 fois.
Re: Pierre Papier Ciseaux
Merci Boby, tellement frustrant de foirer une ligne à cause de deux guillemets de trop...
Cela dit, l'affichage des points reste à 0 même si la valeur s'ajuste bien. J'ai encore dû mal placer un truc
Cela dit, l'affichage des points reste à 0 même si la valeur s'ajuste bien. J'ai encore dû mal placer un truc
Dernière modification par FR4NK13 le mar. 31/juil./2018 20:56, modifié 1 fois.
Re: Pierre Papier Ciseaux
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 :
et tes guillemets n'était de trop que par-ce qu'elles étaient vide, mais tu peux très bien faire :
Code : Tout sélectionner
TextGadget(#Score,490,370,100,100,"score : "+Str(Mes_points.b)+" points")
Re: Pierre Papier Ciseaux
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... --'
Merci
Bon par contre je suis incapable de rajouter le 2e +STR pour le score adverse et ce, même avec le modèle... --'
Re: Pierre Papier Ciseaux
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 :
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....
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 : Tout sélectionner
Line 1: Can't mix strings with numerical values.
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....
Re: Pierre Papier Ciseaux
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 :
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.
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 :
(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 : Qu'est ce qui t'a motivé à écrire ça comme ça? Est ce que tu vois le problème dans ce petit extrait?
Je vais répondre à quelques questions :
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.; 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".
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.
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)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 --'
Code : Tout sélectionner
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
Repeat
Until WaitWindowEvent()= #PB_Event_CloseWindow
Maintenant on va voir ensemble -étape par étape- les problèmes et tu vas essayer de les régler :
Premier problème :
Code : Tout sélectionner
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()
Dernière modification par poshu le mer. 01/août/2018 12:03, modifié 1 fois.
Re: Pierre Papier Ciseaux
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
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... 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.
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
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... 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.