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

2025/02/02

ゲーム 開発

t f B! P L
eyecatch プログラミングを使った謎解き問題をもっと考えてみました。 今回は少しプログラムレベルを上げてみました。

謎解き4. モンスターの行動を予測するAIプログラム

シナリオ

敵のモンスターが特定のパターンで攻撃してくる。 行動パターンを解析し、次の攻撃を予測する必要がある。

問題

プレイヤーは攻撃パターンの配列に対応する攻撃は、次の通りです。 敵の攻撃がランダムに来た時に、それに該当する攻撃を決定するプログラムを作る。
プレイヤー攻撃パターン 1. hit(素手) 2. sward(剣) 3. magic(魔法) 4. defence(防御)
敵攻撃パターン : 1. threat(威嚇) 2. hit(殴る) 3. bite(噛みつき) 4. flame(火炎)
※敵モンスターの攻撃は、"monster_attack"という変数に格納されてくる。その場合に、プレイヤーの攻撃を決定するプログラムを作成せよ。

答え

回答

function get_next_attach(monster_attack){ const monster_attacks = ["threat", "hit", "bite", "flame"] const player_attacks = ["hit", "sward", "magic", "defence"] const monster_attack_index = monster_attacks.findIndex(e => e === monster_attack) if(monster_attack_index === null){ return "no-data" } else{ return player_attacks[monster_attack_index] } } console.log(get_next_attach("bite")) // "magic"

解説

- monster_attacks.findIndex(...)は、敵のモンスターの攻撃が配列の何番に格納されているかを取得する処理 - 取得した敵モンスターの攻撃番号を、プレイヤー攻撃の配列に当てはめるだけで、次の攻撃が取得できる。

謎解き5. 宝箱のロック解除(並べ替え)

シナリオ

宝箱がランダムな数列の暗証番号でロックされている。並べ替えることで開けられる。

問題

数字を昇順に並べ替えるコードを書く。 ランダムに書かれている数値 : [5, 2, 9, 1, 7]

答え

回答

let lockCode = [5, 2, 9, 1, 7] let sortedCode = lockCode.sort((a, b) => a - b) console.log(sortedCode) // [1, 2, 5, 7, 9]

解説

- javascriptのsort()関数は、条件関数を書くことができる。 - a-bは、前後数値を比較して、マイナスを返すと並びを逆にする処理が行われる。(プラスを返すと並び順の変更は無し) - sort()関数は、if文などを使った複雑な条件を書く事もできる。

謎解き6. マップの探索ログを最適化

シナリオ

冒険中に移動した地点が記録されているが、重複している部分があり効率的にまとめる必要がある。

問題

重複する地点を削除して記録を最適化する。
行った場所: - forest(森) - cave(洞窟) - castle(お城)
記録データ: "forest" > "cave" > "forest" > "castle"

答え

回答

let visitedPlaces = ["forest", "cave", "forest", "castle"] let uniquePlaces = [...new Set(visitedPlaces)] console.log(uniquePlaces); // ["forest", "cave", "castle"]

解説

- 配列に対して、"new Set(配列)"を実行すると、同じ値を削除してくれる重複削除が行える。 - "... + 配列"という記述は、スプレッド構文と言われ、配列を展開する処理で、配列同士を繋げる時などに使えます。 - [...new Set(visitedPlaces)]は、Array.from(new Set(visitedPlaces))と書いても同じ結果が得られる。

あとがき

難しかった? 知らない関数などが出てきたり、 見た事もない記述を見た時に、人は誰でも難しくて自分ではプログラムできないと考えてしまいます。 でも、プログラミングは意味を理解して書き方が分かると、まるでこれまで難しく感じていたプログラムが、スラスラ書けるようになります。 そう、知らないプログラムコードを見た時に、それこそが謎解きの始まりなんですね。 優秀なプログラマーの人ほど、知らないコードを見た時に、ワクワク感が湧いてくるという話をよく聞きます。 知らないことを恐れるのは初心者の時だけのようです。 未知の恐怖は、将来の学習よくにつながるという事です。

人気の投稿

このブログを検索

ごあいさつ

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

ブログ アーカイブ