【JavaScript】チェックボックスに連動するボタンで回答する麻雀得点計算機を作ってみた

以前にも麻雀得点計算機を作りまして、今回はその改良版です。

前回は一問ずつ画面に表示され、回答に基づいて最終的に得点を表示するというシステムでした。

これはこれで良いのですが、別にいちいち画面遷移しなくてもいいなと思った次第です。

そのためにはチェックボックスのON/OFFを切り替える度にスクリプトが実行されるようにできるかな~と思っていたところ、普通にできるようでした。

また、チェックボックスやリストボックスを使っていましたが、スマホで使う想定だと押しやすいボタンをポチポチするだけで済むようにする方がいいということで、その辺りも考慮しました。

スポンサーリンク

サンプルページ

というわけでこちらがサンプルのページです。

https://webpage.iehohs.com/javascript-mahjong-calc2/

もしかすると麻雀のルール的に抜けやバグがあるかもしれませんが、とりあえず基本的な機能は正常に動いているかと。

画面はこんな感じ。文字と枠線が赤くなっているボタンがチェックが入っている状態です。

デフォルトは子の門前ロン、両面待ちで雀頭が数牌・オタ風の状態から始まります。

和了った状況を入力していくとボタンを押すと最下部の黒いエリアに得点が表示されます。

和了り方や役の組み合わせによっては複合しない役もあります。その場合はボタンを押せないよう非活性化されます。

右下のRESETを押すとデフォルトの状態に戻ります。

5翻以上であれば満貫以上が確定しますが、4翻以下は符計算が必要なので待ち、雀頭、面子の構成を入力します。

ただ、平和の場合は待ち、雀頭、面子の構成いずれも固定なので選べないよう非活性化されます。このように入力譲許うに応じて余計なボタンは押せないようにし、計算の対象外にしています。

役牌は4つまで指定可能で、小三元は役牌を2つ追加することで対応します。

コード

今回のポイントはチェックボックスやラジオボタンを非表示にし、代わりのボタンでON/OFFを切り替えている点。CSSで非表示にし、forで対象のIDを指定することでできます。

単純に得点計算をするだけでしたらそんなに難しくなかったのですが、和了り方や役など複合しないものについてはボタンを非活性にして押せなくするという仕様にしたところかなり難易度が上がりました。

単にパターンが多いんですよね。非活性にするのはOR条件で簡単なのですが、活性に戻す場合はAND条件で戻さないといけないので、他の入力状態も判定しないと不要なボタンまで活性化してしまいます。

ちょっと愚直なやり方ですが、毎回すべて活性化させて、そこからすべての入力状態を判定して非活性にしていくというやり方にしました。あまりスマートなやり方ではありませんが、とりあえず動いているのでこれでよし。思ったより動作も重くなりませんでした。

