Voici un petit jeu ....

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci mais c'est pas que je voulais faire ce que veux faire c'est si on a :

exemple 10 points et apres on perds on perds 10 points que je veux faire
c'est d'enlever 10 points au score
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Bon, déjà, mets ça comme code pour les gains :

   If Resultat= 7
    gains= gains+10
     setgadgettext ( #Titre_2 , "GAGNÉ !" )
     setgadgettext ( #string_Gains , "" + str (gains))
   Else
    gains = gains -10
     If gains<0
        gains=0
     EndIf
     setgadgettext ( #Titre_2 , "PERDU!" )
     setgadgettext ( #string_Gains , "" + str (gains))
   EndIf
Ton problème des gains négatifs venait du fait que tu n'affichais les gains que si ceux-ci étaient gagnants, et que tu soustrait -10 même si les gains sont négatifs.

et ajoutes ça aussi avant de rejouer :

         Case #Bouton_rejouer
           messagerequester ( "Infos" , "Nouvelle partie" , #PB_MessageRequester_Ok )
          gains=0
          rejouer()


je pense qu'il vaut mieux remettre à zéro quand tu rejoues une partie.


Si je peux te donner un conseil, c'est de poser quelque peu ton programme sur papier : de faire un algorithme.

Si tu essaies de programmer à la volée, tu vas pas t'en sortir.

je veux bien t'aider, mais fais un minimum d'analyse pour ton programme.

Tu as quel age, quel est ton niveau en programmation, ta formation professionnelle c'est quoi ?

cela permettra à tout le monde sur le forum de t'aider si on connait ton niveau !!!

Pour les autres membres, c'est pas la peine de le charrier de suite, attendez sa réponse, la notion de logique programmation n'est pas donnée à tous !!!
Dernière modification par TazNormand le ven. 15/mai/2009 14:19, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

TazNormand a écrit : cela permettra à tout le monde sur le forum de t'aider si on connait ton niveau !!!!
t'inquiete on connais deja :lol:

(c'etait plus fort que moi :lol: )
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Dobro a écrit :
TazNormand a écrit : cela permettra à tout le monde sur le forum de t'aider si on connait ton niveau !!!!
t'inquiete on connais deja :lol:

(c'etait plus fort que moi :lol: )
Je ne veux pas avoir l'air de donner des leçons, je suis moi-même à la ramasse sur bien des sujets, mais j'ai envie de l'aider.

Peut-être a t'il des difficultés personnelles, je ne veux pas le juger avant de connaître sa réponse.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

TazNormand a écrit :
Je ne veux pas avoir l'air de donner des leçons, je suis moi-même à la ramasse sur bien des sujets, mais j'ai envie de l'aider.

Peut-être a t'il des difficultés personnelles, je ne veux pas le juger avant de connaître sa réponse.
mais ... c'est tout a ton honneur ! :)
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Dobro a écrit :
TazNormand a écrit :
Je ne veux pas avoir l'air de donner des leçons, je suis moi-même à la ramasse sur bien des sujets, mais j'ai envie de l'aider.

Peut-être a t'il des difficultés personnelles, je ne veux pas le juger avant de connaître sa réponse.
mais ... c'est tout a ton honneur ! :)
Yes, d'autant que JB13 a l'air de faire de réels efforts pour se mettre à la programmation, discipline ô combien ingrate quand on débute.
JB13 : je te félicite :D et t'encourage à poursuivre tes efforts tout en essayant d'être plus précis dans tes messages :wink:
Only PureBasic makes it possible
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci Cool Dji , de tes compliments tu pense quoi de mon petit jeu ?
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Que du bien. C'est une idée de jeu simple qui présente l'intérêt de te confronter à des questions techniques essentielles et c'est toujours plaisant à jouer de 7 à 77 ans :wink:
C'est un premier pallier que tu es en train de franchir :D .
L'essentiel est de se jeter à l'eau, le reste ça vient avec le temps et le travail. Le forum PB nous facilite beaucoup les choses. Notre communauté est une grande chance pour nous tous.
Only PureBasic makes it possible
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Bien, pour répondre à ta question en Message privé :

"Comment arrêter le jeu quand on atteint 100 ?"

de la même manière que tu testes que tu n'es pas en négatif pour les gains. C'est à dire que quand tu ajoutes +10 aux gains, si gains égal à 100, tu "sautes" à une partie de ton programme qui dit que tu as gagné, et que cette partie est terminée.

Quand je te conseille de "poser" ton programme sur papier, ce n'est pas pour rien. Déjà fixer les règles du jeu :

"Simili Analyse" :
1° Faire tourner 3 rouleaux
2° calcul des gains suivant "valeur" du rouleau
===>2.1° Si un des rouleau vaut 7, ajouter 10 aux gains
===>2.2° Si deux rouleaux valent 7, ajouter 30 aux gains
===>2.3° Si trois rouleaux valent 7, ajouter 50 aux gains
3° Si total des gains est 100, alors partie gagnée, on ne relance plus

ça te donne un squelette pour ton programme

Après ça, tu descend plus en profondeur dans l'analyse. Par exemple, tu peux dire que les 3 rouleaux tournent à la même vitesse, la vitesse diminue de moitié à chaque tour (sur 3 tours maxi par exemple) et que le rouleau 2 s'arrête deux secondes après le 1, et le 3 s'arrête deux secondes après le rouleau 2.

Comme j'ai pu voir sur tes différents messages sur le forum que tu préfères plus les exemples de code que les explications, je vais regarder pour te "mâcher" un peu le travail, mais n'hésites pas à écrire tes propres "routines", c'est comme ça qu'on apprend le mieux.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

je demande juste un petit exemple pour "Comment arrêter le jeu quand on atteint le score 100 ?
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Arrêt à 100, version simpliste et non optimisée :


;***** Bandit manchot *****
;***** écris par Jbernard *****

;**** Constantes *****
Enumeration
   #Fenetre_main
   #Cadre_0
   #cadre_2
   #Cadre_3
   #Titre_1
   #Titre_2
   #Titre_3
   #string_Resultat
   #string_Gains
   #Bouton_jouer
   #Bouton_rejouer
   #Font1
   #Font2
   #Font3
   #Font4
   #Font5
EndEnumeration

;**** Déclarations des variables ****
;*** Pour les polices ***
Global Font01,Font02,font03,Font04,Font05
;*** Pour le calcul du resultat et du gains
Global Resultat,gains,FinPartie
;*** Chargement de la police ****
Font01= loadfont ( #Font1 , "arial" ,20, #PB_Font_Bold )
Font02= loadfont ( #Font2 , "arial" ,50, #PB_Font_Bold )
font03= loadfont ( #Font3 , "arial" ,15, #PB_Font_Bold )
Font05= loadfont ( #Font5 , "Impact" ,50, #PB_Font_Bold )

;**** Les procédures ****

Procedure Calcul_Resultat()
    setgadgettext ( #Titre_2 , "" )
   Shared gains
  Resultat = random (9)
 
   ; Faire "tourner" le rouleau des chiffres
   ; Tout d'abord 3 fois complet
  speed=32
   For roul=1 To 3
    y=0
     Repeat
       displaytranslucentsprite (1,5,y+81,255)
       flipbuffers ()
       clearscreen ( rgb (255,255,0))
      y=y-speed
     Until y=<-902 ;738
    speed=speed/2
   Next roul
 
   ; puis une seule fois où on s'arrête sur le bon numéro
  y=0
   Repeat
     displaytranslucentsprite (1,5,y+81,255)
     flipbuffers ()
     clearscreen ( rgb (255,255,0))
    y=y-speed
   Until y<=((Resultat+1)*82)*-1
 
 
   setgadgettext ( #string_Resultat , "" + str (Resultat))
   If Resultat= 7
    gains= gains+10
     setgadgettext ( #Titre_2 , "GAGNÉ!" )
     setgadgettext ( #string_Gains , "" + str (gains))
     If gains=10
        FinPartie=1
         messagerequester ( "Fin de la partie" , "Bravo, vous avez atteint un gain de 100, la partie est terminée, cliquez sur Rejouer" , #PB_MessageRequester_Ok )
     EndIf
   Else
    gains = gains -10
     If gains<0
        gains=0
     EndIf
     setgadgettext ( #Titre_2 , "PERDU!" )
     setgadgettext ( #string_Gains , "" + str (gains))
   EndIf

ProcedureReturn FinPartie

EndProcedure

Procedure rejouer()
   setgadgettext ( #Titre_2 , "" )
   setgadgettext ( #string_Gains , "0" )
EndProcedure



;***** Création de la fenetre et des gadgets *****
; Initialisations Diverses
If initsprite () =0 Or initkeyboard ()=0 Or initmouse ()=0 Or initsprite3d ()=0
   messagerequester ( "Error" , "Sprite system can't be initialized" , 0)
   End
EndIf
     
If openwindow ( #Fenetre_main ,0,0,320,400, " Bandit Manchot " , #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered )
   If openwindowedscreen ( windowid ( #Fenetre_main ),130,80,45,80,0,0,0)
     clearscreen ( rgb (255,255,0))
   EndIf
   setwindowcolor ( #Fenetre_main , rgb ($0,$80,$FF))
   frame3dgadget ( #Cadre_0 ,10,10,300,50, "" )
   textgadget ( #Titre_1 ,35,20,250,30, "Bandit Manchot" , #PB_Text_Center )
   setgadgetfont ( #Titre_1 ,Font01)
   setgadgetcolor ( #Titre_1 , #PB_Gadget_FrontColor , rgb ($FF,$80,$C0))
   setgadgetcolor ( #Titre_1 , #PB_Gadget_BackColor , rgb ($0,$80,$FF))

   stringgadget ( #string_Resultat ,240,60,45,80, "" , #PB_String_Numeric|#PB_String_ReadOnly )
   setgadgetfont ( #string_Resultat ,Font02)
   setgadgetcolor ( #string_Resultat , #PB_Gadget_BackColor , rgb ($FF,$FF,$0))
  
   frame3dgadget ( #cadre_2 ,10,170,300,50, "" )
   textgadget ( #Titre_2 ,35,180,250,30, "" , #PB_Text_Center )
   setgadgetfont ( #Titre_2 ,Font01)
   setgadgetcolor ( #Titre_2 , #PB_Gadget_FrontColor , rgb ($FF,$80,$C0))
   setgadgetcolor ( #Titre_2 , #PB_Gadget_BackColor , rgb ($0,$80,$FF))
   ;***********************************************************
   frame3dgadget ( #Cadre_3 ,10,260,300,120, "" )
   textgadget ( #Titre_3 ,20,290,120,30, "Gains :" , #PB_Text_Center )
   setgadgetfont ( #Titre_3 ,font03)
   setgadgetcolor ( #Titre_3 , #PB_Gadget_FrontColor , rgb ($FF,$80,$C0))
   setgadgetcolor ( #Titre_3 , #PB_Gadget_BackColor , rgb ($0,$80,$FF))
   stringgadget ( #string_Gains ,150,290,80,30, "0" , #PB_String_Numeric|#PB_String_ReadOnly )
   setgadgetfont ( #string_Gains ,font03)
   setgadgetcolor ( #string_Gains , #PB_Gadget_BackColor , rgb ($FF,$FF,$0))
   buttongadget ( #Bouton_jouer ,60,350,60,20, "JOUER" )
  PureCOLOR_SetButtonColor( #Bouton_jouer , rgb ($FF,$FF,$0), rgb (0,0,0))
   buttongadget ( #Bouton_rejouer ,200,350,60,20, "REJOUER" )
  PureCOLOR_SetButtonColor( #Bouton_rejouer , rgb ($FF,$FF,$0), rgb (0,0,0))
 
   ; Création du "rouleau" de chiffres
   createsprite (1,36,821)
   For i=0 To 9
    startdrawing ( spriteoutput (1))
       drawingmode ( #PB_2DDrawing_Transparent )
       drawingfont ( fontid ( #Font5 ))
       drawtext (0,(i*82)+1, str (i), rgb (0,1,0), rgb (0,0,0))
     stopdrawing ()
   Next i
EndIf




;***** Boucle du programe ****

Repeat
   Select waitwindowevent ()
     Case #PB_Event_Gadget
       Select eventgadget ()
         Case #Bouton_jouer
           If Fin=0
            Fin=Calcul_Resultat()
           Else
             messagerequester ( "Fin de la partie" , "Bravo, vous avez atteint un gain de 100, la partie est terminée, cliquez sur Rejouer" , #PB_MessageRequester_Ok )
           EndIf
                      
         Case #Bouton_rejouer
            FinPartie=0
             messagerequester ( "Infos" , "Nouvelle partie" , #PB_MessageRequester_Ok )
            gains=0
            rejouer()
       EndSelect
     Case #PB_Event_CloseWindow
      Fermer = #True
     
   EndSelect
Until Fermer
End
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Petite Question pour les pros :

Je suis sous Vista, et quand je lance le source sur mon PB 4.30 Demo, j'ai une espèce de "clipping" écran, comme quand on cligne des paupières, normal ?

ma config :
C2Duo E8500
Gigabyte GA-EP45C-DS3R
2Go PC8500
Sapphire HD4850
écran ViewSonic VX924
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci de ton aide
seul truc que j'ai du mal à comprendre c'est
ProcedureReturn FinPartie

peux tu m'expliquer , jai tout eu des lacunes sur ProcedureReturn
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

Quand tu appelles ta procédure Calcul_Resultat(), le ProcedureReturn renvoie une valeur (FinPartie).

C'est pour ça que gadget "Jouer" n'appelle plus directement ta procédure, mais stocke le résultat de celle ci dans une variable fin.

Si Fin vaut 1 c'est que tu as obtenu 100 en gains, donc on ne peut plus appuyer sur "jouer", on affiche le messagerequester.

Le fait d'appuyer sur "Rejouer" remet la finpartie à 0.

je pense que mon code heurte la sensibilité des meilleurs "PureBasiciens" ici, mais je fais au plus vite pour t'expliquer
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

TazNormand a écrit :Quand tu appelles ta procédure Calcul_Resultat(), le ProcedureReturn renvoie une valeur (FinPartie).
et quitte la procedure !! :)
Répondre