#: Roulette.tcl - HaJo Gurt - 2005-07-07 #: French roulette table (only 1 zero) #########1#########2#########3#########4#########5#########6#########7##### package require Tk proc int x {expr int($x)} proc Carree {w x y w1 h1 txt c} { #: Draw large symbols for red and black set xr [expr {$w1*0.20}] set yr [expr {$h1*0.25}] $w create poly [expr {$x-$xr}] $y \ $x [expr {$y+$yr}] \ [expr {$x+$xr}] $y \ $x [expr {$y-$yr}] \ -tag $txt -fill $c } proc Color {nr} { #: Colors of the roulette-numbers set c [lindex {G R - R - R - R - R - - R \ - R - R - R R - R - R - \ R - R - - R - R - R - R } $nr] if {$c=="R"} { return red } if {$c=="-"} { return black } if {$c=="G"} { return green } else { return white } } proc Field {x1 y1 w1 h1 txt} { #: Draw one field of the table .c create rect $x1 $y1 [expr {$x1 + $w1}] [expr {$y1 + $h1}] -fill SpringGreen4 set x [expr {$x1 + $w1*.5}] set y [expr {$y1 + $h1*.5}] switch -regexp -- $txt { "Rouge" { Carree .c $x $y $w1 $h1 $txt red } "Noir" { Carree .c $x $y $w1 $h1 $txt black } "C" { .c create text $x $y -text " " -tag $txt -fill white } "[aPMD-]" { .c create text $x $y -text $txt -tag $txt -fill white } default { .c create text $x $y -text $txt -tag $txt -fill [Color $txt] } } } #########1#########2#########3#########4#########5#########6#########7##### # Height, Width: 22..50 : 9*40=360 14*40=560 set W1 30 set H1 30 set x0 [expr {$W1 * 3 }] set y0 0 set WW [expr {$W1 * 9 }] set HH [expr {$H1 * 14 }] set xx [expr {$W1* 9+10}] set yy [expr {$H1*14+10}] grid [canvas .c -width $xx -height $yy] .c config -scrollregion [list -5 -5 [expr {$xx-5}] [expr {$yy-5}]] set x $x0 set y $y0 set i 0 Field $x0 $y [expr {$W1*3}] $H1 0 incr y $H1 Field 0 [expr {$H1*1}] $x0 [expr {$H1*4}] "Passe" Field [expr {$W1*6}] [expr {$H1*1}] [expr {$W1*3}] [expr {$H1*4}] "Manque" Field 0 [expr {$H1*5}] $x0 [expr {$H1*4}] "Pair" Field [expr {$W1*6}] [expr {$H1*5}] [expr {$W1*3}] [expr {$H1*4}] "Impair" Field 0 [expr {$H1*9}] $x0 [expr {$H1*4}] "Noir" Field [expr {$W1*6}] [expr {$H1*9}] [expr {$W1*3}] [expr {$H1*4}] "Rouge" # Numbers: for { set i 1 } { $i <= 36 } { incr i } { Field $x $y $W1 $H1 $i if {$i%3 == 0} { incr y $H1 set x $x0 } else { incr x $W1 } } # Columns: set x $x0 for { set i 1 } { $i <= 3 } { incr i } { Field $x $y $W1 $H1 " Column$i" ;# Field remains empty incr x $W1 } # Dozens: (Premier/Medium/Dernier) set xR $x set xL [expr {$x0 - $W1 }] for { set i 1 } { $i <= 3 } { incr i } { Field $xL $y $W1 $H1 [lindex [list _ 12D 12M 12P] $i] Field $xR $y $W1 $H1 [lindex [list _ 12D 12M 12P] $i] incr xL -$W1 incr xR $W1 } #########1#########2#########3#########4#########5#########6#########7##### bind .c <Motion> { set tags [.c itemcget current -tag] set p [string first "current" $tags] set tags [string replace $tags $p end] wm title . "[int [%W canvasx %x]],[int [%W canvasy %y]] : $tags" }
HJG A simple french roulette table, but no gameplay yet.
To also show the wheel correctly, it would be nessessary to rotate text an arbitary angle, but I haven't looked yet into Rotate text on a canvas. Otherwise, it would look somewhat like the Alphabet Wheel...