fc2ブログ

ざんないプログラマァのアプリ開発日記

ゲームエンジンUnityを使って何か創る

麻雀で最多役はどんな手?

最多役とは、役の数が最も多くなるアガリ。
いろいろ考えた結果、下記になった。
役満より難しいと思うけど…

東場・東家、ハイテイ牌でロンアガリ。
・手牌
東東 白白     九九九九 發發發發 中中中中
    アガリ   暗カン 暗カン 暗カン
・役
1飜 
1飜 
河底撈魚 1飜 
ダブルリーチ 2飜 
連風牌 2飜 
対々和 2飜 
三暗刻 2飜 
三槓子 2飜 
混老頭 2飜 
小三元 2飜 
混一色 3飜 

合計 140符  20飜 

上記を考慮して、リザルト画面のレイアウトを考える。

麻雀点数計算機 開発: Athena
Mahjong
この計算機で上記の手牌を入力し、結果に進むとアプリが落ちる
ダブルリーチをOFFにして確認すると、最大で8つの役までしか対応できていない。 小三元は發・中を含んでいるようだ。
ダブルリーチを含めると9つの役になり予想GUYの領域にアクセスしているのかも。
このようにならない為にも可能な最多役を考えてみた。
続きを読む
スポンサーサイト



  1. 2010/09/03(金) 05:17:44|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

麻雀GUIについて考える

当初 OpenGL ES で予定していたが、今後の期待を込めて Unity 3D を考えている。

【選ぶ理由】
・移植性
Windows/Web/iPhone/iPad/iPodなど、同時開発できる。
おそらく解像度に合わせて、それぞれシーン(カメラ)やレイアウトを用意すればよい。
プロジェックトはプレハブやスクリプトならばそのまま持っていけるのではないか?
操作に関しては、クリック(タッチ)のみなら共通で使えるみたい。(iPhoneサンプルのタッチアプリがWindowsで遊べた)

・デバッグ
Windows 上で進めることができれば、配布して遊んでもらえばゲームの部分はある程度デバッグできる。
とは言ってもそれぞれの環境で開発するのが望ましい。

・グラフィック
パーティクルシステム、シェーダー等が簡単に使え画面ですぐに確認できる。
メモリに余裕があるならテクスチャのクオリティを上げたり、ポリゴンを増やしたり、プラットフォームに応じて対応できる。

【問題点】
・Unity の探究
形になるまでは時間がかかりそうだ…

・データ
テクスチャ。2D・3Dに関係なく必ず必要になる。
3Dデータは、FBXという汎用フォーマットを使用している。
なにかしら3Dソフトを扱える必要があるが、モデリング・ボーン・アニメーション等を含むソフトは高額…また、そう簡単ではない。
  1. 2010/09/01(水) 08:06:59|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

向聴数プログラムの応用

手牌から向聴数を求めるプログラムを作成した。
手牌の数に依存せず、再帰的に呼び出すもの。


・向聴数を求める場合、手牌から下記の組み合わせを全て求める。
 順子(シュンツ)123/234/345/456/567/678/789
 刻子(コウツ)数数数/字字字
 辺塔(ペンター)12/89
 両塔(リャンター)23/34/45/56/67/78
 篏塔(カンター)13/24/35/46/57/68/79
 対子(トイツ)数数/字字
 孤立(コリツ)1つの牌として考える

組み合わせを元に、それぞれ(一般/七対/国士)向聴数を計算している。
向聴数が「0」なら聴牌(テンパイ)、「-1」ならアガリ。
組み合わせを変更すれば、アガリや鳴き(チー/ポン/カン)にも応用できそうだ。


・アガリを求める場合は、手牌から下記の組み合わせを全て求める。
 順子(シュンツ)123/234/345/456/567/678/789
 刻子(コウツ)数数数/字字字
 対子(トイツ)数数/字字
 孤立(コリツ)1つの牌として考える

これで向聴数を計算し「-1」ならアガリの組み合わせがあるので役判定へ進む。単純にアガリを求めるのならば、この方が断然速い。


・鳴きが出来るかどうかを調べるには、対象の牌(捨て牌)を手牌に加えて下記の組み合わせを全て求める。
 槓子(カンツ)数数数数/字字字字
 順子(シュンツ)123/234/345/456/567/678/789
 刻子(コウツ)数数数/字字字
 孤立(コリツ)1つの牌として考える

例えば捨て牌4なら、組み合わせに 234/345/456 があればチー出来ることが分かる。444 があればポン、4444 があれば明カン出来る。暗カンは同様に調べることがきる。
加カンは既に鳴いている牌から調べるので、鳴き牌に 444 があるかどうかを調べればよい。


