Open10
ネット麻雀を作ってみたい
麻雀牌
- ブリッジパターンでマークと牌で分けて実装するとよさそう
役
- 役の成立条件は仕様パターンを使うと便利そう
- 例
- 面前清自摸和: 面前仕様 and ツモ和了仕様
- 一盃口: 面前仕様 and 同じ暗順子が2つある仕様
- 例
- 役満は通常役満とW役満を別のオブジェクトとして分けたほうが管理しやすそう
- 国士無双と国士無双13面待ち
- 四暗刻と四暗刻単騎待ち
- 大四喜と小四喜
- 通常役の食い下がりは同じオブジェクトで、食い下がる役、かつ鳴いている場合に評価価値を下げて渡すのが良さそう
得点計算
- 点数早見表は使わないで普通に計算しちゃったほうが楽
- 得点早見表だと親と子/ツモとロンの4種あるので余計複雑
- 飜と符から基本点計算して、そこから和了点と負担点を計算したほうがシンプル
- 計算手順
- 基本点計算
- 役満の基本点計算
1. 成立する役満をリストアップ
2. 成立する役満がない場合は通常計算へ
3. 成立した役満の倍率をすべて足す
4.基本点 = 合計倍率 × 役満基本点(8000)
- 通常の基本点計算
1. 成立する通常役をリストアップ
2. ドラを計算
3. 符を計算
4. 合計飜数が6飜以上の場合は合計飜数から基本点を算出
5. 合計飜数が5飜以下の場合は基本点 = min(合計符数 × 2 ^ (合計飜数 + 2), 満貫基本点(2000)
- 基本点から和了点と負担点を計算
- 負担点に積み符を加算
- 供託を獲得ポイントに加算
宇宙麻雀
いただきじゃんがりあんR基準
ルール
- 順子のループが可能
-
891m
や912m
-
- 風牌と三元牌の順子が可能
-
123z
や567z
- なので字牌の一盃口も成立可能
-
- 役なしドラのみが和了可能
- 七対子が役ではない
- 上家以外からのチーが可能
実装
- 順子条件オブジェクトを追加して、順子で判断させる
- 通常:
- 1と9が連続することを許可しない
- 字牌を許可しない
- 宇宙麻雀:
- 1と9が連続することを許可する
- 字牌を許可する
- 通常:
和了形
- 基本的に3種類
- 通常形(4面子1雀頭)
- 七対子形
- 国士無双形
- 通常形は基本的に次の3つで網羅できる
- 塔子待ち形: 3完成面子1塔子1雀頭
- 双碰待ち形: 3完成面子2対子
- 単騎待ち形: 4完成面子1孤立牌
- 複合形の待ちは和了形を分けて考慮する
- ノベタン(例:
1234m
)-
123m
の順子と4m
の孤立牌 -
234m
の順子と1m
の孤立牌
-
- 3面張(
23456m
)-
234m
の順子と56m
の塔子 -
456m
の順子と23m
の塔子
-
- ノベタン(例:
- 面前状態は和了牌を含む面子を除いて晒した面子があるかどうかで判断できる
- すべての面子が晒してない面子、の条件だと平和でロンした時に最後の面子が明順扱いになってしまうため
CPU
- 思考ルーチンは Behavior パターンがやりやすそう
風
場風
- 場風を値として持つ?
- 1~4局目を東場、5~8局目を南場のようにすれば場風を値として持たなくていい
自風
- 自風は状態として持つ必要はない
- 席の位置と何局目か分かれば割り出せるため
点数状況
- 勘定パターン参考にするとよさそう
麻雀卓
- 山や河、手牌周り
- これも勘定パターンを応用するとよさそう
- プレイヤー同士で行われる牌の移動によって進行される
プレイヤー
- 概念的には2つ存在しそう
- A: 東家、南家、西家、北家と局ごとの役割としてのプレイヤー
- 麻雀卓や点数計算に使われる
- B: 実際に席に座っているプレイヤー
- =ユーザー、CPU
- 対局ごとの得点状況に紐付けされる
- A: 東家、南家、西家、北家と局ごとの役割としてのプレイヤー