ラベル 麻雀 の投稿を表示しています。 すべての投稿を表示
ラベル 麻雀 の投稿を表示しています。 すべての投稿を表示

2014年11月26日水曜日

麻雀の牌を表示するJavascriptライブラリ


以前に公開したJavaの麻雀AIサーバであるSmartBirdから麻雀の牌を描画する部分だけ取り出してライブラリ化しました。

https://github.com/kentan/MahjongTileDrawingJS/tree/master




麻雀の牌はフリー素材などがいっぱいあったりしますが、今回公開したのはHTML5のcanvasタグを使ってその場で描画するタイプです。
使い方は下記のようにシンプル。
萬子はCharacter,索子はBamboo,筒子はCircleで表現しているので例えば5索を書きたい場合はdrawBamboo5("canvasタグのID")といったふうに呼び出せば、引数に指定したcanvasタグに5索が描かれます。

サンプル用のhtmlファイル
<html>
   <head></head>
   <body onload="startDrawing()">
   <canvas id = "canvas1" width="50px" height="60px"></canvas>
</body>
ライブラリを呼び出すサンプル用のjavascript
  function startDrawing(){
      tileDrawing.drawCharactor1("canvas1");
  }

詳細はgithubにあるサンプルコードを見てください

2013年11月10日日曜日

第一回AI麻雀大会開催しました

先日公開したAI麻雀サーバを利用して第一回AI麻雀大会を開きました。

第一回ということでとりあえず都合のついた二人だけで対戦しました。

まずユーザのプロフィール紹介。

ユーザ名 戦略の概要
developing 喰いタンのみ、役牌のみなどを狙い誰よりも早く上がることを目指す
shizimily7 シャンテン数が一番小さくなるものを計算して捨て牌を選択。役があるかは考慮せず リーチを掛けることによって最低限の役を確保する戦略

そして結果の概要。

ユーザ名 勝利回数
developing 5
shizimily7 93
*引き分け 2回


100回行った対戦の平均点数は次のようになりました。
ユーザ名 平均点数
developing 22942
shizimily7 30638
sampleAI1 22368
sampleAI2 22056


結果としてはshizimily7の圧勝。結果を解析すると、上がり回数、平均上がり得点ともにdevelopingより優秀。特に普通に 七対子や大三元を上がるなどソツのない優秀なAIに仕上がる。developingは鳴きを駆使して早上がりを目指す戦略にであったが上がり回数でも shizimily7を下回っていることを考えると、もう少しプログラムの作り込みに期待したいところ。      

2013年11月1日金曜日

麻雀のAIサーバ作りました

麻雀のAI(Artificial intelligence)サーバを作りました。

https://github.com/kentan/SmartBird

最近では電王戦と称した将棋のAIが話題ですが、
麻雀のAIを作っていろいろ遊んでみたくしてみたくなり、このたびAIサーバを作成してみました。

将棋・チェス・碁などはいわゆる「二人ゼロ和有限確定完全情報ゲーム」と呼ばれるもので、

簡単にいうと、下記のようなゲームのことを意味します。


  • 一方の負け点数が他方の勝ち点数になる(二人ゼロ和)
  • 戦略の数が有限(有限)
  • サイコロをふるなどの運要素がない(確定)
  • 戦略を判断するための情報を全部知ることが出来る(完全情報)



有限で完全情報であるゲームは基本的にコンピュータのリソースをふんだんに使うと強くなります。
10年ほど前にはプロの相手にならなかった将棋のAIがちらほら勝てるようになったのもそのためです。

それに対し、麻雀は


  • 4人ゲーム(Not 二人ゼロ和)
  • 次に選択できる手が(ツモる牌)が確定的でない(Not 確定)
  • 戦略を決定するための情報のほとんどを知ることが出来ない(Not 完全情報)


といった特徴があり、将棋や碁よりもAIの難易度が高いといえます。