home *** CD-ROM | disk | FTP | other *** search
- # Wally
-
- set even 0
- set size 9x9
- set edge 0.4
-
- source {<tcl$Dir>.!Choices}
-
- w_init Wally
-
- source {<tcl$Dir>.library.debug}
-
- set made 0
- set rest ""
-
- w_box progInfo create "About this program"\
- { vlist {info Name Wally}
- {info Purpose "Play Go"}
- {info Author W.H.Newman}
- {info "Front End" C.T.Stretch}
- {info Version 0.00}
- }
-
- w_box setup create "Set up board"\
- { vlist {option Even even}
- {hlist {radio 9x9 size} {radio 11x11 size} {radio 13x13 size}}
- {hlist {radio 15x15 size} {radio 17x17 size} {radio 19x19 size}}
- {hlist {action Cancel} {default Set {set x 0}}}
- }
-
- w_text show create -title "Wally Output" -width 6i -close {list 2}
- w_text show open
-
- proc play {}\
- { global size n edge made even stones grid
- set made 1
- set n [string first x $size]
- set n [string range $size 0 [expr $n-1]]
- w_draw board create\
- -page "[expr ($n+1)*$edge]ix[expr ($n+1)*$edge]i"\
- -xscale ${edge}i -yscale ${edge}i\
- -bg 255:200:0\
- -click {clickproc %x %y}\
- -close closeboard\
- -menu {Wally {Pass -click {w_task prog send pass\n}}
- {Resign -click {w_task prog send .\n}}
- {List -click {w_text show open}}
- }
- set grid ""
- set empty [string range "....................." 0 [expr $n-1]]
- for {set i 1} {$i<=$n} {incr i}\
- { append grid (1,$i)-($n,$i)($i,1)-($i,$n)
- set stones($i) $empty
- w_draw board text ($n.5,$i) [expr $n+1-$i] -oml -fn@10p
- w_draw board text ($i,.3) \
- [string index "?abcdefghjklmnopqrstuvwxyz" $i] -oc -fn@10p
- }
- set grid [w_draw board path $grid -t0.02i]
- w_draw board open
- set e ""
- if {$even==1} {set e -even}
- w_task prog create -receive "out {%o}"\
- -command "\"<Wally\$Dir>.Wally $n $e\""
- }
-
-
- proc closeboard {}\
- { global stones made
- unset stones
- w_task prog kill
- set made 0
- }
-
- proc out {o}\
- { global rest
- if {$o==""} {w_error "null string";return}
- set o [split $rest$o \n]
- set n [expr [llength $o]-1]
- set rest [lindex $o $n]
- set o [lrange $o 0 [expr $n-1]]
- foreach i $o {use $i}
- }
-
- proc use {q}\
- { global stones n
- regsub -all " " $q "" p
- if {[regexp {(^[0-9]+)([.O#]+)} $p a m s]}\
- { if { $s!=$stones($m) }\
- { set a $stones($m)
- for {set x 0} {$x<$n} {incr x} \
- { set b [string index $s $x]
- if {$b!=[string index $a $x]} {change [expr $x+1] $m $b}
- }
- set stones($m) $s
- }
- return
- }
- w_text show print $q
- }
-
- proc showboard {}\
- { global made
- if {$made==1} {w_draw board open}\
- else play
- }
-
- proc change { x y c }\
- { global n objects
- set y [expr $n+1-$y]
- if {$c=="."} {w_draw board delete $objects($x:$y);return}
- set r 0.45
- set k [expr .552285*$r]
- if {$c=="O"} {set h 255:255:255 ; set e 0:0:0} \
- else {set e 255:255:255 ; set h 0:0:0}
- set objects($x:$y) [ w_draw board above grid path \
- "([expr $x+$r],$y)<([expr $x+$r],[expr $y+$k])([expr $x+$k],[expr $y+$r])>($x,[expr $y+$r])<([expr $x-$k],[expr $y+$r])([expr $x-$r],[expr $y+$k])>([expr $x-$r],$y)<([expr $x-$r],[expr $y-$k])([expr $x-$k],[expr $y-$r])>($x,[expr $y-$r])<([expr $x+$k],[expr $y-$r])([expr $x+$r],[expr $y-$k])>([expr $x+$r],$y)."\
- -i$h -c$e -t.5m ]
- }
-
- proc clickproc {x y}\
- { global n
- set x [expr int($x+0.5)]
- if {$x<1} {set x 1}
- if {$x>$n} {set x $n}
- set y [expr $n+1-int($y+0.5)]
- if {$y<1} {set y 1}
- if {$y>$n} {set y $n}
- w_task prog send [string index "?abcdefghjklmnopqrstuvwxyz" $x]$y\n
- }
-
- w_bar -menu { Wally {Info -dbox progInfo}
- {SetUp -dbox setup}
- {Quit -click exit}
- }\
- -click showboard
-
-
-
-
-