Pierre Papier Ciseaux

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pierre Papier Ciseaux

Message par falsam »

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 ?
Regarde cet exemple :wink:
https://www.purebasic.fr/french/viewtop ... =1&t=17370
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%
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Merci Falsam, j'avais déjà regardé vite fait quand tu me l'a montré hier :)

Pour les bind ils sont dans la procédure là comme les miens, mais il n'y a pas de IF à ton openwindows, alors ça ne m'aide pas pour que je place mes bind correctement dans la procédure :oops:
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pierre Papier Ciseaux

Message par falsam »

FR4NK13 a écrit :Pour les bind ils sont dans la procédure là comme les miens, mais il n'y a pas de IF à ton openwindows, alors ça ne m'aide pas pour que je place mes bind correctement dans la procédure
Mon code est modifié. Tu peux regarder.

PS : J'ai ajouté un Else vers la sortie de l'application au cas ou la fenêtre ne pourrait pas être créer :mrgreen:
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%
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Merci, maintenant j'ai confirmation que mon erreur et d'avoir mis mes binds hors du IF, du coup ça devait planter pour autre chose alors les binds qui ne marchaient pas dedans, ou alors j'ai jamais essayé dedans, je ne sais même plus :lol:

Donc les binds en toute logique doivent faire partie du IF, puisque c'est une prolongation des gadgets, merci :)


Par contre, je me suis rendue compte qu'une modification que j'ai appliquée fait planter mon programme :

Code : Tout sélectionner

Repeat 
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Comme cela ça marche très bien, mais dès que je mets sur les deux lignes donc comme ça :

Code : Tout sélectionner

Repeat
Until WaitWindowEvent= #PB_Event_CloseWindow
Ca fait planter avec pour message

[12 :34 :39] Type d'exécutable: Windows - x86 (32bit, Unicode)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Pierre Papier Ciseaux

Message par poshu »

FR4NK13 a écrit :

Code : Tout sélectionner

Repeat
Until WaitWindowEvent= #PB_Event_CloseWindow
Ca fait planter avec pour message

[12 :34 :39] Type d'exécutable: Windows - x86 (32bit, Unicode)
Je vois très facilement le problème, relis toi bien sur ce coup.
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.
Et bien, non, c'était beaucoup plus basique que ça : pourquoi mettre tout ça dans une procédure si tu ne l'appelles qu'une fois, surtout si tu l'appelles juste après l'avoir créée?

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()
et ça

Code : Tout sélectionner

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())
Ca donne exactement le même résultat. Découper son code en procedure c'est cool, mais faut pas non plus faire ça systématiquement : si ça ne sert pas, autant ne pas rajouter des lignes de codes inutiles.
Dernière modification par poshu le mer. 01/août/2018 11:46, modifié 1 fois.
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Ce que je vois déjà, c'est qu'il faut redéfinir une variable pareil qu'avant, donc le problème n'est pas vraiment résolu pour le coup de ne pas stocker la valeur dans une variable. Je reflechis mais là je sèche :lol:

D'accord Poshu, j'ai un peu trop pris à coeur l'utilisation des procédures :lol: Donc je note de n'utiliser les procédures que lorsque c'est un peu comme un boucle en soit ? enfin pas une boucle, mais une partie qui est souvent sollicitée.
En l'occurence effectivement, une fois appelé, la fenêtre ne le sera plus puisqu'elle l'est déjà.

Il me semblait avoir vu un peu partout que les fenêtres se plaçaient dans des procédures ? J'imagine que cela dépend du contenu de la fenêtre.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Pierre Papier Ciseaux

Message par poshu »

FR4NK13 a écrit :Ce que je vois déjà, c'est qu'il faut redéfinir une variable pareil qu'avant, donc le problème n'est pas vraiment résolu pour le coup de ne pas stocker la valeur dans une variable. Je reflechis mais là je sèche :lol:
Il faut redéfinir une variable? Vraiment? Ça devrait pourtant te mettre sur la voie :p
FR4NK13 a écrit :D'accord Poshu, j'ai un peu trop pris à coeur l'utilisation des procédures :lol: Donc je note de n'utiliser les procédures que lorsque c'est un peu comme un boucle en soit ? enfin pas une boucle, mais une partie qui est souvent sollicitée.
En l'occurence effectivement, une fois appelé, la fenêtre ne le sera plus puisqu'elle l'est déjà.

Il me semblait avoir vu un peu partout que les fenêtres se plaçait dans des procédures ? J'imagine que cela dépend du contenu de la fenêtre.
Y'a aucune règle sur le placement d'une fenêtre dans une procédure. Les procédures sont 100% facultatives dans PB : tu peux techniquement tout faire sans elles MAIS ton code va devenir illisible très vite.
L'important, c'est donc de choisir quand créer une procédure et quand mettre son code directement. Dans ce cas spécifique, c'est effectivement plus simple et plus propre de ne pas utiliser de procédure.
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

D'accord merci, bon, pour le repeat/until je sèche toujours par contre :oops:
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Pierre Papier Ciseaux

Message par poshu »

Bon, bah WaitWindowEvent c'est une variable, ce que tu veux, c'est la fonction WaitWindowEvent() ;p
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Mon dieu que je suis nulle xD

Merci, avec les parenthèses ça marche nickel, même si du coup ça fait une procédure vide ? Enfin je comprends pas trop là, c'est une procedure donc ?
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Pierre Papier Ciseaux

Message par poshu »

Euh... Je suis pas sur de bien comprendre, WaitWindowEvent() est une fonction qui appartient à PureBasic lui même : tu peux appuyer sur F1 pour avoir plus d'information dessus.
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Oui on va oublier ce que je viens de dire xD

Voilà en passant maintenant après avoir rectifié ce qui n'allait pas, mon setgadget marche nickel.

Cela dit j'ai du mal à comprendre son utilisation ici.

Il est dit dans la doc "Modifie le texte contenu dans un gadget. "

Est-ce que l'on pourrait plutôt dire "Modifie le contenu DE LA VARIABLE dans un gadget." ?
Car le seul truc qui est modifié ici, c'est la valeur des variables Mes_points et Ses_Points.
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Pierre Papier Ciseaux

Message par boby »

Ce veux dire que ça change le texte contenu dans le gadget, que ce texte soit stocké dans une variable ou non ne change rien.
setgadgettext(gadget,"bla bla bli bli blo blo")
c'est la même chose que
variable.s = "bla bla bli bli blo blo"
setgadgettext(gadget,variable)
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Pierre Papier Ciseaux

Message par FR4NK13 »

Merci Boby, mais je n'ai compris que la première phrase, qui confirme cela dit que j'ai plus ou moins compris :lol:
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pierre Papier Ciseaux

Message par Ar-S »

Tu chipotes, et tu chipotes à tord.
Boby à bien répondu.

setgadgettext() affiche un texte dans le gadget dédié. Que ton texte soit stocké dans une variable.s ou pas.

En gros cette commande dit :
"Affiche ce texte."
Que le texte soit directement écris ou qu'il soit dans une variable.s peu importe !
et il te le prouve avec cette exemple

Code : Tout sélectionner

setgadgettext(gadget,"bla bla bli bli blo blo")
;c'est la même chose que
variable.s = "bla bla bli bli blo blo"
setgadgettext(gadget,variable)
C'est donc bien la bonne définition : "Modifie le texte contenu dans un gadget. "
~~~~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
Répondre