[ペチパーの大冒険] ゲーム制作#12「プログラミング謎解き問題 その1」

2025/02/01

ゲーム 開発

t f B! P L
eyecatch 人は誰もが謎解きが大好きです。(・・・な、ハズです) プログラミングを学習しようとする人は、謎解きが好きじゃないと、きっと学習途中で挫折してしまうでしょう。(強引すぎる・・・) プログラミングと謎解きは切っては切り離せないモノ。 まさにゲームとしてのプラットフォームにもってこいの題材なので、今回はプログラミングゲームとしての謎解き問題を考えてみました。

謎解き1. 暗号化されたメッセージの解読

シナリオ

古代の魔法書に暗号化されたメッセージが刻まれている。解読すれば次のエリアへの鍵が得られる。

問題

次のメッセージを意味がわかる単語に並べ替えるコードを書いて解読する。
NEKIROMOA

答え

回答

const message = "NEKIROMOA" const solve = message.split("").reverse().join("") console.log(solve)

解説

- "NEKIROMOA"をローマ字読みすると、「ネキロモア」 - 英字を逆にすると、"AOMORIKEN"になり、「青森県」と理解することができる。

謎解き2. トラップ解除プログラム

シナリオ

道を進んでいくと数字が書いてある道がある。 どうやら、「3の倍数と3の付く数字」を踏んでしまうと、トラップとして仕込まれている地雷が爆発してしまうようだ。 その地雷を避けて通る為に、どの数字を通って道を進めばいいかわかるプログラムコードを作成しなければならない。

問題

数字は、1から100まで書かれている。 3の倍数と、3の付く数字を除外した数値の配列を作成する。

答え

回答

const numbers = [] for(let i=1; i<=100; i++){ if(i%3 !== 0 && String(i).indexOf("3") === -1){ numbers.push(i) } } console.log(numbers)

解説

- numbersは、3の倍数または3という文字がつく数値ではない値を格納する器として用意する。 - for文で、1から100までループさせる。 - i%3、で余剰を求めて、0が返るものは3の倍数のためそれ以外の条件とする。 - String(i).indexOf("3") は、数値を文字列にして、その中に3が含まれているとそのポジションを返し、含まれていないと-1を返す処理 - 上記条件で、3の倍数と3のつく数値以外を、numbers配列に追加する。

謎解き3. 魔法の扉のパスワードを生成

シナリオ

魔法の扉が「特定の条件を満たす文字列」をパスワードとして要求する。

問題

プレイヤーは、文字列を条件に合う形に変換する必要がある。
文字列 : wizard 条件  : 1. 英字は大文字にする。 2. 犯罪が起きた時に電話する番号の数値がパスワードの後ろに付く。

答え

回答

const string = "wizard" const number = "110" const password = string.toUpperCase() + number console.log(password) // "WIZARD110"

解説

- 文字列を大文字にする処理、string.toUpperCase() - 犯罪が起きた時に電話する番号は、"110" - これらを組み合わせてパスワードを作成する。

あとがき

実際にシナリオを交えて謎解き問題を考えると、なかなか臨場感が出ていいですね。 目的が明確になって、プログラミングするのが少しだけ楽しく感じるかもしれないな〜と思って考えてみました。 単純な問題なので、初心者向きかな〜と思います。 Javascriptなので、自分でブラウザを使って答え合わせをしながらできるのも悪くないですね。 実際にページ内でコードが書ける仕組みを作って、答え合わせが自動でできるようになると、採点システムなどと組み合わせてゲームっぽくできるかも・・・と考えてしまいました。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