初期(昭和50年代半ば)のコンピュータ麻雀について(四人麻雀)。
昭和50年代半ば(西暦1980年前後)に開発された初期のコンピュータ麻雀のうち、特に四人麻雀について。
- 二人打ちについては、それだけで一本の記事になりそうだったため、別の機会にまとめたいと思います。
- 本記事は制作者の曖昧な記憶を基にしておりますので、一部に間違いがある事が予想されます。
初期のコンピュータ四人麻雀の概要。
マイクロコンピュータが開発され、個人向けのコンピュータが製品化され始めた昭和50年代半ば、その頃から既にコンピュータ麻雀が作られておりました。
初の四人麻雀は昭和54年(西暦1979年)、日電・TK-80ベーシックステーション(TK-80BS)向けに峰岸順二さんが開発したものでした(I/O 昭和54年12月号)。
TK-80BSにはグラフィック機能がないため、文字で牌を表したりして実現しました。
峰岸さんは、その後も富士通・マイクロエイト(FM-8)などにグラフィック機能を用いた四人麻雀を開発したりもしておりました。
その後、昭和55年には高嶋晃さんが峰岸版をベースに日電・PC-8001上で動作するグラフィック麻雀を開発しましたが(I/O 昭和55年10月号)、高嶋版にはグラフィックで牌を表示するだけでなく、和了時に役を判定する機能も実装しておりました。
- 峰岸版はTK-80BS版, FM-8版ともに、和了時に点数を自分で計算して入力する必要がありました。
いずれの版に於いても、当時のコンピュータに組み込まれたインタプリタ型のBASICでコードを組んで実現しておりました。
- 当時のコンピュータは殆どが 8ビットで、組み込まれたインタプリタ型のBASICがOSのような機能も兼ねておりました。
- 稀に牌のグラフィック表示などで機械語を用いたものもありましたが、あくまでもBASICが基本でした。
また、メモリが極端に少なかった事と、BASICで書かれたコードの実行速度が極端に遅かった事から、機能も大幅に制限されたものとなっておりました。
ちなみに、当時は牌をテーブルを囲むようにレイアウトする事さえ不可能に近かったため、四人の打牌とプレイヤの手牌を平行させてレイアウトしておりました。
このときのコーディングは、その後暫くの間コンピュータ四人打ち麻雀の雛形となっておりましたが、日電・PC-8001用PCGスーパー麻雀(I/O 昭和57年10月号)が発表され、これを元としたと思われる作品が市販されるようになってからは徐々に衰退して行きました。
初期のコンピュータ四人麻雀の典型的な仕様。
開発者のスキル, プラットフォームのスペック及び開発時期にも依りますが、おおむね以下のような仕様が主流でした。
- コンピュータがプレイヤの下家, 対門, 及び上家を代行する、四人麻雀である。
- ゲームを開始すると、ランダムに起家を決めて半荘を開始する。
-
ゲーム画面は、上から
-
局の状況及びドラ標識牌などのステータス表示領域,
- ドラは殆どの場合、標識牌そのものとなる
- 下家の打牌,
- 対門の打牌,
- 上家の打牌,
- プレイヤの打牌,
- 及びプレイヤの手牌
と六段の領域が平行して配置される。
- コンピュータの手牌を表示させる余白は設けられていない場合が多い。
- 表示能力の制限から、各家の打牌が入り切らない場合も少なくなく、入り切らなくなった場合についてはスクロールさせたり(と言っても、二枚目から一枚ずつ描き直すと言うものだったが)するなどして無理矢理後半部分が入るようにするようにしていた。
- 立直された場合、宣言牌にマークが表示されるものもあれば、宣言牌に印を付けず単にリーチの文字のみが表示されるものもあった。
-
-
プレイヤは相手の打牌でポンまたは吃が可能な場合は打牌されてから一定の時間内に所定の処置キー(通常スペースバー)を押下し、コマンドを入力したあと、喰いたい牌を二枚入力してポンまたは吃を行う。
- 勿論、ポンや吃が可能か否かを自動的に判定して静止する事はないし、ポンの場合であっても一枚ずつ手動で入力しなければならない。加えて、正しい組合せか否かの判定もしてくれない。
尚、喰った牌は手牌の右側に寄せられて理牌される。
- 手牌から切り離されるのではなく、手の一部に組み込まれているように表示される。尚、摸牌はそれらを含めた手牌の右端に置かれる。
- また、鳴いた牌にはナキと言う表示がされる。
- 槓は一切出来ない。
-
プレイヤは立直が可能な場合は、打牌の前に所定の処置キーを押下してから所定のコマンドを入力して、その上で打牌を指定する。その後、待ち牌を最大二枚指定する。
その後はその一局が終了するまで全自動で進行する。
- 待ち牌については、所定の書式で入力する事としている。
- 仮令三門以上の待ちであっても、三種以上の待ち牌を指定する事は出来ない。しかも、入力出来なかった待ち牌での和了は一切出来ない。
尚、門前でない場合や闇聴で和了する場合は、打牌或いは摸牌後に所定の処置キーを押下した後、所定のコマンドを入力する事で可能。この場合は、待ちの指定を事前に行う必要はないため、任意の待ち数で聴牌可能。
- コンピュータは常に門前で、闇聴または立直を掛けて和了する。また、コンピュータはポン, 吃及び槓は一切しない。
-
振聴については、殆どチェックされない。
- 後に、現物のみチェックするように改良されたものも現れた。その場合、コンピュータは現物は見逃し、プレイヤが現物で栄和したら錯和とした。
- 同巡内の見送りは、一切チェックされない。
- 不聴罰については、判定されない(聴牌判定機能が付いていないため)。
-
誰かが和了したら、和了点をプレイヤが入力して、精算する。
- 初期の作品には和了役の自動判定機能が付いていなかったため、点数計算も自分でやる必要があった。逆を言えば、自分の役なし和了を役満貫と言い張るなど、どんなインチキも可能だった。
- 後に、和了役の自動判定機能が追加された作品が現れてから、自動判定機能を持つ作品が主流となって行ったが、メモリの関係で役判定機能が実装出来ず、点数計算を手動としなければならないものもあった。
- 尚、どちらにしても和了役の自動判定機能は和了時にのみ実行出来るコードだったため、コンピュータが役なしで和了する場合も少なからずあった。
- 途中平局や幺九振切(流し満貫)は一切無し。
実際に再現したかったのですが、しらぎく麻雀とは全く異なった内容なので一から書かなければならず、ちょっと無理でした。
- PC-8001などのエミュレータを持っていて実行出来る方はやってみても良いでしょう。
参考までに、実際の例を二つだけ紹介します。
- 日電PC-8001用グラフィック麻雀
-
I/O 昭和55年10月号(工学社)に掲載された、高嶋晃さん制作の投稿作品です。
当時発売されていたアップルⅡ用の麻雀ソフトを手持ちのPC-8001で再現したかったと言うのが開発の動機だったそうです。
- 日電PC-6001用グラフィック麻雀
-
I/O 昭和57年 4月号(工学社)に掲載された、上記と同じ高嶋晃さん制作の投稿作品です。
PC-8001用と違い、メモリの拡張を想定しなかったため、自動役判定機能を実装せず、従って和了時の点数計算は手動となっております。
尚、色遣いが水色を主体としているのは、PC-6001のカラーグラフィックモードでは、「白, 水色, ピンク, オレンジ」「緑, 黄色, 青, 赤」のいずれかのみが選択可能だったため、前者を選択したのが理由のようです。
ちなみにこの作品は余り言及されませんが、初めて機械語を用いた作品でもあります。
- PC-6001にはデフォルトでグラフィックパターンの表示機能がなかったため、牌の表示機能に機械語を用いているのです。
初期のコンピュータ麻雀の役判定。
初期のコンピュータ麻雀では、和了役の自動判定機能がなく、和了した場合はプレイヤが自分で計算して結果を入力しなければなりませんでした。
その後、高嶋晃さんが自動役判定機能を付けた日電・PC-8001用グラフィック麻雀を開発してからは、自動役判定付きのものが増えて行きました。
- 但し、メモリが足りないPC-6001用や、元ネタがそれ以前の作品だったPC-8801用或いは富士通・マイクロエイト(FM-8)用の一部作品では、相変わらず点数計算を手動としておりました。
役判定の手順は以下の通りでした。
- 国士無双
- 七対子…同一牌四枚使いも認めておりました。尚、門子型より七対子を優先して判定していたため、両盃口は判定されませんでした。
- 門子型…刻子を優先する門子解析パターンのみのため、稀に生じる三連刻より高くなる一盃口が判定されない場合がありました。
ルールは、以下のようになっておりました。
- 立直一発・裏ドラあり
-
ドラは表も裏も標識牌現物となっておりました。
尚、槓は一切出来ないため、ドラは表も裏も常に一種のみとなります。
- 摸八平和なし, 七対子は30符計算
-
これは、高嶋さんが神戸市在住だった事もあってか、阪神式のルールを引用したのが理由と思われます。
- ちなみに関東式の摸八平和あり, 七対子25符計算に修正された作品はありませんでした。
- 喰い断幺・先付けあり
-
阪神地方で主流となっていた完全先付に出来なかったのは、
- コンピュータは一切副露しないため、喰い断はプレイヤの判断に任せば良い事
- 当時の技術では先付けの判定が困難だった事
が理由と思われます。
- 包則無し
-
制作者も実装して思いましたが、包則の判定は意外に面倒です。
況してや、プレイヤしかポン出来ないのですから、実装する意味も余り無かったのでしょう。
- 現物振聴, 形式不成立及び役無しは錯和
-
役判定機能に加えて錯和判定もある程度実装しておりました。
和了役は以下の通りでした。
- 一翻役
- 門前摸和, 立直(※1), 平和(※2), 一盃口(※3)(以上門前のみ), 断幺九, 翻牌(門風牌, 荘風牌, 及び三元牌), 海底摸月, 河底撈魚(※4)
- 両翻役
- 七対子(※5) (門前のみ), 一気通貫, 三色同順, 混全帯幺(以上喰い下がり), 対々和, 三暗刻, 三連刻, 三色同刻(※6), 混老頭, 小三元
- 三翻役
- 混一色, 純全帯幺(以上喰い下がり)
- 六翻役
- 小車輪(※7) (門前のみ), 清一色(喰い下がり)
- 役満貫
- 天和(※8), 大三元, 四喜和, 字一色, 清老頭, 緑一色(※9), 大車輪(※10), 九蓮宝燈(※11), 国士無双(※12), 四暗刻(※13)
- 1. 一発(一翻), 裏ドラあり。二重立直無し(開局一巡内の立直であっても普通の立直扱いだった)。
- 2. 摸八平和は無し(30符で計算)。
- 3. 七対子判定機能の実装上の問題に依り、両盃口は事実上無しだった。
- 4. 槓が出来ない仕様だったため、嶺上開花や搶槓和は定義さえ無かった。
- 5. 七対子は三十符で計算していた。
- 6. コードにバグがあって正常に判定されない場合があった。
- 7. 混一色七対子を小車輪としていた。尚、スートは一切問わなかった。
- 8. 天和はあったが、地和は無かった。
- 9. 緑一色は緑発が無くても成立する。
- 10. 清一色七対子を大車輪としていた。数位が不連続でも成立したし、スートも問われなかった。
- 11. 九蓮宝燈は和了時の形が準じていれば成立(純正の場合はダブル役満貫扱い)。スートも問わない。
- 12. 国士無双について、十三門待ちはダブル役満貫扱い。
- 13. 四暗刻について、単騎はダブル役満貫扱い。
よく見ると、何処かから不満の声が出そうな仕様ですが、役判定ルーティンを修正した作品は(投稿作品には)皆無でした。
- 例えば摸八平和をありにしたり、地和をありにするなどと言った事もされませんでした。
初期のコンピュータ麻雀の思考ルーティン。
実は、初期のコンピュータ麻雀には思考ルーティンさえありませんでした。
では、どうして四人打ちが出来たのかと言うと、
- 実は敵三人は初めから聴牌した手が与えられていて、
- 予め決められた枚数が摸牌されるまでは和了牌が出ても無視するようにしていた
のです。
具体的には、以下のようになっていたようです。
- 先ず、敵三人に対して、それぞれに七対子か門子型の聴牌した手を与える
- 残りの牌からランダムに十三枚を撰んでプレイヤの配牌とする
- さらに残りの牌をランダムに並べ替えたものを壁牌とする
敵三人に与える手については、詳細は覚えておりませんが、大体以下のような感じだったそうです。
- 六分の一の確率で七対子の手を与える
- 七対子としなかった場合は、やはり六分の一の確率で四門子単騎の手を与える
- 更にそれにも該当しなかった場合は、ランダムに順子と刻子の組み数を決めて、それに応じた門子を割り当て、更に聴牌型(両門, 嵌張, 辺張及び双ポン)を与えた
そして、一局内で摸牌された牌の枚数をカウントし、その値が予め決められた範囲になった場合に立直を掛けて和了したり、闇聴で和了したりします。
- 決められた範囲にない場合は、仮令和了牌を引いても摸切りします。
- また、聴牌型として定められた待ち牌以外は、仮令和了可能であっても和了牌と認識せずに摸切りまたは見逃します。
- 結果、振聴になってしまう事も頻繁にありました。
このような仕組みのため、コンピュータはポンや吃をする必要は一切なかったのです。
ちなみに、アーケードの脱衣麻雀の中にも、このように初めから聴牌させているものがあるとかないとかありました。
- 制作者が見た限りでは、一部のメーカのものがそれ
臭いと思いましたでした。