HTML

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>麻雀得点計算機2</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <link rel="stylesheet" href="css/reset.css" media="screen" />
        <link rel="stylesheet" href="css/style.css" media="screen" />
        <script type="text/javascript" src="js/mahjong-calc.js"></script>
    </head>
    <body>
        <div id="content">
            <div id="content-inner">
                <h1>麻雀得点計算機2</h1>
				<div>
					<table>
						<tr>
							<th>和了者</th>
							<th>和了り方</th>
						</tr>
						<tr>
							<td>
								<!-- Q0 和了者 -->
								<input type="radio" name="q0" value="0" id="q0-0" class="radiobox" onchange="Q0Click()" checked />
								<label for="q0-0" class="btn">子</label>
								<input type="radio" name="q0" value="2" id="q0-1" class="radiobox" onchange="Q0Click()"/>
								<label for="q0-1" class="btn">親</label>
							</td>
							<td>
								<!-- Q1 上がり方 -->
								<input type="checkbox" name="q1" id="q1-0" class="radiobox" onchange="Q1Click()" checked />
								<label for="q1-0" class="btn">門前</label>
								<input type="radio" name="q1" value="0" id="q1-1" class="radiobox" onchange="Q1Click()" checked />
								<label for="q1-1" class="btn">ロン</label>
								<input type="radio" name="q1" value="1" id="q1-2" class="radiobox" onchange="Q1Click()" />
								<label for="q1-2" class="btn">ツモ</label>
							</td>
					</table>
				</div>
				
                <div>
                    <!-- Q2 役 -->
                    <table class="table-left-align">
                        <tr>
                            <th>一翻</th>
                            <td>
                                <form name="yaku1menzen">	<!-- 一翻役 門前 -->
									<input type="checkbox" id="q2-0" value="1" class="radiobox" onchange="Q2Click(0)" />
                                    <label for="q2-0" class="btn">立直</label>
									<input type="checkbox" id="q2-1" value="1" class="radiobox" onchange="Q2Click(1)" disabled />
                                    <label for="q2-1" class="btn">一発</label>
									<input type="checkbox" id="q2-2" value="1" class="radiobox" onchange="Q2Click(2)" />
                                    <label for="q2-2" class="btn">平和</label>
									<input type="checkbox" id="q2-3" value="1" class="radiobox" onchange="Q2Click(3)" />
                                    <label for="q2-3" class="btn">一盃口</label>
                                </form>
								<form name="yaku1">			<!-- 一翻 喰い下がりなし -->
									<input type="checkbox" id="q2-4" value="1" class="radiobox" onchange="Q2Click(4)" />
									<label for="q2-4" class="btn">断么九</label>
									<input type="checkbox" id="q2-5" value="1" class="radiobox" onchange="Q2Click(5)" />
									<label for="q2-5" class="btn">槍槓</label>
									<input type="checkbox" id="q2-6" value="1" class="radiobox" onchange="Q2Click(6)" disabled />
									<label for="q2-6" class="btn">嶺上開花</label>
									<input type="checkbox" id="q2-7" value="1" class="radiobox" onchange="Q2Click(7)" disabled />
									<label for="q2-7" class="btn">海底摸月</label>
									<input type="checkbox" id="q2-8" value="1" class="radiobox" onchange="Q2Click(8)" />
									<label for="q2-8" class="btn">河底撈魚</label>
								</form>
								<div>役牌 × 
									<div id="yakuhai-count" class="count-box">0</div>
									<input type="button" value="+" class="count-btn" onclick="CountPlus(0)">
									<input type="button" value="-" class="count-btn" onclick="CountMinus(0)">
								</div>
								<div>ドラ × 
									<div id="dora-count" class="count-box">0</div>
									<input type="button" value="+" class="count-btn" onclick="CountPlus(1)">
									<input type="button" value="-" class="count-btn" onclick="CountMinus(1)">
								</div>
                            </td>
                        </tr>
                        <tr>
                            <th>二翻</th>
                            <td>
                                <form name="yaku2menzen">	<!-- 二翻役 門前 -->
									<input type="checkbox" id="q2-9" value="2" class="radiobox" onchange="Q2Click(9)" />
									<label for="q2-9" class="btn">両立直</label>
									<input type="checkbox" id="q2-10" value="2" class="radiobox" onchange="Q2Click(10)" />
									<label for="q2-10" class="btn">七対子</label>
                                </form>
								<form name="yaku2kuisage">	<!-- 二翻役 喰い下がりあり -->
									<input type="checkbox" id="q2-11" value="2" class="radiobox" onchange="Q2Click(11)" />
									<label for="q2-11" class="btn">三色同順</label>
									<input type="checkbox" id="q2-12" value="2" class="radiobox" onchange="Q2Click(12)" />
									<label for="q2-12" class="btn">一気通貫</label>
									<input type="checkbox" id="q2-13" value="2" class="radiobox" onchange="Q2Click(13)" />
									<label for="q2-13" class="btn">混全帯么九</label>
                                </form>
								<form name="yaku2">			<!-- 二翻役 喰い下がりなし -->
									<input type="checkbox" id="q2-14" value="2" class="radiobox" onchange="Q2Click(14)" />
									<label for="q2-14" class="btn">対々和</label>
									<input type="checkbox" id="q2-15" value="2" class="radiobox" onchange="Q2Click(15)" />
									<label for="q2-15" class="btn">三暗刻</label>
									<input type="checkbox" id="q2-16" value="2" class="radiobox" onchange="Q2Click(16)" />
									<label for="q2-16" class="btn">三色同刻</label>
									<input type="checkbox" id="q2-17" value="2" class="radiobox" onchange="Q2Click(17)" />
									<label for="q2-17" class="btn">混老頭</label>
									<input type="checkbox" id="q2-18" value="2" class="radiobox" onchange="Q2Click(18)" />
									<label for="q2-18" class="btn">三槓子</label>
                                </form>
                            </td>
                        </tr>
                        <tr>
                            <th>三翻</th>
                            <td>
                                <form name="yaku3menzen">	<!-- 三翻役 門前 -->
									<input type="checkbox" id="q2-20" value="3" class="radiobox" onchange="Q2Click(19)" />
									<label for="q2-20" class="btn">二盃口</label>
                                </form>
								<form name="yaku3kuisage">	<!-- 三翻役 喰い下がりあり -->
									<input type="checkbox" id="q2-21" value="3" class="radiobox" onchange="Q2Click(20)" />
									<label for="q2-21" class="btn">混一色</label>
									<input type="checkbox" id="q2-21" value="3" class="radiobox" onchange="Q2Click(21)" />
									<label for="q2-22" class="btn">純全帯么九</label>
                                </form>
                            </td>
                        </tr>
                        <tr>
                            <th>六翻</th>
                            <td>
                                <form name="yaku6kuisage">	<!-- 六翻役 喰い下がりあり -->
									<input type="checkbox" id="q2-23" value="6" class="radiobox" onchange="Q2Click(22)" />
									<label for="q2-23" class="btn">清一色</label>
                                </form>
                            </td>
                        </tr>
                    </table>
                </div>
				
                <div>
					<!-- Q3 待ち・雀頭 -->
                    <table>
                        <tr>
                            <th>待ち</th>
                            <td>
								<input type="radio" name="machi" id="q3-0" value="両面" class="radiobox" onchange="Q3Click()" checked />
								<label for="q3-0" class="btn">両面</label>
								<input type="radio" name="machi" id="q3-1" value="シャボ" class="radiobox" onchange="Q3Click()" />
								<label for="q3-1" class="btn">シャボ</label>
								<input type="radio" name="machi" id="q3-2" value="嵌張" class="radiobox" onchange="Q3Click()" />
								<label for="q3-2" class="btn">嵌張</label>
								<input type="radio" name="machi" id="q3-3" value="辺張" class="radiobox" onchange="Q3Click()" />
								<label for="q3-3" class="btn">辺張</label>
								<input type="radio" name="machi" id="q3-4" value="単騎" class="radiobox" onchange="Q3Click()" />
								<label for="q3-4" class="btn">単騎</label>
                            </td>
                        </tr>
                        <tr>
                            <th>雀頭</th> 
                            <td>
								<input type="radio" name="atama" id="q4-0" value="数牌・オタ風" class="radiobox" onchange="Q3Click()" checked />
								<label for="q4-0" class="btn">数牌・オタ風</label>
								<input type="radio" name="atama" id="q4-1" value="役牌" onchange="Q3Click()" class="radiobox" />
								<label for="q4-1" class="btn">役牌</label>
								<input type="radio" name="atama" id="q4-2" value="連風牌" onchange="Q3Click()" class="radiobox" />
								<label for="q4-2" class="btn">連風牌</label>
                            </td>
                        </tr>
                    </table>
					
					<!-- Q4 面子 -->
                    <table>	
                        <tr>
                            <th>面子</th>
                            <th>明刻</th>
                            <th>暗刻</th>
                            <th>明槓</th>
                            <th>暗槓</th>
                        </tr>
                        <tr>
                            <th>中張牌</th>
                            <td>	<!-- 中張牌・明刻 -->
								<div id="su-minko-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(2)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(2)" />
                            </td>
                            <td>	<!-- 中張牌・暗刻 -->
								<div id="su-anko-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(3)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(3)" />
                            </td>
                            <td>	<!-- 中張牌・明槓 -->
                                <div id="su-minkan-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(4)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(4)" />
                            </td>
                            <td>	<!-- 中張牌・暗槓 -->
                                <div id="su-ankan-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(5)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(5)" />
                            </td>
                        </tr>
                        <tr>
                            <th>么九牌</th>
                            <td>	<!-- 么九牌・明刻 -->
                                <div id="ji-minko-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(6)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(6)" />
                            </td>
                            <td>	<!-- 么九牌・暗刻 -->
                                <div id="ji-anko-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(7)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(7)" />
                            </td>
                            <td>	<!-- 么九牌・明槓 -->
                                <div id="ji-minkan-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(8)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(8)" />
                            </td>
                            <td>	<!-- 么九牌・暗槓 -->
                                <div id="ji-ankan-count">0</div>
								<input type="button" value="+" class="count-btn" onclick="CountPlus(9)" />
								<input type="button" value="-" class="count-btn" onclick="CountMinus(9)" />
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
			
			<div id="result-area">
				<!-- 結果 -->
				<div><span id="result-fu">30</span> 符 <span id="result-han">0</span> 翻</div>
				<div id="result-point">-</div>
				<!-- RESET -->
				<input type="button" id="reset-btn" value="RESET" onclick="ResetValue()"/>	
			</div>
		</div>
    </body>
