/
play_go.rb
40 lines (37 loc) · 1.13 KB
/
play_go.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$LOAD_PATH << File.join(File.dirname(__FILE__), *%w[.. lib])
require "go/gtp"
class IllegalMoveError < RuntimeError; end
COLORS = %w[black white]
PLAYERS = Hash[COLORS.zip(%w[computer player].sample(2))]
begin
Go::GTP.run_gnugo(arguments: ARGV.empty? ? nil : ARGV) do |go|
COLORS.cycle do |color|
puts go.showboard
abort "Error: failed to show board" unless go.success?
move = nil
case PLAYERS[color]
when "player"
begin
print "Move for #{color}? "
move = $stdin.gets.to_s.strip
unless move =~ /\S/ and go.is_legal?(color, move)
raise IllegalMoveError, "Illegal move"
end
go.play?(color, move) or abort "Error: move failed"
rescue IllegalMoveError => error
puts error.message
retry
end
when "computer"
move = go.genmove(color)
abort "Error: failed to generate move" unless go.success?
puts "Move for #{color}: #{move}"
end
puts
break if go.over?
end
puts "Final score: #{go.final_score}"
end
rescue Errno::EPIPE
abort "Error: bad arguments"
end