HOME | ドキュメント |  ブログ  |  BBS  |  瓦版  | 将棋プロジェクト |  物置小屋   

バイキンマン 象歩ブログ 夢の開発環境
08 November 2009

ボナンザ RPM パッケージ

bonanza-4.1.2-1.uvl6
将棋  

ボナンザ将棋プログラム のソースが公開されて久しい。 週末に 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 はまた来週;;

Comments
Re: ボナンザ RPM パッケージ

お久しぶりの更新PINGですね。

こうして、すぐにPython Classが書けるコーンさんがうらやましい。

Posted by: Papasan at November 08,2009 23:15
Re: ボナンザ RPM パッケージ

あぅ、スパムフィルタで捕獲されてたの気付きませんでした;
# "コーン" がいけないのかも (汗

GUI を試してみると、どうも PyGtk2 は python スレッドと相性が良く無いらしく (評判もよろしくない)、
そこで PyQt4 を使って GUI を作り始めました。使い易くてびっくり。

今年中には多分できると思いますが、
その折にはネイティブ Linux で動く、キューティなボナンザ将棋をよろしく (^^;

Posted by: 割れ鐘の遠鳴り at November 14,2009 23:26
Trackbacks

【注意】TrackBack 送信なさる場合、 あなたの記事中に参照リンク (当ブログの URL 記述) が必要です。 トラックバックスパム防止のため、御了承ください。

There is no trackback.
Post a comment











一回プレビューして投稿内容の確認をしてください。その後に投稿可能になります。