</html>

CSS

body {
	font-size: 12px;
	font-family: 'M PLUS Rounded 1c','Noto Sans JP', sans-serif;
}

/* 入力エリア */
#content-inner {
	width: 100%;
    max-width: 500px;
    margin-left: auto;
    margin-right: auto;
	margin-bottom: 60px;
	padding: 10px;
    text-align: center;
}

ul {
    list-style-type: none;
}
 
table {
	width: 100%;
    margin: 0 auto 2em;
}

th,td {
    padding: 1em;
    vertical-align: center;
}

th {
	background: #009d3a;
    color: #ffffff;
}

td {
    background: #FFFFE5;
}

/* 役の選択エリアは左詰め */
.table-left-align td {
    text-align: left;
}

/* ボタン */
.btn,
.count-btn {
    display: inline-block;
	margin: 3px 0;
	padding: 3px 10px;
    text-decoration: none;
    border: 1px solid #000;
    background: #eee;
    color: #333;
    text-align: center;
}

.btn:hover,
.count-btn:hover {
    background: #ffffff;
}

/* 役牌とドラのカウント表示 */
.count-box {
	display: inline-block;
	background: #ffffff;
	border: 1px solid #333;
	color: #333;
	padding: 3px 10px;
}

/* カウント表示とカウントボタンの非活性時 */
.count-box-disabled,
.count-btn-disabled {
	border: 1px solid #eeeeee;
	background: #f9f9f9;
	color: #cccccc;
}

/* 面子のカウント表示 */
.count-text-disabled {
	color: #cccccc;
}

/* ラジオボタンとチェックボックスは非表示にする */
.radiobox {
	display: none;
}

/* ボタンが押された(チェックが入った)ときの表示 */
.radiobox:checked + .btn {
	border: 1px solid #ff0000;
	background: #ffffff;
	color: #ff0000;
	font-weight: bold;
}

/* 非活性時のボタンの表示 */
.radiobox:disabled + .btn {
	border: 1px solid #eeeeee;
	background: #f9f9f9;
	color: #cccccc;
}

/* 結果エリア */
#result-area {
	position: fixed;
	bottom: 0;
	width: 100%;
	padding: 10px 0;
	background: #454545;
	opacity: 0.8;
	color: #ffffff;
	text-align: center;
}

.hide-object {
	display: none;
}
.show-object {
	display: block;
}

/* リセットボタン */
#reset-btn {
	position: fixed;
	bottom: 0;
	right: 0;
	padding: 20px;
}

JavaScript

JavaScriptはかなりのボリュームになったので機能ごとに分けましたがすべて同じファイル内に記述しています。

グローバル関数

let resultArray = [0, 0, 0, 30];		// 結果の記録
let isMenzen = true;					// 門前フラグ
let isPinfu = false;					// 平和フラグ
let isKuitan = false;					// 喰いタンフラグ
let isChitoitsu = false;				// 七対子フラグ
let isYakuhaiCountDisabled = false;		// 役牌カウント非活性フラグ
let isMentsuCountDisabled = false;		// 面子カウント非活性フラグ
let isChuMentsuCountDisabled = false;	// 面子中張牌のみカウント非活性フラグ
let pointArray = new Array();			// 得点表用配列
// HTMLのテキストから取得するIDを記録する配列
let countIdArray = ['yakuhai-count','dora-count','su-minko-count','su-anko-count','su-minkan-count','su-ankan-count','ji-minko-count','ji-anko-count','ji-minkan-count','ji-ankan-count']
let oyakoElems = document.getElementsByName('q0');		// 和了者要素
let agarikataElems = document.getElementsByName('q1');	// 和了り方要素
let machiElems = document.getElementsByName('machi');	// 待ち要素
let atamaElems = document.getElementsByName('atama');	// 雀頭要素
let countBtnElems = document.getElementsByClassName("count-btn");	// カウントボタン要素

window.onload=function LoadPoint()

