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

2025/02/04

ゲーム 開発

t f B! P L
eyecatch プログラミングの問題を考えていたら気がついたことが一つあります。 問題を作っている人が一番学習になっているんじゃないか? という気付きです。 問題を考えて、答えを確かめて、要点をまとめて解説するって、内容を熟知しないとできないですからね。 というわけで、シナリオセットのプログラミング問題の引き続きです。

謎解き10. 時間制限付き謎解き(非同期処理)

シナリオ

プレイヤーは限られた時間内に魔法陣を活性化させなければならない。

問題

3秒後に「魔法陣が活性化した!」と表示されるコードを書く。

ヒント

3秒後に処理を実行する方法を考えて。

答え

回答

console.log("魔法陣を準備中...") setTimeout(() => { console.log("魔法陣が活性化した!") }, 3000)

解説

setTimeout(実行する関数, ⚪︎秒後に実行※ms 1000=1秒で記載)

謎解き11. ダンジョンの迷路生成(アルゴリズムの実装)

シナリオ

次のエリアに進むために、ダンジョンの迷路を生成する必要がある。

問題

迷路を2D配列で表現し、特定のパターン(例: "壁"と"道")で生成するコードを書く。

条件

1. 迷路のサイズは、縦:5、横:5で生成すること。 2. 壁をつけた状態で、左上に「スタート」右下に「ゴール」を設置すること。 3. 道はとりあえず、ランダムに生成しても良い。

答え

回答

const rows = 5, cols = 5 const maze = Array.from({ length: rows }, () => Array(cols).fill("壁")) for (let i = 1; i < rows - 1; i++) { for (let j = 1; j < cols - 1; j++) { maze[i][j] = Math.random() > 0.3 ? "道" : "壁" } } maze[1][1] = "スタート" maze[rows - 2][cols - 2] = "ゴール" console.table(maze)

解説

- Array.from()は、色々なデータを配列にコンバートします。(または初期化) - Arrow(@1).fill(@2)は、@1配列の要素を、@2で埋める処理。 - 「スタート」

謎解き12. 魔法陣の探索

シナリオ

魔法陣が壊れており、「正しいエネルギーの流れ」を見つけて修復する必要がある。

問題

ランダムに生成された魔法陣を数値の小さい順に並べて、不足している数値を追加するコードを書く。

条件

- 魔法陣は次のようにランダムで生成されている。 const MagicNumbers = Array.from({length:10}).map(e => Math.floor(Math.random() * 10)) console.log(MagicNumbers) (例) [1, 6, 1, 3, 6, 7, 7, 2, 9, 2] - 重複している数値は1つにまとめる - [1,3]の様に、間が抜けている数値は2を追加して、[1,2,3]となるようにする。

答え

回答

const magicNumbers = Array.from({length:10}).map(e => Math.floor(Math.random() * 10)) const min = Math.min(...magicNumbers) const max = Math.max(...magicNumbers) const repaireNumbers = Array.from({length:max-min+1}).map((e,i,s) => {return i + min}) console.log(magicNumbers) console.log(repaireNumbers)

解説

- 配列内の数値の最小値と最大値を取得して、それを順列に並べるだけで良い。 - for文で順列値を作っても良いが、.map()を使うと簡単に構築できる。

あとがき

難易度がさらに上がったプログラミング問題いかがでしたか? 問題を読んで、それに適した答えを出せる様にプログラミングするって、 プログラミングの仕事をやるエンジニアが日頃から仕事でやっている事と同じ感じがします。 クライアントが提示した要望を、プログラミングを使って実現するという事ですね。 ゲームのシナリオに組み込むイメージもできて、このブログ企画、一石二鳥かも・・・と思っちゃいました。

人気の投稿

このブログを検索

ごあいさつ

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

ブログ アーカイブ