Page 1 sur 1

console/fenêtre

Publié : lun. 01/mars/2010 22:44
par Francis13
bonjour
J'essaie de transposer un programme console en mode fenêtre (après lecture et test des tutoriels )
voici le mode console

Code : Tout sélectionner

;jeu de dés  par Francis13     23/02/2010
; PureBasic 4.41 (Windows - x86)
;Ce programme vous demande combien de jets de dés vous voulez 
;que le prog fasse puis affiche le nombre de sorties par somme de 2 à 12 
; avec les pourcentages  et les doublets
;
Define.l de1,de2,i,somme,identique
Define.l nbJet ,nbDeCoup
Define.f pourcent
Dim tableau.l(12)
;
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Jets de Des")
ConsoleColor(14,0)
;
PrintN(" Ce programme vous demande de saisir un nombre de jets de des,simule le nombre")
PrintN(" de jets puis vous affiche les statistiques")
PrintN("")
Print("Combien de jets de des voulez vous ? : ")
nbJet =Val(Input())
 For i = 1 To nbJet
     de1 = Random(5)+1
     de2 = Random(5)+1
     If de1=de2
         identique = identique +1
     EndIf
     somme =de1 +de2   
     tableau(somme) =tableau(somme)+1    
Next i
PrintN("")

;
    For i =2 To 12
          pourcent = (tableau(i)/nbJet)*100
          Print(" La somme : "+Str(i) )
                If i<10   ; pour le décalage à l'affichage 
                   Print(" ")
                EndIf
          Print("   a ete realisee :" +Str(tableau(i)))
                If (tableau(i)) <10
                   Print(" ")  ;pour le décalage à l'affichage < 100
                EndIf
          PrintN(" fois soit :  % "+StrF(pourcent,1))
    Next i
    PrintN("")
    PrintN("nombre de doublets (1 a 6) :"+Str(identique))
    PrintN("")
PrintN("Merci d'avoir utilise ce programme,appuyez sur entree pour quitter")
Input()
CloseConsole()

;version ok tourne bien
Et voici la traduction douloureuse en mode fenêtre :

Code : Tout sélectionner

;jeu de dés  v 0.5
; PureBasic 4.41 (Windows - x86)
;Ce programme vous demande combien de jets de dés vous voulez 
;que le prog fasse puis affiche le nombre de sorties par somme de 2 à 12 
; avec les pourcentages  et les doublets
;         plus tard car il n'y a pas vu de boite de dialogue  genre inputbox de vb3/6 
Define.l Event
Global Dim tableau.l(12)
Global nbJet.l =120

; Window 
#WINDOW_MAIN = 0
; Gadget 
#gadget_bouton_Quitter = 0
#gadget_bouton_Calculer = 1
#EditorGadget_nb =2
#TextGadget_nb =3
; dimension_fenetre_pricipale
#Fenetre_Largeur =640
#Fenetre_Hauteur =320
#Flags =#PB_Window_SystemMenu|#PB_Window_MinimizeGadget
;===========================================================
Procedure initialise()  ;on initialise le tableau au debut 1 fois puis la procedure est incluse dans boutonCalculer
                 For j.l =0 To 12  
                  tableau(j) = 0    
                Next j