window.onload=function LoadPoint(){
	// 得点表を取得
	
    pointArray = [
		// 0列目は25符(七対子)、以降は20符、30符、40符……110符と続き、符 / 10 - 1 で列番号と相当する
		[ // 子ロン和了
            ['-','-','1000','1300','1600','2000','2300','2600','2900','3200','3600'],
            ['1600','-','2000','2600','3200','3900','4500','5200','5800','6400','7100'],
            ['3200','-','3900','5200','6400','7700','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000'],
            ['6400','-','7700','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000'],
            ['満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000','満貫 8000'],
            ['跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000'],
            ['跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000','跳満 12000'],
            ['倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000'],
            ['倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000'],
            ['倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000','倍満 16000'],
            ['三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000'],
            ['三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000','三倍満 24000'],
            ['役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000','役満 32000']
        ],
        [ // 子ツモ和了
            ['-','-','300 : 500','400 : 700','400 : 800','500 : 1000','600 : 1200','700 : 1300','800 : 1500','800 : 1600','-'],
            ['-','400 : 700','500 : 1000','700 : 1300','800 : 1600','1000 : 2000','1200 : 2300','1300 : 2600','1500 : 2900','1600 : 3200','1800 : 3600'],
            ['800 : 1600','700 : 1300','1000 : 2000','1300 : 2600','1600 : 3200','2000 : 3900','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000'],
            ['1600 : 3200','1300 : 2600','2000 : 3900','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000'],
            ['満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000','満貫 2000 : 4000'],
            ['跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000'],
            ['跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000','跳満 3000 : 6000'],
            ['倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000'],
            ['倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000'],
            ['倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000','倍満 4000 : 8000'],
            ['三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000'],
            ['三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000','三倍満 6000 : 12000'],
            ['役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000','役満 8000 : 16000']
        ],
        [ // 親ロン和了
            ['-','-','1500','2000','2400','2900','3400','3900','4400','4800','5300'],
            ['2400','-','2900','3900','4800','5800','6800','7700','8700','9600','10600'],
            ['4800','-','5800','7700','9600','11600','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000'],
            ['9600','-','11600','満貫12000','満貫12000','満貫12000','満貫12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000'],
            ['満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000','満貫 12000'],
            ['跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000'],
            ['跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000','跳満 18000'],
            ['倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000'],
            ['倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000'],
            ['倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000','倍満 24000'],
            ['三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000'],
            ['三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000','三倍満 36000'],
            ['役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000','役満 48000']
        ],
        [ // 親ツモ和了
            ['-','-','500 ALL','700 ALL','800 ALL','1000 ALL','1200 ALL','1300 ALL','1500 ALL','1600 ALL','-'],
            ['-','700 ALL','1000 ALL','1300 ALL','1600 ALL','2000 ALL','2300 ALL','2600 ALL','2900 ALL','3200 ALL','3600 ALL'],
            ['1600 ALL','1300 ALL','2000 ALL','2600 ALL','3200 ALL','3900 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL'],
            ['3200 ALL','2600 ALL','3900 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL'],
            ['満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL','満貫 4000 ALL'],
            ['跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL'],
            ['跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL','跳満 6000 ALL'],
            ['倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL'],
            ['倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL'],
            ['倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL','倍満 8000 ALL'],
            ['三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL'],
            ['三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL','三倍満 12000 ALL'],
            ['役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL','役満 16000 ALL']
        ]
    ];
}

ResetValue()

function ResetValue(){
	// 入力をリセットする
	
	resultArray = [0, 0, 0, 30];		// 符の初期値は30符
	isMenzen = true;
	isPinfu = false;
	isKuitan = false;
	isChitoitsu = false;
	isYakuhaiCountDisabled = false;
	isMentsuCountDisabled = false;
	isChuMentsuCountDisabled = false;
	
	oyakoElems[0].checked = true;		// 子にチェック
	agarikataElems[0].checked = true;	// 門前にチェック
	agarikataElems[1].checked = true;	// ロンにチェック
	
	// 一翻役 門前
	for (i = 0; i<document.yaku1menzen.length; i++) {
		document.yaku1menzen[i].checked = false;
		if (i === 1) {	// 一発は非活性
			document.yaku1menzen[i].disabled = true;
		} else {
			document.yaku1menzen[i].disabled = false;
        }
    }
	
	// 一翻役 喰い下がりなし
	for (i = 0; i<document.yaku1.length; i++) {
		document.yaku1[i].checked = false;
		if (i === 2 || i === 3) {	// 嶺上開花と海底摸月は非活性
			document.yaku1[i].disabled = true;
		} else {
			document.yaku1[i].disabled = false;
        }
    }
	
	// 二翻役 門前
	for (i = 0; i<document.yaku2menzen.length; i++) {
		document.yaku2menzen[i].checked = false;
		document.yaku2menzen[i].disabled = false;
    }
	
	// 二翻役 喰い下がりあり
	for (i = 0; i<document.yaku2kuisage.length; i++) {
		document.yaku2kuisage[i].checked = false;
		document.yaku2kuisage[i].disabled = false;
    }
	
	// 二翻役 喰い下がりなし
	for (i = 0; i<document.yaku2.length; i++) {
		document.yaku2[i].checked = false;
		document.yaku2[i].disabled = false;
    }
	
	// 三翻役 門前
	for (i = 0; i<document.yaku3menzen.length; i++) {
		document.yaku3menzen[i].checked = false;
		document.yaku3menzen[i].disabled = false;
    }
	
	// 三翻役 喰い下がりあり
	for (i = 0; i<document.yaku3kuisage.length; i++) {
		document.yaku3kuisage[i].checked = false;
		document.yaku3kuisage[i].disabled = false;
    }
	
	// 六翻役 喰い下がりあり
	document.yaku6kuisage[0].checked = false;
	document.yaku6kuisage[0].disabled = false;
	
	// 待ちの活性化
	for (i = 0; i < machiElems.length; i++) {
		machiElems[i].disabled = false;
	}
	machiElems[0].checked = true;
	
	// 雀頭の活性化
	for (i = 0; i < atamaElems.length; i++) {
		atamaElems[i].disabled = false;
	}
	atamaElems[0].checked = true;
	
	// カウント部分の活性化
	document.getElementById(countIdArray[0]).classList.remove("count-btn-disabled");
	for (i = 0; i < countIdArray.length; i++) {
		document.getElementById(countIdArray[i]).textContent = 0;
		document.getElementById(countIdArray[i]).classList.remove("count-text-disabled");
	}
	
	// カウントボタンの活性化
	for (i = 0; i < countBtnElems.length; i++) {
		if (i < 2 || i > 3) {
			countBtnElems[i].classList.remove("count-btn-disabled");
		}
	}
	
	// 結果画面
	document.getElementById("result-han").textContent = 0;
	document.getElementById("result-fu").textContent = 30;
	document.getElementById("result-point").textContent = "-";
}

Q0Click()

function Q0Click() {
	// 和了者入力
	
	if(oyakoElems[0].checked===true){
		// 子
		resultArray[0] = oyakoElems[0].value;
	} else {
		// 親
		resultArray[0] = oyakoElems[1].value;
	};
	
	ShowResult();	// 結果を表示
}

Q1Click()

function Q1Click() {
	// 和了り方入力
	
	if (agarikataElems[0].checked === true) {
		// 門前の場合の処理
		isMenzen = true;
	} else {
		// 門前でない場合の処理
		isMenzen = false;
	};
	
	if (agarikataElems[1].checked === true){
		// ロン
		resultArray[1] = agarikataElems[1].value;		
	} else {
		// ツモ
		resultArray[1] = agarikataElems[2].value;
	}
	
	YakuDisabled();	// 役の非活性
	SubtotalHan();	// 翻の計算
	SubtotalFu();	// 符の計算
	ShowResult();	// 結果を表示
}

