「麻雀の点数計算プログラムと一人打ち麻雀」

氏名:宮崎
紀行
「麻雀の点数計算プログラムと一人打ち麻雀」
●プログラムの目的と機能
このプログラムは卓上ゲーム麻雀において、上がった手牌の点数計算をする。またそれを使って、
一人打ち麻雀もプレイできる。
麻雀の点数計算プログラム
牌を種類ごとに配列へと分ける
同じ牌が 2 つ以上ある配列から同じ
牌を抜き出し、それを仮対子とする。
暗刻を抜き出す
順子を抜き出す
上がれる形にな
っているか
NO
暗刻を抜き出す前の状
態に戻す。
順子を抜き出す
暗刻を抜き出す
NO
上がれる形にな
っているか
YES
役があるか?
NO
上がれません
ここでは、プログラム実行によりどのような結果が得られるかに
ついて示す。具体例を挙げて説明する。
手牌の入力
YES
●プログラムの使用方法
YES
上がれます
モードを選択してください。
1:麻雀の点数計算プログラム
2:一人打ち麻雀
:1
手牌を入力して下さい。
(1萬2萬3萬→1m2m3m 1索2索3索→1s2s3s 1筒2筒3筒→1p2p3p)
(東→Z1 南→Z2 西→Z3 北→Z4 白→Z5 発→Z6 中→Z7)
(1m1m1m1m 等でカンした場合は 1m1m1m と表記してください。)
(鳴いた面子も普通に入力してください。)
:1m1m1m2m3m4m5m6m7m8m9m1s1s1s
/* ←ここで上がり形の牌を入力 */
上がり牌は何ですか?:5m
/* 後に出てくる待ちの形を知るため */
表ドラを教えてください。(5m 表示のときは 6m と入力してください。):0
カンをしていますか?(yes:1 no:0):0 /* なしの時は 0 を入力↑← */
立直はかけましたか?(yes:1 no:0):0 /* ↓ 1 2 はつまり東場の南風 */
場風と自風を入力してください。(東:1 南:2 西:3 北:4):1 2
上がり方を入力してください。(ツモ:1 ロン:2 ):1 /* 役、符数に関係する */
鳴いていますか?(yes:1 no:0):0 /* ↓牌を種類ごとに配列へと分ける */
m[1]=3 m[2]=1 m[3]=1 m[4]=1 m[5]=1 m[6]=1 m[7]=1 m[8]=1 m[9]=1
s[1]=3 s[2]=0 s[3]=0 s[4]=0 s[5]=0 s[6]=0 s[7]=0 s[8]=0 s[9]=0
p[1]=0 p[2]=0 p[3]=0 p[4]=0 p[5]=0 p[6]=0 p[7]=0 p[8]=0 p[9]=0
zihai[1]=0 zihai[2]=0 zihai[3]=0 zihai[4]=0 zihai[5]=0 zihai[6]=0
zihai[7]=0 k:ann_n = 0 toitsu = 1m1m syuntsu = 1m2m3m syuntsu = 4m5m6m
/* ↑カンの個数
↑対子の牌
↑順子の牌
*/
syuntsu = 7m8m9m anko = 1s1s1s syuntsu = 3 toitsu = 1 anko = 1
/* 順子+暗刻=4 && 対子が一個なら上がりが成立 */
agari_hai = 5m
待ちはカンチャンです。 /* 待ちがわかる。これによって役、符数が変わる */
m_toitsu = 1m1m
/* ちなみに、カンチャンでは平和はつかない */
s_anko2[1]=1s1s1s
/* ←完成形の面子 */
m_syuntsu2[1]=1m2m3m
m_toitsu = 1m1m
m_syuntsu2[2]=4m5m6m
m_toitsu = 1m1m
m_syuntsu2[3]=7m8m9m
m_toitsu = 1m1m
点数計算に入ります。 ↓の内訳 (最初からつく符)+(カンチャン)+(1 ソー暗刻)+(ツモ)
符数は 32 の1の位切り上げで 40 です。 /* ちなみに 20+2+8+2 = 32 */
面前ツモっ! /* 一ハン役 */
一気通貫っ! /* 二ハン役 */
ハン数は 3 です! /* 合計三ハン */
符数は 40 です。点数は、16×2×2×2(ハン数)× 40 (符数)/*点数計算の計算式*/
= 5200 (2600(親),1300(子))点(点数の10桁は切り上げ)/*ツモなので皆から徴収*/
●感想
プログラム作成にあたって思い入れ(苦い)のある部分は、待ちの形
を調べるところ。調べる方法として、後一枚何があればいいかを一枚
飜数、符数を調べる
点数を出力
一枚調べる方法なども考えたが、それはさすがに行がいく。いろいろ
考えて、結局地道に書いた部分と計算で書いた部分とになった。なん
にせよ、うまく出力できるようになってよかった。もし次回機会があ
れば、4人麻雀のプログラミングをしたい。CPU の動作を考えるの
がしんどうそうだが・・・。