麻雀

麻雀の打牌選択アルゴリズム(5)

麻雀の打牌選択アルゴリズム(4) - koba::blog で説明したアルゴリズムを実装していく。

麻雀の打牌選択アルゴリズム(4)

麻雀の打牌選択アルゴリズム(3) - koba::blog、麻雀の副露判断アルゴリズム(4) - koba::blog までである程度の手作りはできるようになったが、和了打点を意識した手作りができていない。例えばドラ でテンパイした場合、 打 : 待ち(両面8枚)の平和 (30符1翻)…

電脳麻将のプログラム中の中国語一覧

電脳麻将のプログラムでは変数名など識別子に中国語を使用している。私に限らず日本人はプログラム中の識別子に日本語を使うのを嫌う*1が、かといって麻雀用語の英語など知らないので中国語を採用した訳だ。私のソースコードを読んでくれているのは中国人が…

天鳳の牌譜形式を解析する(4)

天鳳の牌譜形式を解析する(3) - koba::blog のプログラムにバグがあったので修正する。今までのプログラムは天鳳のログをそのままの順序で電脳麻将の形式に変換していたが、これだとカンの表示に不具合があった。

天鳳の牌譜形式を解析する(3)

天鳳の牌譜形式を解析する(1) - koba::blog、天鳳の牌譜形式を解析する(2) - koba::blog の続き。天鳳の牌譜形式のXML要素を1つ1つ電脳麻将の牌譜形式に変換していく。

天鳳の牌譜形式を解析する(2)

天鳳の牌譜形式を解析する(1) - koba::blog の続き。前回は天鳳の牌譜形式のXML要素・属性の意味を説明したので、今回はそれを解析するプログラムについて。「牌番号」「面子コード」は複数の要素で使われているが、これを 麻雀の手牌の文字列表現 - koba::b…

天鳳の牌譜形式を解析する(1)

天鳳の牌譜は http://tenhou.net/0/log/ から取得することができる。第五期 天鳳名人戦 最終節 最終戦 であれば以下のURLになる。 http://tenhou.net/0/log/?2016031822gm-0009-10011-896da481 形式はXMLっぽいが、要素名自体がデータになっていたり入れ子構…

電脳麻将 ver.0.8 公開

電脳麻将 を ver.0.8 にバージョンアップしました。牌譜エディタの公開を目標にしていましたが、まだ当分かかりそうなので、まずは「牌譜ビューア」として公開します。具体的な修正は以下の通りです。 牌譜ビューアを追加 牌譜再生の際に手牌表示のON/OFF、…

電脳麻将 ver.0.7 公開

電脳麻将 を ver.0.7 にバージョンアップしました。 音声出力の方法を修正 スマートフォンの「ホーム画面に追加」の際のアイコンを指定した チー、ポンなどの発声にキャプションをつけるようにした 画像ダウンロード中に "Loading" の文字を表示するようにし…

牌画入力ツール

