わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Solitary Mahjong〜後戻りOK!

Solitary Mahjong〜基本機能 - わさっきの続きです.
「ひとり麻雀」が成功した最大の要素は,後戻りbacktrackingを認めていることにありました.図で説明しましょう.(麻雀がさっぱり分からないという学生のみなさんへ: 下に行くほど「整然」としているなあと考えてください.麻雀用語を使えば,「四面子一雀頭(よんめんつ・いちじゃんとー)」を作れば「アガり」となり,これを目指しているのです.)

15順目,六萬を引いてきました.7索を切れば聴牌*1なのですが,2箇所あります.左の7索を切れば,残り3順どうがんばってもアガることはできませんでした.
15順目に戻って*2,右の7索に切り替えました,カンチャンの7筒待ちです.なのですが,すぐ次の順に,8筒を持ってきました.ツモ切りでタンヤオ・イーペーコーを狙うか,6筒を切って,5筒・8筒・3索に待ちを切り替えるか….
このケースについては,(左側の)6筒を切ることで,18順目すなわち最後のツモのときにアガり牌を引き当てることができました.
「後戻り」というのは,流局に至ったり,あるいはそこまで行かなくても途中の時点で,ブラウザの戻る機能を使って,過去すなわち小さい順目に戻ることができるというものです.
そして,切る牌を変えれば,次のツモ,そしてその後の展開も変わり得るわけです.
ところで,行きつ戻りつを繰り返して,やっぱり最初の選択が最善だとなったときに,最初の選択で「やり直す」ことができなかったら…ツモが変わってしまっていたら…嬉しくありません.これだと,いい牌が来るまで延々待つだけになってしまいます.
「ひとり麻雀」は設計時に,この問題への対策を立てていました.ツモは,単にランダムに決められているものではなく,「乱数の種」と「捨牌の位置の系列」から一つに決まる*3ようになっています.これにより,いわゆるリドゥができるのを保証しています.そして,「捨牌の位置」が一つでも違えば…例えば上の15順目で,「左の7索」「右の7索」と書いているように…その後の展開が違ってくるわけです.
下世話な言い方をすると,この後戻り機能は,「あのときあっちを切っていたら,どうなってたんだろ?」というプレイヤーの願望を満たすものとなりました.別の言い方にすれば,通常は不確定ゲームに位置づけられる麻雀ですが,「ひとり麻雀」は,確定ゲームなのです*4

*1:あと一つでアガりの状態のことです.「てんぱい」と読みます.それにしても,「てんぱい」で一発変換できたのには驚きです.「はいぱい」は「配牌」になってくれないのですが….

*2:さらっと書いていますが,これができるのは,私の作った「ひとり麻雀」くらいです.テレビゲームや対人の麻雀では絶対にできないのでご注意ください.

*3:CGIプログラム内部の,ツモ生成ルーチンにも依存します.乱数の種は16ビット,すなわち65536種類だったので,数百局のプレイで,種の衝突は起こり得ます.10日ごとくらいで,このツモ生成ルーチンすなわち「牌のかき混ぜ方」を変えていました.ルーチンは,バージョン番号をつけて管理し,CGIの隠し属性として受け渡しをしていました.

*4:ゲーム理論と麻雀の関係については,Wikipediaの「二人零和有限確定完全情報ゲーム」を参考にしました.囲碁・将棋と同様に,ひとり麻雀も「配牌」から考えることで,確定ゲームに位置づけられます.