Q2Click()

function Q2Click() {
	// 役の入力
	
	// 平和のフラグチェック
	if (document.yaku1menzen[2].checked) {
		isPinfu = true;
	} else {
		isPinfu = false;
	}
	
	// 喰いタンのフラグチェック
	if (document.yaku1[0].checked && isMenzen === false) {
		isKuitan = true;
	} else {
		isTanyao = false;
	}
	
	// 七対子のフラグチェック
	if (document.yaku2menzen[1].checked) {
		isChitoitsu = true;
	} else {
		isChitoitsu = false;
	}
	
	YakuDisabled();	// 役の非活性
	SubtotalHan();	// 翻の計算
	ShowResult();	// 結果を表示
}

Q3Click()

function Q3Click() {
	SubtotalFu();	// 符の計算
	ShowResult();	// 結果を表示
}

YakuEnabled()

function YakuEnabled() {
	// 役のボタンをすべて活性化する
	
	// 一翻役 門前
	for (i = 0; i<document.yaku1menzen.length; i++) {
        document.yaku1menzen[i].disabled = false;
    }
	
	// 一翻役 喰い下がりなし
	for (i = 0; i<document.yaku1.length; i++) {
        document.yaku1[i].disabled = false;
    }
	
	// 二翻役 門前
	for (i = 0; i<document.yaku2menzen.length; i++) {
        document.yaku2menzen[i].disabled = false;
    }
	
	// 二翻役 喰い下がりあり
	for (i = 0; i<document.yaku2kuisage.length; i++) {
        document.yaku2kuisage[i].disabled = false;
    }
	
	// 二翻役 喰い下がりなし
	for (i = 0; i<document.yaku2.length; i++) {
        document.yaku2[i].disabled = false;
    }
	
	// 三翻役 門前
    document.yaku3menzen[0].disabled = false;
	
	// 三翻役 喰い下がりあり
	for (i = 0; i<document.yaku3kuisage.length; i++) {
        document.yaku3kuisage[i].disabled = false;
    }
	
	// 六翻役 喰い下がりあり
	document.yaku6kuisage[0].disabled = false;
	
	// カウント部分の活性化
	
	// 役牌
	document.getElementById(countIdArray[0]).classList.remove('count-btn-disabled');
	
	// 面子
	for (i = 2; i < countIdArray.length; i++) {
		document.getElementById(countIdArray[i]).classList.remove('count-text-disabled');
	}
	
	// 役牌と面子のカウントボタン
	for (i = 0; i < countBtnElems.length; i++) {
		if (i < 2 || i > 3) {
			countBtnElems[i].classList.remove('count-btn-disabled');
		}
	}
	
	isYakuhaiCountDisabled = false;
	isMentsuCountDisabled = false;
	isChuMentsuCountDisabled = false;
	
	// 待ちの活性化
	for (i = 0; i < machiElems.length; i++) {
		machiElems[i].disabled = false;
	}
	
	// 雀頭の活性化
	for (i = 0; i < atamaElems.length; i++) {
		atamaElems[i].disabled = false;
	}
}

YakuDisabled()

