Je me lance en vous proposant mon premier code:
Il s'agit juste d'afficher les résultats de plusieurs lancers de dés et de les montrer graphiquement.
Pour moi il s'agissait surtout d'apprendre à manipuler un certain nombre d'instructions et de gadget de PB.
Maintenant j'attends toutes les remarques que vous pourrez me faire pour corriger et améliorer ma manière de programmer.
On apprend par ses erreurs.
Code : Tout sélectionner
;-Démo de lancers de dé
; avec graphique et tableaux de résultats.
;PureBasic 4.51(x64) version demo
Enumeration
;interface
#Fen1
#Menu
#MenuQuit
#choix2
#choix21
#choix24
#Aide1
#Aide2
#Arbre1
#fermer
;aplication
#EditTirage1 ;tableau des résultats de chaque tirage d'un dé
#EditTirage2 ;tableau des résultats de chaque tirage de deux dés
EndEnumeration
Declare Menu()
Declare ButProgramme()
Declare ModeEmploi()
Declare DemandeNombretirages()
Declare Tirage1()
Declare Tirage2()
Declare Tirage()
Declare Tun(c)
Declare Tdeux(c)
Declare AffichUn(e)
Declare AffichDeux(e)
Declare Barres1(i)
Declare Barres2(i)
Declare Barres(i)
Declare Detruit()
Global Dim undet(5)
Global Dim deuxdest(10)
Global NombreTirages
largeurFen1=500
hauteurFen1= 750
titre$="Lancer de dés"
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
;-boucle principale
If OpenWindow(#Fen1, 0, 0, largeurFen1, hauteurFen1, titre$, #FLAGS)
SetWindowColor(#Fen1, RGB(100,100,200))
Menu()
Repeat
Event.l = WaitWindowEvent()
Select Event
Case #PB_Event_Menu ;Sélection d'événements dans le menu
Select EventMenu()
Case #MenuQuit
Quit = #True
Case #choix2
Tirage1()
Case #choix21
Tirage2()
Case #choix24
Tirage()
Case #Aide1
ButProgramme()
Case #Aide2
ModeEmploi()
EndSelect
Case #PB_Event_Gadget ;Sélection d'événements dans un gadget
Select EventGadget()
Case #fermer ;fermeture du mode d''emploi
FreeGadget(#Arbre1)
FreeGadget(#fermer)
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow Or Quit=#True
EndIf
;-Procédures de l'application
Procedure Tirage1() ;Gère les lancers d'un seul dé
Repeat
nbrti=DemandeNombretirages()
Tun(nbrti)
Barres1(nbrti)
Until nbrti = 0
Detruit()
EndProcedure
Procedure Tirage2() ;Gère les lancers de deux dés
Repeat
nbrti=DemandeNombretirages()
Tdeux(nbrti)
Barres2(nbrti)
Until nbrti = 0
Detruit()
EndProcedure
Procedure Tirage() ;Gère les lancers de un et deux dés
Repeat
nbrti=DemandeNombretirages()
Tun(nbrti)
Tdeux(nbrti)
Barres1(nbrti)
Barres2(nbrti)
Until nbrti = 0
Detruit()
EndProcedure
Procedure Barres1(a) ;Affiche les barres de progression des lancers d'un dé
If a=0
a=1
EndIf
x=-6
For t = 1 To 6
TextGadget (t+40, x+(t*30), 710, 30, 15, Str(t), #PB_Text_Center);
ProgressBarGadget(t+120,x+(t*30), 422, 30, 288, 0, 288, #PB_ProgressBar_Vertical)
SetGadgetState (t+120, undet(t-1)*288/a)
Next
EndProcedure
Procedure Barres2(a) ;Affiche les barres de progression des lancers de deux dés
If a=0
a=1
EndIf
x=165
For t = 2 To 12
TextGadget (t+50, x+(t*25), 710, 25, 15, Str(t), #PB_Text_Center)
ProgressBarGadget(t+130,x+(t*25), 422, 25, 288, 0, 288, #PB_ProgressBar_Vertical)
SetGadgetState (t+130, deuxdest(t-2)*576/a)
Next
EndProcedure
Procedure Barres(a) ;Affiche les barres de progression de tous les lancers
If a=0
a=1
EndIf
x=-24
For t = 1 To 6
TextGadget (t+40 ,x+(t*30), 710, 30, 15, Str(t), #PB_Text_Center)
ProgressBarGadget(t+120,x+(t*30), 422, 30, 288, 0, 288, #PB_ProgressBar_Vertical)
SetGadgetState (t+120, undet(t-1)*288/a)
Next
x=154
For t = 2 To 12
TextGadget (t+50, x+(t*20), 710, 20, 15, Str(t), #PB_Text_Center)
ProgressBarGadget(t+130,x+(t*20), 422, 20, 288, 0, 288, #PB_ProgressBar_Vertical)
SetGadgetState (t+130, deuxdest(t-2)*576/a)
Next
EndProcedure
Procedure DemandeNombretirages()
text$= Str(NombreTirages)
NombreTirages = Val(InputRequester("choix du nombre de coups","Entrez un nombre entier positif : (rien ou 0 pour quitter)",text$))
ProcedureReturn NombreTirages
EndProcedure
Procedure Tun(a) ;simule les lancers d'un dé et compte les points
un = deux = 0 : trois = quatre = 0 :cinq = six = 0
For i=1 To a
n= Random (5)+1
Select n
Case 1 : un = un + 1
Case 2 : deux = deux + 1
Case 3 : trois = trois + 1
Case 4 : quatre = quatre + 1
Case 5 : cinq = cinq + 1
Case 6 : six = six + 1
EndSelect
Next
undet(0)=un : undet(1)=deux : undet(2)=trois : undet(3)=quatre : undet(4)=cinq : undet(5)=six
AffichUn(a)
EndProcedure
Procedure Tdeux(a) ;simule les lancers de deux dés et compte les points
un = deux = 0 : trois = quatre = 0 :cinq = six = 0 : sept = huit = 0 : neuf = dix = 0 : onze = douze = 0
For i=1 To a
n= Random (5)+1
m= Random (5)+1
tirage=m+n
Select tirage
Case 2 : deux = deux + 1
Case 3 : trois = trois + 1
Case 4 : quatre = quatre + 1
Case 5 : cinq = cinq + 1
Case 6 : six = six + 1
Case 7 : sept = sept + 1
Case 8 : huit = huit + 1
Case 9 : neuf = neuf + 1
Case 10 : dix = dix + 1
Case 11 : onze = onze + 1
Case 12 : douze = douze + 1
EndSelect
Next
deuxdest(0) = deux : deuxdest(1) = trois : deuxdest(2) = quatre : deuxdest(3) = cinq : deuxdest(4) = six : deuxdest(5) = sept : deuxdest(6) = huit : deuxdest(7) = neuf : deuxdest(8) = dix : deuxdest(9) = onze : deuxdest(10)= douze
AffichDeux(a)
EndProcedure
Procedure AffichUn(a) ;affiche un tableau de résultats pour un dé
EditorGadget (#EditTirage1, 10, 10, 220, 280)
SetGadgetColor(#EditTirage1, #PB_Gadget_BackColor, RGB(255, 210, 50 ))
SetGadgetColor(#EditTirage1, #PB_Gadget_FrontColor, RGB(160, 0 , 200))
For i =0 To 5
AddGadgetItem(#EditTirage1, i+1, "Nombre de " + Str(i+1) + ":" + Chr(9) + Str(undet(i)) + Chr(9) + Left(StrF(undet(i) * 36/a),5) + " 36ième")
Next
EndProcedure
Procedure AffichDeux(a) ;affiche un tableau de résultats pour deux dés
EditorGadget(#EditTirage2, 270, 10, 220, 280)
SetGadgetColor(#EditTirage2, #PB_Gadget_BackColor, RGB(255, 210, 50))
SetGadgetColor(#EditTirage2, #PB_Gadget_FrontColor, RGB(160, 0, 200))
For i =0 To 10
AddGadgetItem(#EditTirage2, i+1, "Nombre de " + Str(i+2) + ":" + Chr(9) + Str(deuxdest(i)) + Chr(9) + Left(StrF(deuxdest(i)*36/a),5) + " 36ième")
Next
EndProcedure
Procedure Detruit() ;Efface tous les affichages avant chaque nouveau lancer
For i = 41 To 142
FreeGadget(i)
Next
FreeGadget(#EditTirage1)
FreeGadget(#EditTirage2)
EndProcedure
;-Procédures liées à l'interface et à l'aide
Procedure Menu()
If CreateMenu(#Menu, WindowID(#Fen1))
MenuTitle("menu1")
MenuBar()
MenuItem(#MenuQuit, "Quit")
MenuTitle("Choix")
MenuItem(#choix2, "Lancer un dé")
MenuItem(#choix21,"Lancer deux dés")
MenuItem(#choix24,"Comparer les deux")
MenuTitle("Aide")
MenuItem(#Aide1, "buts de ce programme")
MenuItem(#Aide2, "Mode d'emploi")
EndIf
EndProcedure
Procedure ButProgramme()
MessageRequester("aide", "Ce logiciel est destiné à montrer le fonctionnement du hasard en comparant deux cas simples : le lancer d'un seul dé et celui de deux dés....",#PB_MessageRequester_Ok)
EndProcedure
Procedure ModeEmploi()
If TreeGadget(#Arbre1, 40, 10, 419, 500)
AddGadgetItem (#Arbre1, -1, "Mode d'emploi", 0, 0)
AddGadgetItem (#Arbre1, -1, "Généralités", 0, 1)
AddGadgetItem (#Arbre1, -1, "Le mode d'emploi est simple : il suffit de choisir dans le menu -choix-,", 0, 2)
AddGadgetItem (#Arbre1, -1, "puis d'entrer le nombre de lancers voulus.", 0, 2)
AddGadgetItem (#Arbre1, -1, "Lancer d'un seul dé", 0, 1)
AddGadgetItem (#Arbre1, -1, "Puisqu'il y a six cas possibles, vous avez une chance sur six de tomber",0,2)
AddGadgetItem (#Arbre1, -1, "sur l'un des six nombres.",0,2)
AddGadgetItem (#Arbre1, -1, "À chaque lancer le hasard est total. Vous pouvez le constater en répétant", 0, 2)
AddGadgetItem (#Arbre1, -1, "des petits nombres de tirages, voire plusieurs fois le même petit nombre.",0,2)
AddGadgetItem (#Arbre1, -1, "Pourtant sur un grand nombre de lancers, les résultats s'équilibrent :", 0, 2)
AddGadgetItem (#Arbre1, -1, "tout les nombres joués arrivent à la même hauteur.", 0, 2)
AddGadgetItem (#Arbre1, -1, "Lancer de deux dés", 0, 1)
AddGadgetItem (#Arbre1, -1, "Ici le résultat est moins simple. Le hasard est toujours présent et rien", 0, 2)
AddGadgetItem (#Arbre1, -1, "n'est prévisible pour les petits nombres.", 0, 2)
AddGadgetItem (#Arbre1, -1, "Les possibilités ne sont plus égales à six. Je vous laisse trouver à", 0, 2)
AddGadgetItem (#Arbre1, -1, "combien elles s'élèvent.", 0, 2)
AddGadgetItem (#Arbre1, -1, "essayez de prévoir les résultats et la forme du graphique avant de", 0, 2)
AddGadgetItem (#Arbre1, -1, "jouer. Lancez le jeu et voyez si les résultats sont conformes à vos attentes.", 0, 2)
AddGadgetItem (#Arbre1, -1, "Comparaisons", 0, 1)
AddGadgetItem (#Arbre1, -1, "En réunissant les deux jeux précédents vous pouvez comparer et tester", 0, 2)
AddGadgetItem (#Arbre1, -1, "à volonté.", 0, 2)
ButtonGadget(#fermer,459,11,15,15,"X")
EndIf
EndProcedure