MJCalc(麻雀判定計算器)
みなさん、こんにちは、こんばんわ
今回は、C++/CLI、C#で作成した MJCalc を紹介します
~ はじめに ~
ノートPCを持ち込んで麻雀の役の判定や計算をしたいなぁ、と思い、制作に至りました。
~ 概要 ~
≪著作権および免責事項≫尚、著作権は作者である “XERO System” が保有しています。
このソフトウェアを使用したことによって生じたすべての障害・損害・不具合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、一切の責任を負いません。
各自の責任においてご使用ください。
- MJCalc は、C# で作成しています。
- MJCJudge.dll は、C++/CLI で作成しています。
- .NET Framework 4.8 にて動作
.NET Framework 4.8 が導入されていない場合は、インストールしてください。
ここからダウンロードできます。 - 入力した手牌から、役の判定と点数計算を行います。
- 2面張以上の待ちがある場合、和了牌姿以外の牌姿の一覧を表示します。
- 手牌を並べ替えることができます。(副露順は変わりません)
- 入力した牌姿を履歴として保存できます。
- 待ちの判定は、昇順、降順の総当り法を採用しています。
- ローカル役は、Wikipedia 麻雀のローカル役に加え、いくつかの中国麻将の役を採用しています。
- 包則ルールを採用しています。
~ ダウンロード、インストール ~
ダウンロードは 64bit ⇨ こちら、32bit ⇨ こちら
※ 64bit OS で 32bit 版は動作しますが、32bit OSでは 64bit 版は動作しません。
ダウンロードしたら、適当な場所に解凍してください。(C:\Program Files\ の下など)
~ 操作方法 ~
解凍したフォルダの中に、MJCalc.exe がありますので、それをダブルクリックしてください。
このようなウィンドウが出ます。
牌選択エリア
MJCalc の要の部分となる、牌選択エリアです。
牌の下の数値は、残りの牌の数です。
選択ボックス
選択ボックスで、牌の選択モードを切り替えます。
手牌 → 手牌選択モードとなり、牌選択エリアの牌をクリックすると、手牌に入力されていきます。
手牌数は、入力された手牌の数です。
1枚 ~ 13枚の範囲で変動します。
副露(カン含む)の場合は、3枚加算されます。
和了 → 和了牌選択モードとなり、牌選択エリアの牌をクリックすると、和了牌に入力されます。
ドラ → ドラ表示牌選択モードとなり、牌選択エリアの牌をクリックすると、ドラ表示牌に入力されます。
ドラ表示牌は、上段が表ドラ、下段が裏ドラとなっていて、牌選択エリアの牌をクリックするごとに、表、裏、の順で入力されていきます。
入力ボックス
入力ボックスで、牌の入力方法を切り替えます。
単子 → 牌選択エリアでクリックした牌が1枚で、手牌ボックスの面前に入力されます。
牌の残りが0枚以下、手牌数が13枚以上だと機能しません。
対子 → 牌選択エリアでクリックした牌が2枚で、手牌ボックスの面前に入力されます。
牌の残りが1枚以下、手牌数が12枚以上だと機能しません。
順子 → 牌選択エリアでクリックした牌を起点に右に1枚ずつ、計3枚で、手牌ボックスの面前に入力されます。
起点の牌が、8、9、字牌の場合、手牌数が11枚以上だと機能しません。
1 ~ 7の牌が起点であっても、起点から右3枚の間の牌が0枚以下だと機能しません。
刻子 → 牌選択エリアでクリックした牌が3枚(暗刻)で、手牌ボックスの面前に入力されます。
牌の残りが2枚以下、手牌数が11枚以上だと機能しません。
チー → 牌選択エリアでクリックした牌を起点に右に1枚ずつ、計3枚で、手牌ボックスの副露に入力されます。
起点の牌が、8、9、字牌の場合、手牌数が11枚以上だと機能しません。
1 ~ 7の牌が起点であっても、起点から右3枚の間の牌が0枚以下だと機能しません。
※ 遊戯麻雀ではないので、横に倒す機能は、ありません。
ポン → 牌選択エリアでクリックした牌が3枚(明刻)で、手牌ボックスの副露に入力されます。
牌の残りが2枚以下、手牌数が11枚以上だと機能しません。
※ 遊戯麻雀ではないので、横に倒す機能は、ありません。
明槓(カン) → 牌選択エリアでクリックした牌が4枚(明刻)で、手牌ボックスの副露に入力されます。
牌の残りが3枚以下、手牌数が11枚以上だと機能しません。
※ 遊戯麻雀ではないので、横に倒す機能は、ありません。また、加槓は、ありません。明槓として扱います。
暗槓(カン) → 牌選択エリアでクリックした牌が4枚(明刻)で、手牌ボックスの副露に入力されます。
牌の残りが3枚以下、手牌数が11枚以上だと機能しません。
和了ボックス
和了ボックスは、アガり方を選択します。
場風ボックス、自風ボックス
場風ボックスは、場風(荘風)、自風ボックスは、自風(面風)を選択します。
符可役ボックス
符可役ボックスは、手牌だけでは判定できない役を付加選択します。
立直 → 普通のリーチ。
倍立直 → ダブルリーチ。
開立直 → オープンリーチ。
一発 → リーチをかけてから、一巡(自分のツモまで)の間にアガりの場合に成立する役。他家が鳴くと無効。
嶺上開花 → カンして嶺上牌でアガりの場合に成立する役。ツモ和了り。
搶槓 → 他家が加槓(小明槓)(大明槓は無効)した牌そのものがアガり牌の場合に成立する役。ロン和了り。
槓振り → カンした人が捨てた牌でアガりの場合に成立する役。ロン和了り。
海底撈月 → 局のラストの牌をツモってアガりの場合に成立する役。
河底撈魚 → 他家が局のラストに捨てた牌をロンする場合に成立する役。
無形役ボックス
無形役は、特定の形がない役です。
流し満貫 → 自分の捨牌が、すべて么九牌と字牌のみで流局になったら成立する役。途中で鳴かれたら無効。
真似満 → 他家の捨て牌とまったく同じ捨て牌を6巡続けた時点で成立する役。途中で鳴かれたら無効。
天和 → 配牌の時点でアガりの形になっていれば成立する役満。
地和 → 配牌の時点でテンパイしていて、第1ツモでアガりの形になれば成立する役満。途中で鳴かれたら無効。
人和 → 配牌の時点でテンパイしていて、1巡目の他家の捨て牌をロンでアガりの形になれば成立する役。途中で鳴かれたら無効。
八連荘 → 親が8回以上、連続してアガり続けると成立する役満。
頭槓和 → 配牌時の1巡でカンして、その嶺上牌でアガりの場合に成立する役満。
手牌ボックス
手牌ボックスの面前欄に入力されている牌をクリックすると、クリックした牌が削除されます。
例えば、画像の赤い○で囲っている牌をクリックすると、
このようになります。
手牌ボックスの副露欄に入力されている牌をクリックすると、クリックした副露牌が削除されます。
例えば、画像の赤い○で囲っている副露牌をクリックすると、
このようになります。
ドラ表示牌エリア
ドラ表示牌エリアに入力されている牌をクリックすると、クリックしたドラ表示牌エリアから、ドラ表示牌が削除されます。
例えば、画像の赤い○で囲っているドラ表示牌をクリックすると、
このようになります。
本場ボックス
本場は、親が連荘(連続して親を行うこと)した回数を示す100点棒をの事です。
立直棒ボックス
立直棒は、リーチする人が卓上に出す供託用の1000点棒の事です。
ドラ数ボックス
ドラ数ボックスは、ドラの枚数を示します。
ただし、通常はドラ表示牌が入力されていれば、そこから判定できますが、MJCalc で判定できないドラがある場合に使用します。
また、ドラ表示牌を入力するのが面倒なときにも使えますw
MJCalc では、赤ドラ、花牌を判定できませんので、ドラ数ボックスで対処してください。
ドラ数ボックスは、ドラの総数を入力してもらいますが、更にドラ表示牌が入力されている場合は、ドラ表示牌によるドラ数が含まれます。
ドラ数ボックスの値が、ドラ表示牌によるドラ数を下回る場合は、ドラ表示牌によるドラ数が適用されます。
役判定ボタン
手牌や、付加役、無形役などを入力して、役判定を押すと、役の判定と計算を行います。
アガり面張以外の待ちがある場合は、下に表示されます。
理牌ボタン
入力した手牌を理牌(並べ替え)を行います。
乱配牌ボタン
ランダムで配牌を行います。
完全にバラバラではなく、面子単位での組み合わせをランダムにします。
※ スタンダードな面子の組み合わせ(3枚×4組、雀頭×1組)となります。
初期化ボタン
初期化します。
履歴読込ボタン
MJCalc は、手牌(面前、副露)、アガリ牌を履歴として残し、保存できます。
サンプルとして、いくつかの牌姿を保存してあります。
赤い○の部分をダブルクリックすると、その行の牌姿を呼び出します。
※ Wikipedia の麻雀役一覧から、役を抜粋しています。
履歴保存ボタン
入力した牌姿を、履歴として保存できます。
牌姿を履歴保存する場合は、保存履歴名に、保存名を入力して、履歴保存ボタンを押してください。
※ 同じ牌姿が履歴に登録されている場合は、保存しません。
ルールボタン
麻雀ルールの設定です。
ルールを変更する場合は、右の説明にしたがって、設定可能な数値の範囲内で変更してください。
更新を押して、更新できます。
表中の、bit3= となっているものは、bit 換算でルールを設定します。
例えば、五門斉 0=なし 1=5飜 2=2飜 3=役満 bit3=面前 bit4=雀頭字牌 bit5=対々和形
となっている場合、”面前のみ5飜” を設定したい場合は、bit で 101 となり、これを10進数に変換した 5 を指定します。
bit は、右から 1bit、2bit、3bit …となります。
更に”雀頭字牌” を条件に加えたい場合は、101 に、4bit目の 1 を加え、1101 となり、10進数変換して 13 となります。
”雀頭を字牌限定に、面前のみ 5飜となる” というルールになります。
10進数変換については、2進数↔10進数変換などのサイトで調べてください。
About ボタン
MJCalc の概要です。
青天井ルールでの計算ができます。
~ おわりに ~
以上で MJCalc (麻雀判定計算器) の説明は終わりとなります。
今後も、アプリ開発していく予定ですし、プログラミングの技術面の記事なども、すこし視野に入れています。
最後まで読んでいただき、ありがとうございました。