function YakuDisabled() {
	// 役の非活性化
	
	YakuEnabled();	// 一旦すべて活性化する
	
	if (isMenzen === true) {
		// 門前役の活性化
		// 一翻
		for (i = 0; i < document.yaku1menzen.length; i++) {
            document.yaku1menzen[i].disabled = false;
        }
		
		// 二翻
        for (i = 0; i < document.yaku2menzen.length; i++) {
            document.yaku2menzen[i].disabled = false;
        }
		
		// 三翻
        for (i = 0; i < document.yaku3menzen.length; i++) {
            document.yaku3menzen[i].disabled = false;
        }
		
	} else {
		// 門前役の非活性化
		// 一翻
		for (i = 0; i < document.yaku1menzen.length; i++) {
            document.yaku1menzen[i].disabled = true;
        }
		
		// 二翻
        for (i = 0; i < document.yaku2menzen.length; i++) {
            document.yaku2menzen[i].disabled = true;
        }
		
		// 三翻
        for (i = 0; i < document.yaku3menzen.length; i++) {
            document.yaku3menzen[i].disabled = true;
        }		
	};
	
	if (resultArray[1] == 0){
		// ロン役の活性化
		document.yaku1[1].disabled = false;		// 槍槓
		document.yaku1[4].disabled = false;		// 河底撈魚
		
		// ツモ役の非活性化
		document.yaku1[2].disabled = true;		// 嶺上開花
		document.yaku1[3].disabled = true;		// 海底摸月
		
	} else {
		// ツモ役の活性化
		document.yaku1[2].disabled = false;		// 嶺上開花
		document.yaku1[3].disabled = false;		// 海底摸月
		
		// ロン役の非活性化
		document.yaku1[1].disabled = true;		// 槍槓
		document.yaku1[4].disabled = true;		// 河底撈魚
	}
	
	// 立直
	if (document.yaku1menzen[0].checked === true) {
		document.yaku2menzen[0].disabled = true;	// 両立直
	}
	
	// 一発(立直と両立直が両方falseの場合)
	if (document.yaku1menzen[0].checked === false && document.yaku2menzen[0].checked === false) {
		document.yaku1menzen[1].disabled = true;	// 一発
	}
	
	// 平和
	if (document.yaku1menzen[2].checked === true) {
		document.yaku1[2].disabled = true;				// 嶺上開花
		document.yaku2menzen[1].disabled = true;		// 七対子
		for (i = 0; i < document.yaku2.length; i++) {	// 二翻役(喰い下がりなし)はすべて複合しない
			document.yaku2[i].disabled = true;		
		}
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
		isMentsuCountDisabled = true;	// 面子カウントを不活性にする
		
		// 待ちは両面以外を不活性にする
		for (i = 1; i < machiElems.length; i++) {
			machiElems[i].disabled = true;
		}
		machiElems[0].checked = true;
		
		// 雀頭は数牌・オタ風以外を不活性にする
		for (i = 1; i < atamaElems.length; i++) {
			atamaElems[i].disabled = true;
		}
		atamaElems[0].checked = true;
	}
	
	// 一盃口
	if (document.yaku1menzen[3].checked === true) {
		document.yaku2menzen[1].disabled = true;		// 七対子
		for (i = 0; i < document.yaku2.length; i++) {	// 二翻役(喰い下がりなし)はすべて複合しない
			document.yaku2[i].disabled = true;		
		}
		document.yaku3menzen[0].disabled = true;		// 二盃口
	}
	
	// 断么九
	if (document.yaku1[0].checked === true) {
		document.yaku2kuisage[1].disabled = true;		// 一気通貫
		document.yaku2kuisage[2].disabled = true;		// 混全帯么九
		document.yaku2[3].disabled = true;				// 混老頭
		for (i = 0; i < document.yaku3kuisage.length; i++) {	// 三翻役(喰い下がりあり)はすべて複合しない
			document.yaku3kuisage[i].disabled = true;
		}
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
	}
	
	// 槍槓
	if (document.yaku1[1].checked === true) {
		document.yaku1[2].disabled = true;		// 嶺上開花
		document.yaku1[3].disabled = true;		// 海底摸月
		document.yaku1[4].disabled = true;		// 河底撈魚
	}
	
	// 嶺上開花
	if (document.yaku1[2].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1[1].disabled = true;			// 槍槓
		document.yaku1[3].disabled = true;			// 海底摸月
		document.yaku1[4].disabled = true;			// 河底撈魚
	}
	
	// 海底摸月
	if (document.yaku1[3].checked === true) {
		document.yaku1[1].disabled = true;		// 槍槓
		document.yaku1[2].disabled = true;		// 嶺上開花
		document.yaku1[4].disabled = true;		// 河底撈魚
	}
	
	// 河底撈魚
	if (document.yaku1[4].checked === true) {
		document.yaku1[1].disabled = true;		// 槍槓
		document.yaku1[2].disabled = true;		// 嶺上開花
		document.yaku1[3].disabled = true;		// 海底摸月
	}
	
	// 両立直
	if (document.yaku2menzen[0].checked === true) {
		document.yaku1menzen[0].disabled = true;	// 立直
	}
	
	// 七対子
	if (document.yaku2menzen[1].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku1[2].disabled = true;			// 嶺上開花
		for (i = 0; i < document.yaku2kuisage.length; i++) {	// 二翻役(喰い下がりあり)はすべて複合しない
			document.yaku2kuisage[i].disabled = true;
		}
		document.yaku2[0].disabled = true;			// 対々和
		document.yaku2[1].disabled = true;			// 三暗刻
		document.yaku2[2].disabled = true;			// 三色同刻
		document.yaku2[4].disabled = true;			// 三槓子
		document.yaku3menzen.disabled = true		// 二盃口
		document.yaku3kuisage.disabled = true		// 純全帯么九
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
		isMentsuCountDisabled = true;	// 面子カウントを不活性にする
		
		// 単騎待ち以外を不活性にする
		for (i = 0; i < machiElems.length - 1; i++) {
			machiElems[i].disabled = true;
		}
		machiElems[4].checked = true;
	}
	
	// 三色同順
	if (document.yaku2kuisage[0].checked === true) {
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		for (i = 0; i<document.yaku2.length; i++) {	// 二翻役(喰い下がりなし)はすべて複合しない
			document.yaku2[i].disabled = true;
		}
		document.yaku3menzen[0].disabled = true;	// 二盃口
		document.yaku3kuisage[0].disabled = true;	// 混一色
		document.yaku6kuisage[0].disabled = true;	// 清一色
	}
	
	// 一気通貫
	if (document.yaku2kuisage[1].checked === true) {
		document.yaku1[0].disabled = true;			// 断么九
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[2].disabled = true;	// 混全帯么九
		document.yaku3menzen[0].disabled = true;	// 二盃口
		document.yaku3kuisage[1].disabled = true;	// 純全帯么九
	}
	
	// 混全帯么九
	if (document.yaku2kuisage[2].checked === true) {
		document.yaku1[0].disabled = true;			// 断么九
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		document.yaku2[3].disabled = true;			// 混老頭
		document.yaku3kuisage[1].disabled = true;	// 純全帯么九
		document.yaku6kuisage[0].disabled = true;	// 清一色
	}
	
	// 対々和
	if (document.yaku2[0].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku2menzen[1].disabled = true;	// 七対子
		for (i=0; i<document.yaku2kuisage.length; i++) {	// 二翻役(喰い下がりあり)はすべて複合しない
			document.yaku2kuisage[i].disabled = true;
		}
		document.yaku3menzen[0].disabled = true;	// 二盃口
		document.yaku3kuisage[1].disabled = true;	// 純全帯么九
		
		// シャボ・単騎待ち以外を不活性にする
		for (i = 0; i < machiElems.length - 1; i++) {
			if (i !== 1) {
				machiElems[i].disabled = true;
			}
		}
		
		// 単騎待ちでなければシャボ待ちに切り替える
		if (machiElems[4].checked === false) {
			machiElems[1].checked = true;
		}
	}
	
	// 三暗刻
	if (document.yaku2[1].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		document.yaku3menzen[0].disabled = true;	// 二盃口
	}
	
	// 三色同刻
	if (document.yaku2[2].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		document.yaku3menzen[0].disabled = true;	// 二盃口
		document.yaku3kuisage[0].disabled = true;	// 混一色
		document.yaku6kuisage[0].disabled = true;	// 清一色
	}
	
	// 混老頭
	if (document.yaku2[3].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku2menzen[0].disabled = true;	// 断么九
		document.yaku2menzen[1].disabled = true;	// 七対子
		for (i = 0; i <document.yaku2kuisage.length; i++) {		// 二翻役(喰い下がりあり)はすべて複合しない
			document.yaku2kuisage[i].disabled = true;
		}
		document.yaku3menzen[0].disabled = true;	// 二盃口
		document.yaku3kuisage[1].disabled = true;	// 純全帯么九
		document.yaku6kuisage[0].disabled = true;	// 清一色
		
		// シャボ・単騎待ち以外を不活性にする
		for (i = 0; i < machiElems.length - 1; i++) {
			if (i !== 1) {
				machiElems[i].disabled = true;
			}
		}
		
		// 単騎待ちでなければシャボ待ちに切り替える
		if (machiElems[4].checked === false) {
			machiElems[1].checked = true;
		}
		
		// 面子の中張牌を不活性にする
		isChuMentsuCountDisabled = true;
	}
	
	// 三槓子
	if (document.yaku2[4].checked === true) {
		document.yaku1menzen[2].disabled = true;	// 平和
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		document.yaku3menzen[0].disabled = true;	// 二盃口
	}
	
	// 二盃口
	if (document.yaku3menzen[0].checked === true) {
		document.yaku1menzen[3].disabled = true;	// 一盃口
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		for (i = 0; i < document.yaku2.length; i++) {		// 二翻役(喰い下がりなし)はすべて複合しない
			document.yaku2[i].disabled = true;
		}
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
		isMentsuCountDisabled = true;	// 面子カウントを不活性にする
		
		// シャボ待ちを不活性にする
		machiElems[1].disabled = true;
		if (machiElems[1].checked === true) {
			machiElems[0].checked = true;
		}
	}
	
	// 混一色
	if (document.yaku3kuisage[0].checked === true) {
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2[2].disabled = true;			// 三色同刻
		document.yaku6kuisage[0].disabled = true;	// 清一色
	}
	
	// 純全帯么九
	if (document.yaku3kuisage[1].checked === true) {
		document.yaku2menzen[0].disabled = true;	// 断么九
		document.yaku2menzen[1].disabled = true;	// 七対子
		document.yaku2kuisage[1].disabled = true;	// 一気通貫
		document.yaku2kuisage[2].disabled = true;	// 混全帯么九
		document.yaku2[1].disabled = true;			// 三暗刻
		document.yaku2[3].disabled = true;			// 混老頭
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
	}
	
	// 清一色
	if (document.yaku6kuisage[0].checked === true) {
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2kuisage[2].disabled = true;	// 混全帯么九
		document.yaku2kuisage[0].disabled = true;	// 三色同順
		document.yaku2[3].disabled = true;			// 混老頭
		document.yaku3kuisage[0].disabled = true;	// 混一色
		
		isYakuhaiCountDisabled = true;	// 役牌カウントを不活性にする
	}
	
	// 役牌カウントの非活性化
	if (isYakuhaiCountDisabled === true) {
		document.getElementById(countIdArray[0]).classList.add('count-btn-disabled');
		document.getElementById(countIdArray[0]).textContent = 0;
		for (i = 0; i < 2; i++) {
			countBtnElems[i].classList.add('count-btn-disabled');
		}
	}
	
	// 面子カウントの非活性化
	if (isMentsuCountDisabled === true) {
		for (i = 2; i < countIdArray.length; i++) {
			document.getElementById(countIdArray[i]).classList.add('count-text-disabled');
			document.getElementById(countIdArray[i]).textContent = 0;
		}
		
		for (i = 4; i < countBtnElems.length; i++) {
			countBtnElems[i].classList.add('count-btn-disabled');
		}
		
	} else if (isChuMentsuCountDisabled === true) {	// 混老頭の場合は中張牌のみ非活性化
		for (i = 2; i < 6; i++) {
			document.getElementById(countIdArray[i]).classList.add('count-text-disabled');
			document.getElementById(countIdArray[i]).textContent = 0;
		}
		
		for (i = 4; i < 12; i++) {
			countBtnElems[i].classList.add('count-btn-disabled');
		}
	}
}

