ボナンザ RPM パッケージ
ボナンザ将棋プログラム のソースが公開されて久しい。 週末に Vine5 用 RPM パッケージを作成し ここら に置きました。 bonanza_v4.1.2/src/bonanza/bonanza.txt を見ると、 プログラムの商用利用は禁止。 それ以外なら自己責任での利用や変更/再配布もよろしいとありました。
コンソール上で /usr/bin/bonanza を実行すれば対局できます。
$ bonanza Starting... /usr/lib64/bonanza/bonanza Bonanza Version 4.1.2 Trans. Table Entries = 3072K (48MB) cleanning the transposition table ... done ( 0.03s) book.bin found hash.bin found rand seed = d3e96446 Black 1> 7776FU ... White 2> 3334FU '(0) 000:01/000:01 elapsed: b7, w1 ' 9 8 7 6 5 4 3 2 1 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY P2 * -HI * * * * * -KA * P3-FU-FU-FU-FU-FU-FU -FU-FU P4 * * * * * * -FU * * P5 * * * * * * * * * P6 * * +FU * * * * * * P7+FU+FU * +FU+FU+FU+FU+FU+FU P8 * +KA * * * * * +HI * P9+KY+KE+GI+KI+OU+KI+GI+KE+KY Black 3> 2726FU White 4> 4344FU Black 5>
なんて感じ。取りあえず簡単な GUI をかぶせようか...
手始めに Python でスレッドとパイプを使ったサンプルプログラムを作成。
#!/usr/bin/env python
import threading, popen2, time
class CBonaInterp(threading.Thread):
def __init__(self, fd):
threading.Thread.__init__(self)
self.fd = fd
def run(self):
name = self.getName()
s = self.fd.readline()
while (s != ''):
if s[-1] == '\n':
s = s[:-1]
print '%s> %s' % (name, s)
s = self.fd.readline()
def main():
cmd = '/usr/lib64/bonanza/bonanza'
(bona_stdout, bona_stdin, bona_stderr) = popen2.popen3(cmd)
thrdid = threading.currentThread().getName()
ct1 = CBonaInterp(bona_stdout)
ct1.start()
ct2 = CBonaInterp(bona_stderr)
ct2.start()
time.sleep(1.0)
s = raw_input('%s: ' % thrdid)
while (s != ''):
s += '\n'
print s
bona_stdin.write(s)
bona_stdin.flush()
time.sleep(0.2)
s = raw_input('%s: ' % thrdid)
bona_stdin.close()
time.sleep(1.0)
ct1.join()
ct2.join()
print '%s done' % thrdid
if __name__ == '__main__':
main()
起動すれば、コンソール画面での bonanza と同程度には遊べます。
そう云えば今時の PyGtk2 も PyQt4 も使ったことがありませんでした;; ということで PyBona はまた来週;;