EndProcedure
Procedure ouvre_WINDOW_MAIN()
 If OpenWindow(#WINDOW_MAIN,0,0,#Fenetre_Largeur,#Fenetre_Hauteur,"Jeu de dés",#Flags)
      couleur =RGB(0,0,100);bleu foncé
      SetWindowColor(0,couleur)
   ButtonGadget(#gadget_bouton_Calculer,480,180,80,40,"Calculer")
   ButtonGadget(#gadget_bouton_Quitter,480,240,80,40,"Quitter")
   EditorGadget(#EditorGadget_nb,20,20,300,240, #PB_Editor_ReadOnly)
   SetGadgetColor(#EditorGadget_nb,#PB_Gadget_BackColor, $00FFFF) 
     TextGadget(#TextGadget_nb ,380,20,180,50,"la machine va effectuer 120 jets de dés.")
     SetGadgetColor(#TextGadget_nb,#PB_Gadget_BackColor, $00FFFF) 
  EndIf
   EndProcedure
Procedure BoutonCalculer()
   initialise()
  ClearGadgetItems(#EditorGadget_nb);efface qu'une partie de EditorGagget pourquoi ?
     
                For j.l = 1 To nbJet  ;simule les jets de dés 
         de1.l = Random(5)+1          ;le premier dé 
         de2.l = Random(5)+1          ;le deuxième
                If de1=de2
                  identique = identique +1
               EndIf
         somme.l =de1 +de2   
         tableau(somme) = tableau(somme)+1    
                Next j

   For i.l =2 To 12
       pourcent.f = (tableau(i)/nbJet)*100
       texte_1$ =" La somme : "+Str(i)           
       suite_2$ ="   a été realisée :" +Str(tableau(i))               
       fin_3$ = " fois soit :  % "+StrF(pourcent,1) ;afficher le % avec 1 chiffre aprés la virgule
       total$ =texte_1$ +suite_2$ +fin_3$ 
       AddGadgetItem(#EditorGadget_nb,i-2,total$);
   Next i
      doublet$ ="nombre de doublets (1 a 6) :"+Str(identique)
      AddGadgetItem(#EditorGadget_nb,i+1,"")
     AddGadgetItem(#EditorGadget_nb,i+2,doublet$)
    EndProcedure
;============================================================
;debut du programme
;==============================================================

ouvre_WINDOW_MAIN()

 Repeat
         Event = WaitWindowEvent()
            Select event 
                 Case #PB_Event_Gadget
                    Select EventGadget()              
                         Case #gadget_bouton_Quitter :                             
                           ClearGadgetItems(#EditorGadget_nb) ;n'efface pas tout ,pourquoi ?
                           AddGadgetItem(#EditorGadget_nb,0,"Merci d'avoir utilisé ce programme");ne s'affiche pas
                           Delay(2000)
                           Event =#PB_Event_CloseWindow
                         Case #gadget_bouton_Calculer :
                           BoutonCalculer()                                                                   
                     EndSelect
             EndSelect
  ;
 Until Event =#PB_Event_CloseWindow
 ;************************************************************************
End
     
je vous remercie par avance de vos conseils

Re: console/fenêtre

Publié : mar. 02/mars/2010 12:14
par MLD
Bonjour Francis 13
regarde ce code

Code : Tout sélectionner

;jeu de dés  v 0.5
; PureBasic 4.41 (Windows - x86)
;Ce programme vous demande combien de jets de dés vous voulez 
;que le prog fasse puis affiche le nombre de sorties par somme de 2 à 12 
; avec les pourcentages  et les doublets
;         plus tard car il n'y a pas vu de boite de dialogue  genre inputbox de vb3/6 
Define.l Event
Global Dim tableau.l(12)
Global nbJet.l =120

; Window 
#WINDOW_MAIN = 0
; Gadget 
#gadget_bouton_Quitter = 0
#gadget_bouton_Calculer = 1
#EditorGadget_nb =2
#TextGadget_nb =3
; dimension_fenetre_pricipale
#Fenetre_Largeur =640
#Fenetre_Hauteur =320
#Flags =#PB_Window_SystemMenu|#PB_Window_MinimizeGadget
;===========================================================
Procedure initialise()  ;on initialise le tableau au debut 1 fois puis la procedure est incluse dans boutonCalculer
                 For j.l =0 To 12  
                  tableau(j) = 0    
                Next j
EndProcedure
Procedure ouvre_WINDOW_MAIN()
If OpenWindow(#WINDOW_MAIN,0,0,#Fenetre_Largeur,#Fenetre_Hauteur,"Jeu de dés",#Flags)
      couleur =RGB(0,0,100);bleu foncé
      SetWindowColor(0,couleur)
   ButtonGadget(#gadget_bouton_Calculer,480,180,80,40,"Calculer")
   ButtonGadget(#gadget_bouton_Quitter,480,240,80,40,"Quitter")
   EditorGadget(#EditorGadget_nb,20,20,300,240, #PB_Editor_ReadOnly)
   SetGadgetColor(#EditorGadget_nb,#PB_Gadget_BackColor, $00FFFF) 
     TextGadget(#TextGadget_nb ,380,20,180,50,"la machine va effectuer 120 jets de dés.")
     SetGadgetColor(#TextGadget_nb,#PB_Gadget_BackColor, $00FFFF) 
  EndIf
   EndProcedure
Procedure BoutonCalculer()
   initialise()
  ClearGadgetItems(#EditorGadget_nb);efface qu'une partie de EditorGagget pourquoi ?
   While WindowEvent() : Wend  ;******************************************************************************** 
                For j.l = 1 To nbJet  ;simule les jets de dés 
         de1.l = Random(5)+1          ;le premier dé 
         de2.l = Random(5)+1          ;le deuxième
                If de1=de2
                  identique = identique +1
               EndIf
         somme.l =de1 +de2   
         tableau(somme) = tableau(somme)+1    
                Next j

   For i.l =2 To 12
       pourcent.f = (tableau(i)/nbJet)*100
       texte_1$ =" La somme : "+Str(i)           
       suite_2$ ="   a été realisée :" +Str(tableau(i))               
       fin_3$ = " fois soit :  % "+StrF(pourcent,1) ;afficher le % avec 1 chiffre aprés la virgule
       total$ =texte_1$ +suite_2$ +fin_3$ 
       AddGadgetItem(#EditorGadget_nb,i-2,total$);
   Next i
      doublet$ ="nombre de doublets (1 a 6) :"+Str(identique)
      AddGadgetItem(#EditorGadget_nb,i+1,"")
     AddGadgetItem(#EditorGadget_nb,i+2,doublet$)
    EndProcedure
;============================================================
;debut du programme
;==============================================================

ouvre_WINDOW_MAIN()

Repeat
         Event = WaitWindowEvent()
            Select event 
                 Case #PB_Event_Gadget
                    Select EventGadget()              
                         Case #gadget_bouton_Quitter :                             
                           ClearGadgetItems(#EditorGadget_nb) ;n'efface pas tout ,pourquoi ?
                           While WindowEvent() : Wend;**************************************************************
                           AddGadgetItem(#EditorGadget_nb,0,"Merci d'avoir utilisé ce programme");ne s'affiche pas
                           While WindowEvent() : Wend;**************************************************************
                           Delay(2000)
                           Event =#PB_Event_CloseWindow
                         Case #gadget_bouton_Calculer :
                           BoutonCalculer()                                                                   
                     EndSelect
             EndSelect
  ;
Until Event =#PB_Event_CloseWindow
;************************************************************************
End


J'ai simplement rendu la main a Window de temps en temps
Michel

Re: console/fenêtre

Publié : mar. 02/mars/2010 20:59
par Francis13
bonsoir
merci pour la correction de code.