This is the GUI-version of [HiLo]: ---- # HiLo2.tcl - HaJo Gurt - 2005-06-20 # Simple number-guessing-game with GUI #########.#########:#########^#########+#########-#########*#########$##### # Return a number in the range 0 .. $range-1 proc random { {range 100} } { return [expr {int(rand()*$range)}] } # Output string to one of the text-widgets proc Disp { {w .res1} {str ""} } { $w insert end "\n" $w insert end $str $w see end ;# scroll to bottom } proc Disable {} { .inp1 config -state readonly .but1 config -bg green } proc NewGame {} { #set ::Secret 13 set ::Secret [expr {[random $::Max] +1 }] set ::nGuess 0 .res1 delete 0.0 end .res2 delete 0.0 end Disp .res1 " Guess my number:\n" Disp .res2 " (1 .. $::Max) \n" .inp1 config -state normal .but1 config -bg grey } proc TestNum {} { ;# ?? set ok [string is integer $::Guess] if {$ok==0} {bell} return $ok } proc Update {} { global Secret Guess nGuess set ok [string is integer $::Guess] if {$ok==0} { bell ;# alert: input-error } else { incr ::nGuess if {$Guess < $::Secret} { Disp .res1 "$Guess is too low" } if {$Guess > $::Secret} { Disp .res2 "$Guess is too high" } if {$Guess == $::Secret} { Disable Disp .res1 "$Guess is correct.\nYou needed $nGuess guesses."; } } set Guess "" ;# clear input-field } proc Init {} { global Max Secret Guess nGuess set Max 100 frame .f1 frame .f2 ;# -bg blue -relief ridge pack .f1 .f2 -pady 2 text .res1 -width 20 -height 10 text .res2 -width 20 -height 10 pack .res1 .res2 -in .f1 -side left tk_optionMenu .opt1 Max 16 64 100 128 256 512 1000 1024 2048 4096 8192 button .but1 -text "New game" -command {NewGame} label .lx -text "" -anchor c -padx 12 ;# Spacer label .lab1 -text "Guess:" entry .inp1 -width 5 -textvariable Guess ;#-validatecommand TestNum -validate key pack .opt1 .but1 .lx .lab1 .inp1 -in .f2 -side left -padx 2 -pady 2 bind .inp1 {Update} wm title . "HiLo 2" NewGame } Init focus -force .inp1 ---- [HJG] The options -relief and -validatecommand did not work as expected, but otherwise everything works fine. ---- [Category Games]