#!/usr/bin/wish proc jump {} { global n_blank ans cur_focus cur_show if {"[.e{$cur_show} cget -state]" != "disabled"} { .l{$cur_show} configure -text "" } set r [expr int(rand()*$n_blank)] for {set i 0} {$i < $n_blank} {incr i} { set cur_focus [expr ($i+$r) % $n_blank] if { "[.e{$cur_focus} cget -state]" != "disabled" } break } if { $i >= $n_blank } { puts "congratulations!" exit } focus .e{$cur_focus} set r [expr int(rand()*$n_blank)] for {set i 0} {$i < $n_blank} {incr i} { set cur_show [expr ($i+$r) % $n_blank] if { "[.e{$cur_show} cget -state]" != "disabled" } break } .l{$cur_show} configure -text [lindex $ans $cur_show] after 2000 jump } proc check {i} { global ans if {[.e{$i} get] != [lindex $ans $i]} return .l{$i} configure -bg red -text [lindex $ans $i] .e{$i} configure -bg red -state disabled } set n_digit 4 set n_blank 5 set ans {} for {set i 0} {$i < $n_blank} {incr i} { entry .e{$i} -width $n_digit -takefocus 0 label .l{$i} -width $n_digit -bd 2 -relief ridge grid .e{$i} .l{$i} bind .e{$i} "check $i" lappend ans [expr int(rand()*pow(10,$n_digit))] } set cur_show 0 jump