Guest

GnuCHESS vs GnuCHESS

By: a guest on May 23rd, 2011  |  syntax: TCL  |  size: 1.57 KB  |  hits: 132  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1.  
  2. proc turn {id} {
  3.         global expect_out
  4.         global player1
  5.         global player2
  6.        
  7.         if {[string compare $id "player1"] == 0} {
  8.                 set crt_id $player1
  9.                 set crt_string "Player 1"
  10.                 set other_id $player2
  11.                 set other_string "Player 2"
  12.         } else {
  13.                 set crt_id $player2
  14.                 set crt_string "Player 2"
  15.                 set other_id $player1
  16.                 set other_string "Player 1"
  17.         }
  18.  
  19.         set spawn_id $crt_id
  20.         expect {
  21.                 -re "move (.*)\n" {
  22.                         puts "$id moved $expect_out(1,string)"
  23.                         set spawn_id $other_id
  24.                         send $expect_out(1,string)
  25.                 }
  26.                 -re "{(.*)}" {
  27.                         set wins [string first "wins" $expect_out(1,string)]
  28.                         set loses [string first "loses" $expect_out(1,string)]
  29.                         if {$wins != -1} {
  30.                                 puts "$crt_string loses, $other_string wins"
  31.                         } elseif {$loses != -1} {
  32.                                 puts "$crt_string wins, $other_string loses"
  33.                         } else {
  34.                                 puts "Draw"
  35.                         }
  36.                         send "show board\r"
  37.                         if {$crt_id == $player1} {
  38.                                 expect -re "white(.*)\n"
  39.                         } else {
  40.                                 expect -re "black(.*)\n"
  41.                         }
  42.                        
  43.                         set accum ""
  44.                         set timeout 2
  45.                         expect {
  46.                                 -re "..*" {
  47.                                         set accum "$accum$expect_out(0,string)"
  48.                                         exp_continue
  49.                                 }
  50.                 }
  51.                         send_user "$accum"
  52.                         exit 0
  53.                 }
  54.         }
  55. }
  56.  
  57. set timeout 10
  58. log_user 0
  59.  
  60. ;# start programs
  61. spawn -noecho gnuchess -x
  62. set player1 $spawn_id
  63.  
  64. spawn -noecho gnuchess -x
  65. set player2 $spawn_id
  66. send "white\r"
  67.  
  68. ;#start game!
  69. set spawn_id $player1
  70. send "go\r"
  71.  
  72. while 1 {
  73.         #take output from player1, input it in player2's console
  74.         turn "player1"
  75.  
  76.         #take output from player2, input it in player1's console
  77.         turn "player2"
  78. }