
GnuCHESS vs GnuCHESS
By: a guest on May 23rd, 2011 | syntax:
TCL | size: 1.57 KB | hits: 132 | expires: Never
proc turn {id} {
global expect_out
global player1
global player2
if {[string compare $id "player1"] == 0} {
set crt_id $player1
set crt_string "Player 1"
set other_id $player2
set other_string "Player 2"
} else {
set crt_id $player2
set crt_string "Player 2"
set other_id $player1
set other_string "Player 1"
}
set spawn_id $crt_id
expect {
-re "move (.*)\n" {
puts "$id moved $expect_out(1,string)"
set spawn_id $other_id
send $expect_out(1,string)
}
-re "{(.*)}" {
set wins [string first "wins" $expect_out(1,string)]
set loses [string first "loses" $expect_out(1,string)]
if {$wins != -1} {
puts "$crt_string loses, $other_string wins"
} elseif {$loses != -1} {
puts "$crt_string wins, $other_string loses"
} else {
puts "Draw"
}
send "show board\r"
if {$crt_id == $player1} {
expect -re "white(.*)\n"
} else {
expect -re "black(.*)\n"
}
set accum ""
set timeout 2
expect {
-re "..*" {
set accum "$accum$expect_out(0,string)"
exp_continue
}
}
send_user "$accum"
exit 0
}
}
}
set timeout 10
log_user 0
;# start programs
spawn -noecho gnuchess -x
set player1 $spawn_id
spawn -noecho gnuchess -x
set player2 $spawn_id
send "white\r"
;#start game!
set spawn_id $player1
send "go\r"
while 1 {
#take output from player1, input it in player2's console
turn "player1"
#take output from player2, input it in player1's console
turn "player2"
}