ボナンザ 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 はまた来週;;