麻雀の牌姿を入力する「牌画入力ツール」はネット上にいろいろある*1 *2が、どれも画面上で牌をクリックして作成する仕様なので大変面倒くさい。そこで簡単な記法を牌画に変換するツールを作ってみた。 電脳麻将: 牌画入力 このような記述ができます。 {s067…

麻雀の副露判断アルゴリズム(4)

麻雀の副露判断アルゴリズム(3) - koba::blog で喰い仕掛けで手を完成させることができるようになったが、打牌を見ていると無駄がありそうである。例えばの場合、打 は 、、、、、 の6種20枚待ち、打 だとそれに加えて 3枚も待ちになるが、 の面子が完成する…

麻雀の副露判断アルゴリズム(3)

麻雀の副露判断アルゴリズム(2) - koba::blog で役ありの向聴数が計算できるようになったので、基本的には向聴数が減る場合に鳴けばよいのであるが、実際に動かしてみると以下の問題があった。 オリている最中でも鳴いて手詰まりを起こしてしまう オリている…

麻雀の副露判断アルゴリズム(2)

麻雀の副露判断アルゴリズム(1) - koba::blog で準備ができたので、今回は特定の役に対する向聴数計算ルーチンを実装していく。日本の麻雀では以下の役について向聴数が計算できればすべての喰い仕掛けがカバーできる。 翻牌*1 断幺九 対々和*2 混一色*3 混…

麻雀の副露判断アルゴリズム(1)

電脳麻将 ver.0.6 では喰い仕掛けを実装した。基本的に向聴数が減るように鳴いていけばいずれ聴牌する*1のであるが、やみくもに鳴くと役なし聴牌となり和了できない状態になってしまう。実は以前から向聴数の減るときに鳴くという処理は実装済みなのだが封印…

電脳麻将 ver.0.6 公開

電脳麻将 を ver.0.6 にバージョンアップしました。今回のバージョンアップでは AIが喰い仕掛けで手作りできる ようになりました。これでようやく麻雀ゲームとしては一人前になりました。ver.0.7 ではAIの改良は一旦中断し、牌譜エディタの機能を追加しよう…

ベタオリのアルゴリズム

電脳麻将 ver.0.5 では立直に対するベタオリを実装した。ベタオリするためにはまず牌の危険度を評価する必要があるが、現代麻雀技術論 - 押し引き論13.ベタオリ を参考に以下の値とした。 牌の種類 無スジ片スジスジ生牌2枚見3枚見ラス牌 字牌 − − − 3 2 1 …

電脳麻将 ver.0.5 公開

電脳麻将 を ver.0.5 にバージョンアップしました。今回のバージョンアップでは 立直に対するベタオリ 回し打ち(仮実装) ができるようになりました。ver.0.6 では鳴いて手作りできるようにする予定です。

麻雀の打牌選択アルゴリズム(3)

麻雀の打牌選択アルゴリズム(1) - koba::blog、麻雀の打牌選択アルゴリズム(2) - koba::blog で待ち受けを広くする打牌はある程度選択できるようになったのだが、孤立牌の打牌に問題が残っていた。例えばの牌姿の場合、打 、 ともに の5種14枚の待ちとなるの…

麻雀の打牌選択アルゴリズム(2)

麻雀の打牌選択アルゴリズム(1) - koba::blog の続き。前回は打牌選択の基準を待ちの牌種重視から枚数重視としたが、今回はその枚数を実際に「見えていない枚数」*1としてみる。このためには配牌、自摸、打牌、副露、槓のタイミングで枚数をカウントする必要…

麻雀の打牌選択アルゴリズム(1)

麻雀AIを作る場合、まずは和了に向かう手作りができるようにする必要があるのだが、これは比較的簡単。向聴数計算ルーチンさえあれば向聴数が下がるように手を進めていくことでいずれ聴牌し、立直すれば役を考慮しなくても和了ることができる。向聴数が下が…

麻雀AIのプログラム構造

今回は 電脳麻将 の思考ルーチン(麻雀AI)のプログラム構造について。電脳麻将 では対局者を表現するクラスは以下の2つ。 Majiang.Player コンピュータのプレーヤーを実現するクラス Majiang.UI 人間のプレーヤーを実現するクラス Majiang.Player と Majiang.…

電脳麻将 ver.0.4 公開

電脳麻将 を ver.0.4 にバージョンアップしました。今回のバージョンアップでは 麻雀AIの牌効率向上 牌譜のUIの改善(shift+カーソルキーでの移動) を行いました。AIはまだ門前立直のみしかできませんが、和了打点が高くなっている分、強くなっていると思いま…

麻雀の局進行の状態遷移

麻雀の局進行のプログラム方式 - koba::blog、麻雀の局進行のプログラム実装 - koba::blog で局進行のための通信方式は説明したので、今回は状態遷移について。流局判定をのぞくと一局の状態遷移は下図のようになる。

麻雀の局進行のプログラム実装

麻雀の局進行のプログラム方式 - koba::blog で 電脳麻将 の局進行はGame(サーバ)とPlayer(クライアント)間の通信で実現していることを説明したが、今回はその実装方法について。まず両クラスの役割分担だが、以下とした。

麻雀の局進行のプログラム方式

電脳麻将 では以下の2つのクラスのインスタンスが互いに通信することで局を進行させている。 Majiang.Game 牌山生成、配牌・自摸の通知、副露に対する適切な手番の割り当て、和了役判定などゲーム進行を司るクラス。麻雀サーバに相当する。 Majiang.Player …

電脳麻将の牌譜形式

電脳麻将 ver.0.3 で牌譜再生機能を追加した*1。牌譜再生を実現するにあたり、他のシステム(天鳳とか)の牌譜形式も参照したのだが、どうもしっくりこないので独自のJSON形式である。牌譜形式を定義した目的は2つあって、1つはもちろん牌譜再生だが、より重要…

麻雀の和了点を計算するプログラム(最終回)

麻雀の和了点を計算するプログラム - koba::blog 麻雀の和了点の計算 〜 状況役と懸賞役の一覧を作る - koba::blog 和了形を求めるプログラム(特殊形) - koba::blog 和了形を求めるプログラム(一般形) - koba::blog 麻雀の符を求めるプログラム - koba::blog…

麻雀の役を判定するプログラム(再)

以前 麻雀の役を判定するプログラム - koba::blog でも一度扱っているが、そのときは正規表現で役を判定していた。今回は 麻雀の符を求めるプログラム - koba::blog で面子構成を求めているのでそれを使って役を判定していく。電脳麻将 の和了役判定関数は g…

麻雀の符を求めるプログラム

和了形を求めるプログラム(一般形) - koba::blog の続き。和了形を求めることができたので、次は符計算である。符計算の際には面子の構成も調べることになるので、それを保存しておいて和了役の判定で使用することにする。電脳麻将 の符計算を行う関数は get…

和了形を求めるプログラム(一般形)

和了形を求めるプログラム(特殊形) - koba::blog の続き。一般形(4面子1雀頭)の和了形を求めるメイン関数は hule_mianzi_yiban()。処理の流れは以下の通り。 2枚以上ある牌を雀頭候補として抜き取る 残りの牌で4面子構成できるか調べるために mianzi_all() …