JavaScript

麻雀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() …

和了形を求めるプログラム(特殊形)

麻雀の和了点の計算 〜 状況役と懸賞役の一覧を作る - koba::blog の続き。状況役、懸賞役の一覧を作成したら、次は和了形の一覧を求める。以前 和了形を求めるプログラム - koba::blog で説明したように、和了形は複数に解釈できる場合があるので、そのすべ…

麻雀の和了点の計算 〜 状況役と懸賞役の一覧を作る

麻雀の和了点を計算するプログラム - koba::blog の続き。まずは状況役*1、懸賞役*2の一覧作成から。電脳麻将 では Majiang.Util.hule() で和了点計算をしているが、その全体構造は以下の通り。 *1:立直や海底摸月など手牌からは判断できない役 *2:ドラなど…

麻雀の和了点を計算するプログラム

延ばし延ばしにしていた和了点の計算について。麻雀の和了点を求める手順は以下の流れになる。 状況役*1の一覧を作る 懸賞役*2の一覧を作る 和了形の一覧を求める 個々の和了形について以下を行う 面子構成を調べ、符を計算する 手役の一覧を求める 符、状況…

電脳麻将 ver.0.3 公開

電脳麻将 を ver.0.3 にバージョンアップしました。今回のバージョンアップでは、 対局後に牌譜を再生できるようになった AIプレーヤーの打牌速度、音声の大きさを選択できるようになった が主な修正です。牌譜エディタを作りたい気持ちもあるのですが、ver.…

麻雀の手牌の文字列表現

今回のお題は麻雀の和了点を求めるプログラムの予定だったのだが、予定を変更して手牌の文字列表現について。麻雀の牌姿を示すときに、牌画を使うのも面倒なので文字で表す場合がある、例えば以下の牌姿の場合、 一二三④⑤⑥789東東白白 とするような表現方…

向聴数を求めるプログラム(一般手編(再々))

向聴数を求めるプログラム(一般手編(再)) - koba::blog での前置きが長くなったけど、いよいよ向聴数(シャンテン数)を求めるプラグラムの本編。

向聴数を求めるプログラム(一般手編(再))

4面子1雀頭形の向聴数(シャンテン数)計算は 向聴数を求めるプログラム - koba::blog で取り上げているけれど、もう一度おさらい。基本は 向聴数 = 8 ー 面子の数 × 2 ー 搭子の数 でよいのだが、考慮すべきことがいくつかある。

向聴数を求めるプログラム(七対子・国士無双編)

手牌の表現方法を決めたら、次にやるべきことは向聴数(シャンテン数)を求めるプログラムの実装である。思考アルゴリズムは向聴数が減って行くように打牌を選択するのが基本になるし、ゲーム進行に関しても流局時のノー聴、聴牌判断は向聴数が0であるか否かで…

麻雀の手牌のJavascript表現

麻雀に関するプログラムを作ろうと思ったら、まずやるべきことは手牌の表現になるだろう。電脳麻将では以下の形式で表現している。

HTML5 + Javascript で動作する麻雀ゲーム

今年はじめから作り始めた麻雀ゲームですが、一応ゲームはできるようになったので公開します。ゲームで使用している牌画像は 麻雀の画像・素材、音声は 天鳳用オリジナルSE: アンコロキングblog のものを使用させていただいてます。

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

麻雀の役を判定するプログラム - koba::blog の続き。役満以外の役については判定できたので、今回は役満について。前回同様和了形からパターンマッチングで役を判定していくのだが、問題が一つあって、それは九蓮宝燈の扱いである。九蓮宝燈という役は門前…

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

麻雀の和了形を求めるプログラムは書けたので、次は役を判定するプログラムを書いてみる。 入力は、 和了形を求めるプログラム - koba::blog で求めた和了形を用いる。基本的には和了形にパターンマッチを試みて判定していくのだが、麻雀には複合役があるの…

和了形を求めるプログラム

麻雀の得点計算をするプログラムを書こうと思っているのだが、そのためには先に和了形を求めるプログラムを書く必要がある。というのも和了形は複数に解釈できる場合があり、その場合一番得点が高くなるパターンを選択する必要があるからだ。和了形が複数に…

SafariのRSSをなんとかする

Mavericksがやってきた - koba::blogのSafariのRSSの問題ですが、やっつけで解決しました。