Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

gnubg python scripting

More than 3 years have passed since last update.

バックギャモンの解析ソフト GNU Backgammon には、Pythonスクリプトを実行する機能がある。そのこと自体は前から知っていたが、Pythonを知らなかったので手が出せなかった。最近、仕事でPythonの使い方を少し覚えたので何かやってみようじゃありませんか!

準備

Ubuntu 14.04 LTSを使いました。gnubgのバージョンが 1.02 が入っていたのですが、このバージョンでは後述する gnubg.match() を呼んでも空の dict しか返ってきませんでした。なので、1.05 をソースからビルドしました。

$ gnubg
GNU Backgammon 1.05.002  Jul  2 2016
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 by Gary Wong.
Copyright (C) 2016 by Gary Wong and the AUTHORS; for details type `show version'.
This program comes with ABSOLUTELY NO WARRANTY; for details type `show warranty'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show copying' for details.
(ゲーム無し)

Pythonにアクセスする

import gnubg

このように始めたいところですが出来ません。gnubgをPythonで操作する方法は、ちょっと変わっています。
gnubgを起動した状態で、コマンドプロンプトに > を入力します。すると、IPython が使えるようになります。

(ゲーム無し) >
/usr/local/lib/python2.7/dist-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.
  "You should import from traitlets.config instead.", ShimWarning)
IPython 4.2.1, Python 2.7.6 (default, Jun 22 2015, 18:01:27) 
[GCC 4.8.2]
In <1> > 

私の環境では何かいろいろ出ましたが、とりあえず気にしないことにします。
以下のコマンドでヘルプが参照できます。

In <1> > help(gnubg)

マッチのインポート

PlayOKのマッチをインポートしてみましょう。

In <2> > gnubg.command('import mat 87027157.txt')
 GNU Backgammon  Position ID: AAAAunEAAAAAAA
                 Match ID   : 8AqgAFAAAAAE
 +13-14-15-16-17-18------19-20-21-22-23-24-+     O: mkisono
 |                  |   |                  | OOO 5 ポイント
 |                  |   |                  | OOO 
 |                  |   |                  | OOO 
 |                  |   |                  | OOO 
 |                  |   |                  | OOO
v|                  |BAR|                  |     5 ポイントマッチ (キューブ: 1)
 |                  |   |                  | X  
 |                  |   |                  | X   
 |                  |   | X           X    | X   
 |                  |   | X        X  X    | X   
 |                  |   | X        X  X  X | XX  0 ポイント
 +12-11-10--9--8--7-------6--5--4--3--2--1-+     X: cwm7296g

マッチの解析

In <3> > gnubg.command('analyse match')

解析結果の表示

In <4> > gnubg.command('show statistics match')
プレイヤー                          mkisono                 cwm7296g               

チェッカープレイ統計

ムーブ総計                           49                      47                    
非強制ムーブ                        44                      36                    
マークしていないムーブ         45                      34                    
疑わしいムーブ                      1                       5                    
悪いムーブ                            2                       2                    
非常に悪いムーブ                   1                       6                    
Error total EMG (MWC)                         -0.555 ( -8.234%)       -2.515 (-34.975%) 
Error rate mEMG (MWC)                        -12.6   ( -0.187%)      -69.9   ( -0.972%) 
チェッカープレイのレーティング Intermediate            Awful!                 


運統計

非常に幸運なロール                0                       1                    
幸運なロール                         3                       4                    
普通のロール                        46                      38                    
不運なロール                         0                       3                    
非常に不運なロール                0                       1                    
Luck total EMG (MWC)                          +0.571 ( +9.871%)       -0.972 (-12.880%) 
Luck rate mEMG (MWC)                         +11.7   ( +0.201%)      -20.7   ( -0.274%) 
運の評価                             None                    None                   


キューブ統計

キューブアクションの総計       2                      30                    
ぎりぎりまたは現実のキューブアクション   2                       1                    
ダブル                                  1                       0                    
テイク                                  0                       1                    
パス                                     0                       0                    
Missed doubles below CP (EMG (MWC))        0                       0                    
Missed doubles above CP (EMG (MWC))        0                       0                    
Wrong doubles below DP (EMG (MWC))         1 (-0.042 ( -0.323%))   0                    
Wrong doubles above TG (EMG (MWC))         0                       0                    
間違ったテイク (EMG (MWC))          0                       0                    
間違ったパス (EMG (MWC))             0                       0                    
Error total EMG (MWC)                         -0.042 ( -0.323%)       -0.000 ( -0.000%) 
Error rate mEMG (MWC)                        -20.9   ( -0.162%)       -0.0   ( -0.000%) 
キューブアクション評価        Casual player           Supernatural           


総合統計

Error total EMG (MWC)                         -0.597 ( -8.557%)       -2.515 (-34.975%) 
Error rate mEMG (MWC)                        -13.0   ( -0.186%)      -68.0   ( -0.945%) 
Snowie error rate                             -6.2   ( +0.000%)      -26.2   ( +0.000%) 
総合評価                             Intermediate            Awful!                 
実際の結果                           +50.00%                 -50.00%               
Luck adjusted result                      +27.25%                 -27.25%               
Luck based FIBS rating diff.             +474.84                                        
Error based abs. FIBS rating             1858.7                  1078.7                 
チェッカープレイのエラーによるレーティングの減点  175.4                   971.3                 
キューブエラーによるレーティングの減点   15.9                     0.0  

やけにエラーの多いマッチでした・・

マッチのデータを取得する

gnubg.match() コマンドを入力すると、マッチのデータが返ってきます。このデータを使って何しましょうかねぇ。

まとめ

gnubg を Python でいじって遊ぶ準備が出来ました。ちょうど Python を勉強しているところなので、趣味と実益を兼ねていて、こんなに楽しいことはないですね!!

参考にしたページ
* http://osdir.com/ml/bug-gnubg-gnu/2013-12/msg00013.html

mkisono
2016年にPython覚えました 他には、Java, JavaScript, C++を少々 React, Redux, Material-UI も覚えました Elasticsearch, AWSも使えます
https://kifu.me/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away