CountPlus(n)

function CountPlus(n) {
	// カウントプラスボタン
	let currentValue = Number(document.getElementById(countIdArray[n]).textContent);
	
	if(n < 2) {	// 役牌・ドラ
		if(n === 0) {	// 役牌
			if(isYakuhaiCountDisabled === false && currentValue < 4) {
				// 役牌は4まで
				currentValue++;
				document.getElementById(countIdArray[n]).textContent = currentValue;
				SubtotalHan();
			}
		} else {		// ドラ
			if(currentValue < 12) {
				// ドラは12まで
				currentValue++;
				document.getElementById(countIdArray[n]).textContent = currentValue;
				SubtotalHan();
			}
		}
		SubtotalHan();
	} else if (isMentsuCountDisabled === false) {	// 面子カウントを比活性にする
		let subtotalMentsu = 0;
		if (isChuMentsuCountDisabled === false) {	// 中張牌も含むすべての面子
			for (let i = 2; i < 10; i++) {
				subtotalMentsu = subtotalMentsu + Number(document.getElementById(countIdArray[i]).textContent);
			}
		} else {									// 中張牌のみ
			for (let i = 6; i < 10; i++) {
				subtotalMentsu = subtotalMentsu + Number(document.getElementById(countIdArray[i]).textContent);
			}
		}
		
		if(subtotalMentsu < 4) {	// 面子は4つまで
			if (n > 5 || isChuMentsuCountDisabled === false) {	// 中張牌以外、または中張牌カウント非活性フラグがFALSEの場合
				currentValue++;
				document.getElementById(countIdArray[n]).textContent = currentValue;
				SubtotalFu();
			}
		}
	}
	ShowResult();
}

CountMinus(n)

function CountMinus(n) {
	// カウントマイナスボタン
	
	if (n < 1 && isYakuhaiCountDisabled === true) {				// 役牌カウントが非活性の場合
		return;
	} else if (n > 1 && isMentsuCountDisabled === true) {		// 面子カウントが非活性の場合
		return;
	} else if (n < 6 && isChuMentsuCountDisabled === true) {	// 中張牌カウントが非活性の場合
		return;
	}
	
	let currentValue = Number(document.getElementById(countIdArray[n]).textContent);	// 現在の値を取得
	if (currentValue > 0) {	// 値が1以上の場合
		currentValue--;
		document.getElementById(countIdArray[n]).textContent = currentValue;
		
		if(n < 2) {		// ドラの場合は翻を再計算
			SubtotalHan();
		} else {		// それ以外の場合は符を再計算
			SubtotalFu();
		}
	}
	ShowResult();
}

SubtotalHan()

