※ この記事は、ゲーム進行が(任天堂の意図しない形で)不正に有利になる遊び方を推奨するものではありません。 また、本記事の内容を実践したことによって生じたいかなる損害も保証しかねます。
ペーパーマリオ オリガミキングが面白そうな件
今年の夏休みはコロナ禍で帰省もできなくて暇だなぁ……。
こんなときはゲームで遊ぼう。
ペーパーマリオが面白いらしいよ。
え、、
もしかして、買ったの?
いや、人が遊んでいるのを見ているだけなんだけど、バトルがパズルなんだよねこれ。
どういうルールなの?
敵をスライドさせて、どちらかのパターンを作る。
❶ 敵4体の塊を1列に整列させる
❷ ステージの内周に2行2列に整列させる
ふむ。
きちんと揃えないと、マリオの攻撃が届かないんだよ。
子供向けのゲームだろうし、じっくり考えればいけそうだね。
ところが、時間制限と回数制限があって、熟考もできなければ試行錯誤もできない。
ロジカルな思考力だけじゃなく、ひらめきも大事。
これを30秒以内に閃いて解けといわれたら、解けない自信がある。
— たーせる (@tercel_s) August 8, 2020
時間制限があると、「既に出来上がっているものを壊したくない心理」が勝ってしまうのだ。
納期ギリギリで、品質はクソだけどせっかくここまでプログラムができてるからなんとか既存部を生かそうとして、結局死ぬパターンに似ている。
なにこれむずいじゃん。
むずかしいよ。
ザコ戦のバトルが毎回コレなので、なんとかコンピュータにパズルを解かせることはできないかなと思って、ちょっと考えてみたんだ。
ペーパーマリオ オリガミキング ザコ戦パズル解法アルゴリズム(草案)
なにこれ……やば。
こういう探索アルゴリズムってどうやって実装するの?
for ループだとネストがどんどん深くなりそう。
再帰処理かー……。
あれって鬼門だよね。 苦手な学生も多かったし……。
機会があれば、実装例も載せて再帰処理の勘所を紹介したいのだけど、あいにく身に付けたところで使いどころが限られているからね、、、
再帰的データ構造と Composite パターン
再帰処理と相性のよいデータ構造には、木やグラフといったデータ構造があるよ。
あるね。
配列やリストは、データ同士の繋がりも分かりやすいし、多くのプログラム言語がサポートしているけど、木構造のデータってどう表現するの?
それについては昔、すごい雑な記事を書いた気がする……。
構文として木構造をサポートしている言語は無いの?
Lisp とかはサポートしてた気がする……。
そういえば、Common Lisp では、実行時のパフォーマンスを上げるために、再帰呼び出しが関数の末尾にくるように最適化したりするけど、まぁその話は今関係ないからいいや。
もっとメジャーな言語でお願いします。
なるほど。
というか、マリオの話をしていたはずなのにどうしてここまで脱線したのか。
いつもの事だね。
おまけ
ペーパーマリオ、ストーリーが素晴らしくて、ラストでうるっときました。
危うく泣くところでした。