2025 ソフトウェア設計及び演習用の班Wiki

25::gr01::進捗

役の判別

ステップ1:手牌のデータ構造設計

まずは、手牌をどのようにプログラム上で表現するかを決めます。

代表的な表現方法:

文字列方式(例: '1m', '2m', '3m', '4p', '5p', '6p', '7s', '8s', '9s', '東', '東', '東', '白')

数値コード方式(例: 0~33で牌を番号付けし、牌山を管理しやすくする)

# 例: 数値で牌を表現(0〜33)

# 0〜8: 萬子 (1m〜9m)

# 9〜17: 筒子 (1p〜9p)

# 18〜26: 索子 (1s〜9s)

# 27〜33: 字牌(東南西北白發中)

ステップ2:手牌の解析ロジック

目標:

手牌が「アガリ形(和了形)」になっているか確認(4面子+1雀頭)

面子の種類を特定(順子・刻子・槓子)

方法:

再帰的バックトラッキングで4面子+1雀頭になるパターンを探索

またはテンプレートマッチングで和了形のパターンに当てはめる

ステップ3:役の判定ルールの実装

主な役の判定例:

タンヤオ(字牌なし、2〜8のみ)

ピンフ(すべて順子、雀頭が役牌でない、リャンメン待ち)

役牌(白發中 or 場風・自風の刻子)

一盃口(同じ順子が2組)

混一色/清一色(1種類のスーツ+字牌 or 純粋な1種類)

実装方法:

判定関数を役ごとに作る(例:is_tanyao(hand), is_chiitoitsu(hand) など)

役の優先順位を考慮してスコアや符計算も可能に

ステップ4:特別な形への対応

七対子(2枚の対子が7組)

国士無双(13種類のヤオチュウ牌+1枚重複)

チャンタ、ジュンチャン、三色同順、混老頭 などの複雑な役


最終更新日:2025/05/09 14:56:11