清一色トレーニング QYSMJ
UPDATE: 基本ルール・操作方法・レギュレーション・表示スタイル・第1回スコアアタック大会について追記した。
清一色トレーニングのためのゲームは世の中に数あれど、私も作ってみた。
基本ルール・操作方法
start / S キー でゲームを開始する。配牌とツモ牌が与えられる。アガリでなければ打牌を選択 (タッチ・クリック / 持っていれば 1–9 キー, ツモ切りは0キー) すると次のツモ牌が与えられる。アガリは hu / スペースキーで宣言して得点 (誤っていたら失点) する。アガリの正誤にかかわらず次の配牌が与えられる。ゲーム開始から所定の時間が経過すると終了してスコアが表示され、ツイートすることができる。
レギュレーション
デフォルト設定は手牌13枚 (アガリ14枚) で、七対を認めるが4枚使い七対は認めない。正しくないアガリの宣言には一律1000点のペナルティが与えられる。アガリになっているにもかかわらず見逃したり、フリテンになったりしてもペナルティはない。正しいアガリの宣言には配牌からの時間に応じた得点が与えられる (もちろん、早いほど良い)。
表示スタイル
2種類のスタイルおよび索萬筒の3スートに対応している。どれを選んでもよいし、ゲーム中にも変更できる。
第1回スコアアタック大会
まず事前練習用のURLで十分に練習することをおすすめする。
参加方法は簡単で、スコアアタック大会用のURLにアクセスする。表示スタイルの設定は任意に変更してよいが、時間関係の設定は変更せずに最初の1ゲームをプレイし、結果表示画面のツイートボタンからツイートしてほしい。その際、すでに表示されているツイート内容は消してはいけない。感想などを書き加えていただけるとありがたい。
特色 (external)
インストールも登録も必要なく、ブラウザで開くだけで遊べる。ゲーム終了時には Twitter でスコア (認証等なし) をつぶやくことができる。
単なる待ち当てより実践的な、(聴牌とは限らない) 配牌から始めてアガリを目指し、アガリによって得点するゲームとした。
また、柔軟な設定を可能にした。
まずは手牌の枚数について、1枚から16枚まで選べる。4枚であれば麻雀自体の初心者が行う4枚麻雀としても使えるし、7枚・10枚と増やしていって形に慣れることができる。また、13枚で終わることなく、台湾などで行われている16枚のルールにも対応した。
次に七対の扱いについて、認めない・認める・4枚使いも認める の3つから選ぶことができる。これによって国際ルールや三麻で生じる特殊な複合形も含めた練習が可能になる。
さらにゲーム進行の速さ設定。打牌からツモまでの時間 (デフォルト1秒) を短くすることができるが、それに応じてツモから打牌までの時間も短くしなければスコアの伸びは小さい。具体的には、アガリ点は打牌からツモまでの時間をアガリまでの時間で割った値の平方根に比例するようにした。したがって、たとえば速さ設定を2倍にしても、プレイ速度が伴わなければスコアは (1/√2)倍になってしまう。
特色 (internal)
プログラミング言語には TypeScript, ライブラリには React + Redux などを用いた。JavaScript も数行しか書いたことがなかった私でもハマるポイントは少なく、やはり Microsoft のプログラミング言語はどれも優れていると思う。
SVG の牌画像を使うことで、拡大縮小しても美しい描画を実現した。2つのスタイルを実装しており、PostModern は Ubuntu で branding-ubuntu をインストールすると使うことのできる /usr/share/gnome-mahjongg/thems/postmodern.svg を、GL-MT は Gutenberg Labo 様 による GL-MahjongTile フォントを SVG化して着色したものを用いた。後者については、もともと同じ製作者によるカラーフォントをそのまま使用しようと思ったが、対応ブラウザが少ないとのことで断念し、SVG化がうまくいかなかったので白黒のものを使った。後者については製作者のセンスなので、よりよい彩色の提案を歓迎する。
今後の課題
ユーザ数を増やしたい。ぜひ遊んでつぶやいてほしい。なお、遊ぶだけでは私には1円も入らない。
アガリ逃し・フリテンに対するペナルティを実装したい。今のところペナルティは錯和のみだが、アガリ逃しも同じくらい痛くてしかるべきであるし、フリテンでは出アガリできないルールを念頭にしたトレーニングもできるようにしたい。
使う牌の制限を実装したい。これには2つの意義がある。1つは、牌の範囲を狭くするモードを実装し、より複雑な手牌に慣れやすくすること。1つは、実践的には自分の手牌と河のほかにも見えている牌があることがあるので、それに応じた選択の練習をしやすくすること。
より枚数の多くなる変化のないテンパイもゴールとするモード。
待ち枚数の多い打牌を選び続けなければならないモード。
プレイ後に手牌の変化履歴の表示や保存・牌姿のツイートをする機能。
他にも「あったらおもしろい」機能は色々なものが考えられる。自分で思いつけば随時追記するし、この記事へのコメント / GitHub Issue / Twitter などでの意見、もしくは実装もできる方は GitHub で Pull Request などいただきたい。
(おわり; 例によって全文無料)
ここから先は
¥ 256
この記事が気に入ったらチップで応援してみませんか?