・余談
工夫すれば、ポーカーや花札などにも応用出来そう。
ポーカーなら
 ストレート A2345…10JQKA
 フォー 数数数数
 スリー 数数数
 ペア 数数
 ワン 1つのカードとして考える
  1. 2010/08/30(月) 05:34:35|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

牌の扱い(2)

牌にはそれぞれ特定できるユニーク番号を割当てている。
前回の割り当ては勝手が悪かったので下記に変更

・通常牌
0 1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26
西
27 28 29 30 31 32 33 34 35

・赤牌
(一) (二) (三) ・・・ (白) (發) (中) -- --
36 37 38 ・・・ 67 68 69 70 71

通常牌の全てを赤牌に対応できる仕様に変更。
しかし、実際使用するのは以下の3つ。
38 47 56

・花牌
-- -- -- ・・・ --
72 73 74 ・・・ 99 100 101 102 103 104 105 106 107

使うことは無いと思われるが、とりあえず字牌扱いにする。
  1. 2010/08/27(金) 18:34:49|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

牌の扱い(1)

牌にはそれぞれ特定できるユニーク番号を割当てている。

 一 二 三・・・ 白 發 中
[ 0][ 1][ 2]・・・[31][32][33]

向聴数を計算するときには、ユニーク番号から牌データ(クラス)に変換して使用している。
通信などを行うならユニーク番号でやり取りを行う。

赤牌は+34 ()は赤牌を表す。
(五)(5)(⑤)
[38][47][56]

花牌は+68
 春 夏 秋 冬 梅 蘭 菊 竹
[68][69][70][71][72][73][74][75]
花牌を使うことは無いと思うが…

例えば以下のようなデータに変換される
五[4]
int no = 4; //牌の番号
int category = 0; //牌の種類
bool aka = false; //赤牌かどうか

(五)[38]
int no = 4;
int category = 0;
bool aka = true;

※一~九は萬子、1~9は索子、①~⑨は筒子を表す。
  1. 2010/08/25(水) 14:12:21|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

グラフィックは自分で描く

アプリを自作する場合、グラフィック素材はどうするのか?
フリーのものでは欲しいものがないし、購入や依頼などは費用がかかる。
よって、グラフィック素材は自分で作るしかない。

運良くPhotoshop、Illustratorなど高価なグラフィックソフトに触れる機会があり、参考書を買い込んで多少使えるようになった。
Illustratorでパス(ベジェ曲線)を使うと、麻雀牌などは比較的簡単に作成できる。
ある程度大きいサイズでパスにしておけば、拡大縮小も容易なので今後のサイズ変更にも対応でき都合がよい。
Illustratorでデザインし、Photoshopで加工する。

しばらくは、麻雀牌をコツコツ描く作業。
麻雀牌作業サンプル
  1. 2010/08/23(月) 13:14:40|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0

向聴数計算をiPhoneで実測

向聴数計算を求めるiPhoneアプリを作成し、実機で動かしてみた。
ボタンを押して処理結果をコンソールに出力するだけのもの。

iPhone実機登録で、キーチェーン等の登録でてこずった…(;´Д`)

手牌それぞれの平均処理時間
一般系:約0.08秒
国士系:約0.07秒
清一系:約0.12秒 遅いものでは約0.24秒

30fps(フレーム)で換算すると、
一般系:約2.4fps
国士系:約2.1fps
清一系:約3.6fps 遅いものでは約7.2fps

結構時間かかってるなぁ…
スレッド使って計算させないと。
  1. 2010/08/11(水) 11:36:25|
  2. 麻雀
  3. | トラックバック:0
  4. | コメント:0
次のページ

ざんないブログへようこそ!

KOH

Author:KOH
【開発環境】
Win(XP/7)/Mac Mini
Unity Pro + iOS Pro
3ds Max 2011
VS2008

【iOSアプリ】

I-C (3D puzzle) - PETITDIGI2012/09/07
I-C (3Dパズル)

I-C (3D puzzle) Free - PETITDIGI2012/09/07
I-C (3Dパズル)無料

【Androidアプリ】
I-C (3D puzzle) Free - PETITDIGI2012/11/22
I-C (3Dパズル)無料

【サイト】
・Unity 3D Selfish Training
・Unity 3D でオリジナルキャラクターを表示させる
・サイトマップ

書籍

カテゴリ

開発日記 (68)
アプリ第1弾 (37)
iPhone (16)
麻雀 (15)
Unity 3D (82)
何か作ってみよう (10)
セーブデータ (5)
開発関連 (37)
その他 Unity (28)
3ds Max (11)
体験したみた (9)
その他 3ds Max (2)
Titanium (7)
Studio (4)
iPhone (1)
Android (2)
情報 (47)
書籍 (18)
iPhone (19)
PC (2)
テレビ (4)
コンシューマ (3)
その他 情報 (1)
3.11東日本大震災 (0)
未分類 (1)

RSSリンクの表示