Rubyで作ってみました。
#!/usr/local/bin/ruby
require "socket"
# サーバーからの情報取得
def get_info
info = $sock.recvfrom(512)[0].chop
$log.print info, "\n" if $log && info.length > 0
return info
end
# サーバーへコマンドを送る
def send_cmd(cmd)
$sock.send("(#{cmd})\n", 0 , "localhost", 6000)
$log.print "=== #{cmd}\n" if $log
end
$team = ARGV[0]
$sock = UDPSocket.open
# 参加
send_cmd("init #{$team}")
info = get_info
# 番号や状態の取得
if /\(init ([^\)]+)\)/ =~ info
$myside, $mynum, $game_stat = $1.split(" ")
end
$log = File.open("log/play-#{$myside}-#{$mynum}.log", "w"); $log.sync
print "No.#{$mynum} of #{$team}\n"
# 中心へ移動のつもり。うまくいってないかも。
send_cmd("move 0 0")
while true
cur_info = get_info
if /\(\(ball\) ([^\)]+)\)/ =~ cur_info
distance, degree = $1.split(" ")
$log.print "distance=#{distance}, degree=#{degree}\n"
# ボールの方を向く
if degree.to_i != 0
send_cmd("turn #{degree.to_i}")
end
# ボール近くにあればキック
if distance.to_f.abs < 1.0
dir = 0
send_cmd("kick 50 #{dir}")
else
# 近くないならボールの方へ走る
send_cmd("dash 90")
end
else
# ボールを探して回る
send_cmd("turn 20")
end
end