『上海』の難易度を作る方法

もう30年近く前になるが、確か『天外Ⅱ』を作っていたときだったと思う。
ある日、アルファシステムの山本さんが、僕に言いだした。

「岩崎さん、『上海』ってゲームあるじゃないですか」

今では、上海を今では知らない人がいると思うので簡単に説明すると麻雀牌を使った絵合わせパズルだ。
下の画像のように麻雀牌を積む。

ごく普通の上海の画面
  • 2枚一組、同じ絵柄の牌を取れる。
  • 最後まで牌を取り切ることが目標。
  • 上に牌が載っておらず、左右のどちらかが空いている牌は取れる。
  • 取れる牌がなくなったらゲームオーバー

と、こんなゲームだ。
当時の大ヒットパズルゲームで、まあ当時のゲームを遊んでいるユーザーなら誰でも知っているレベルだったと思う。ついでに書くとアーケードゲームにまでなってたりする。
山本さんは続けた。

「実はPCエンジン版の『上海』の移植をウチでやったんですけれど、あれ、確実にクリアできるようになっているんですけど、難易度設定ってどうやっていると思います?
「確実にクリアできるのはわかるけど、難易度…?」

ここでちょっと注意すると、PCエンジンでは上海は3本出ている。
最初の『上海』(カード版)、90年にハドソンから出た『上海Ⅱ』、そして92年にアスク講談社から出た『上海Ⅲ』の3本だ。
そして、多分、アルファが移植したのは『上海Ⅱ』。
なぜなら最初の『上海』はハドソン社内のはずで、アスクから出た『上海Ⅲ』は92年末。
92年にはアルファに遊びに行った記憶はないので(『リンダ』も『エメドラ』もまだ)、その可能性がないからだ。
ついでに書いておくと『上海Ⅱ』は、牌の積み方が複数あるゲーム。

確実にクリアできる方法は簡単で、電光で思いついた。

  1. 空のフィールドを用意する。
  2. 2個ずつ、牌を置ける場所に置いていく。
  3. フィールド全部を埋めたら完成。

こうすれば100%解ける面を作ることが出来る。
だから簡単だったのだけど、難易度を思いつかなかった。

「積むのは思いついたけど、難易度がわからない。どうやってるの?」
岩崎さんが考えた方法は難しい方なんですよ。で簡単に解ける方が…」

山本さんはニヤリと笑うとアルゴリズムを説明した。

  1. フィールドを特別な「空白牌」で埋める。
  2. 空白牌のうち、動かせるもの2枚を牌にして、除去する。
  3. 上をフィールドが空になるまで繰り返す。

「なるほどっ!」

僕はあまりに頭が良くてしかも簡単なアルゴリズムなので、感心して叫んでいた。
なぜ2つ目の方法が簡単になるのか?
2つ目の方法だと見えている2枚の動かせる牌が正解である率が高い。だから簡単だ。
1つ目の方法は、見えている牌と組になる牌が、かなり深く掘らないと出てこない可能性があり得るけれど、2つ目の方法なら見えている牌はまず間違いなく正解だ。
だから、素直にとって行けばクリアできる確率が高い=簡単だ。まあ、さらに簡単にするためにいくつか仕掛けを入れることが出来るけれど、ともかく平均的に簡単になるのは間違いない。
山本さんは続けた。

「移植するとき、ソースを読んでなるほどっ! となりました。頭がいい人がいるもんですね」

誰が思いついいたのか知らないが、本当に感心するアルゴリズムだと思ったのである。
これが約25年語られたことがなかったであろう、上海の難易度の話である。

LinkedIn にシェア
Pocket