Dés virtuels
La curiosité n’est pas un vilain défaut mais une qualité fondamentale.
Petit programme qui simule des dés.
En TCL/TK
#!/usr/bin/tclsh
package require Tk
# Define dices list
set dices [ list 4 6 8 10 12 20 100 ]
set maxdices 5
proc dice { number dice } {
global myFont
# number : Destination for output
# dice : max posibility for random (see dices list)
set out 0
set dis ""
for { set i 1 } { $i <= $number } { incr i } {
set val [ expr int(rand() * $dice)+1 ]
set out [ expr $out + $val ]
if { $i == 1 } {
set dis $val
} else {
set dis "$dis, $val"
}
}
set dis "$dis -> $out"
.result configure -font myFont -text "$dis"
return $out
}
font create myFont -family Helvetica -size 18 -weight bold
set count 0
foreach dc $dices {
label .l$count -font myFont -text "D$dc"
grid .l$count -row $count -column 0
for { set i 1 } { $i <= $maxdices } { incr i } {
button .b$count$i -font myFont -text "$i" -command "dice $i $dc"
grid .b$count$i -row $count -column $i
}
incr count
}
label .result -font myFont -text " "
grid .result -row $count -column 0 -columnspan [ expr $maxdices + 1 ]
En Python
#!/usr/bin/env python3
import random
import tkinter as tk
from tkinter import font
# liste des dés
dices = [4, 6, 8, 10, 12, 20, 100]
maxdices = 5
def dice(number, dice):
out = 0
values = []
for _ in range(number):
val = random.randint(1, dice)
out += val
values.append(str(val))
display = ", ".join(values) + f" -> {out}"
result_label.config(text=display)
return out
root = tk.Tk()
root.title("Dice")
myFont = font.Font(family="Helvetica", size=18, weight="bold")
count = 0
for dc in dices:
label = tk.Label(root, text=f"D{dc}", font=myFont)
label.grid(row=count, column=0)
for i in range(1, maxdices + 1):
btn = tk.Button(
root,
text=str(i),
font=myFont,
command=lambda i=i, dc=dc: dice(i, dc)
)
btn.grid(row=count, column=i)
count += 1
result_label = tk.Label(root, text=" ", font=myFont)
result_label.grid(row=count, column=0, columnspan=maxdices + 1)
root.mainloop()