function SubtotalHan(){
	// 翻を計算
	let han = 0;
    let i;

    // 一翻(面前)
    if (isMenzen===true) {
        for (i=0; i<document.yaku1menzen.length; i++) {
            if (document.yaku1menzen[i].checked) {
                han++;
            }
        }
    }

    // 一翻
    for (i=0; i<document.yaku1.length; i++) {
        if (document.yaku1[i].checked) {
			han++;
        }
    }
	
	// 役牌
	if (isYakuhaiCountDisabled === false) {
		han = han + Number(document.getElementById(countIdArray[0]).textContent);
	}
	
	// ドラ
	han = han + Number(document.getElementById(countIdArray[1]).textContent);

    // 二翻(面前)
    if (isMenzen===true) {
        for (i=0; i<document.yaku2menzen.length; i++) {
            if (document.yaku2menzen[i].checked) {
                han = han + 2;
            }
        }
    }
	
    // 二翻(喰い下がりあり)
    for (i=0; i<document.yaku2kuisage.length; i++) {
        if (document.yaku2kuisage[i].checked) {
            if (isMenzen===true){
                han = han + 2;
            } else {
                han++;
            }
        }
    }

    // 二翻(
    for (i=0; i<document.yaku2.length; i++) {
        if (document.yaku2[i].checked) {
            han = han + 2;
        }
    }

    // 三翻(面前)
    if (isMenzen===true) {
        for (i=0; i<document.yaku3menzen.length; i++) {
            if (document.yaku3menzen[i].checked) {
                han = han + 3;
            }
        }
    }

    // 三翻(喰い下がりあり)
    for (i=0; i<document.yaku3kuisage.length; i++) {
        if (document.yaku3kuisage[i].checked) {
            if (isMenzen===true){
                han = han + 3;
            } else {
                han = han + 2;
            }
        }
    }

    // 六翻(喰い下がりあり)
    for (i=0; i<document.yaku6kuisage.length; i++) {
        if (document.yaku6kuisage[i].checked) {
            if (isMenzen===true){
                han = han + 6;
            } else {
                han = han + 5;
            }
        }
    }

    resultArray[2] = han;
}

SubtotalFu()

function SubtotalFu() {
	// 符を計算
	let fu = 20;
	
	if(resultArray[1]==0) {
		if(isMenzen===true) {
			fu = 30;	// 門前ロン
		} else {
			fu = 20;	// 喰いロン
		}
	} else {
		fu = 22;		// ツモ符
	}
	
	// 待ちによる符の加算
	let elems = document.getElementsByName("machi");
	if(elems[0].checked===true || elems[1].checked===true){
		// 両面・シャボ待ちは符無し
	} else {
		// 辺張・嵌張・単騎待ちは2符加算
		fu = fu + 2;
	};
	
	// 雀頭による符の加算
	let elems2 = document.getElementsByName("atama");
	if(elems2[0].checked===true) {
		// 数牌・オタ風は符無し
	} else if(elems2[1].checked===true) {
		// 役牌は2符加算
		fu = fu + 2;
	} else {
		// 連風牌は4符加算
		fu = fu + 4;
	}
	
	// 面子による符の加算
	if (isMentsuCountDisabled === false) {
		fu = fu + Number(document.getElementById(countIdArray[2]).textContent) * 2;		// 中張牌・明刻
		fu = fu + Number(document.getElementById(countIdArray[3]).textContent) * 4;		// 中張牌・暗刻
		fu = fu + Number(document.getElementById(countIdArray[4]).textContent) * 8;		// 中張牌・明槓
		fu = fu + Number(document.getElementById(countIdArray[5]).textContent) * 16;	// 中張牌・暗槓
		fu = fu + Number(document.getElementById(countIdArray[6]).textContent) * 4;		// 么九牌・明刻
		fu = fu + Number(document.getElementById(countIdArray[7]).textContent) * 8;		// 么九牌・暗刻
		fu = fu + Number(document.getElementById(countIdArray[8]).textContent) * 16;	// 么九牌・明槓
		fu = fu + Number(document.getElementById(countIdArray[9]).textContent) * 32;	// 么九牌・暗槓
	}	
    
	fu = Math.ceil(fu / 10) * 10;	// 1の位を切り上げ
	resultArray[3] = fu;
}

ShowResult()

function ShowResult() {
	// 結果を表示する
	let x = Number(resultArray[0]) + Number(resultArray[1]);	// (子ロン, 子ツモ, 親ロン, 親ツモ)
	let y = Number(resultArray[2]) - 1;							// 翻数
	let showResultHan = Number(resultArray[2]);
	if (isMenzen===true && resultArray[1]==1) {	// ツモの場合は1翻追加
		y++;
		showResultHan++;
	}
	if (y > 13) {	// 13翻以上は13にする
		y = 13;
	}
	let z = resultArray[3] / 10 - 1;	// 符数
	
	let showResultFu = resultArray[3];	// 表示する符数
	
	// 平和ツモの場合は20符にする
	if(isPinfu === true && resultArray[1] == 1) {
		showResultFu = 20;
		z = 1;
	}
	
	// 七対子の場合は25符にする
	if(isChitoitsu === true) {
		showResultFu = 25;
		z = 0;
	}
	
	// 喰いタンの20符は30符にする
	if (isKuitan === true && z === 1) {
		z = 2;
		showResultFu = 30;
	}
	
	// 符が120以上の場合は列数を上限に設定する
	if (z > 10) {
		z = 10;
	}
	
	// 四暗刻の判定
	if (Number(document.getElementById(countIdArray[3]).textContent)
		+ Number(document.getElementById(countIdArray[5]).textContent)
		+ Number(document.getElementById(countIdArray[7]).textContent)
		+ Number(document.getElementById(countIdArray[9]).textContent) == 4) {
		y = 12;
	}
	
	// 四槓子の判定
	if (Number(document.getElementById(countIdArray[4]).textContent)
		+ Number(document.getElementById(countIdArray[5]).textContent)
		+ Number(document.getElementById(countIdArray[8]).textContent)
		+ Number(document.getElementById(countIdArray[9]).textContent) == 4) {
		y = 12;
	}
	
	document.getElementById('result-han').textContent = showResultHan;	// 翻を表示
	document.getElementById('result-fu').textContent = showResultFu;	// 符を表示
	if (y < 0) {	// 0翻の場合
		document.getElementById('result-point').textContent = '-';
	} else {		// 得点を表示
		document.getElementById('result-point').textContent = pointArray[x][y][z];
	}
}

コメント

コメントする前にお読みください

プログラミングに関する質問について、詳細なコードはお答えしませんのでご了承ください。
また、迷惑コメント防止のために初回のコメント投稿は承認制です。投稿が反映されるまで少し時間がかかります。