brown water

ゲームやアニメの感想とかプログラムとか

迷路の作成

迷路作成のアルゴリズムを勉強してみました。

ドルアーガの塔の迷路

きっかけですが、ニンテンドースイッチナムコミュージアムに入っているドルアーガの塔を最近遊びました。 懐かしのゲームですが、ヒントもすぐに見られたし何とかクリア出来ました。

f:id:chaz4:20171120220536j:plain

このゲームの迷路作成に関する記事が興味深かったので作って試してみようと思ったのでした。

各柱から ランダムで壁を伸ばします。

f:id:chaz4:20171120221646p:plain

2ビットの乱数 (0~3)を取得し

00: 上に伸びる壁
01: 下に伸びる壁
10: 右に伸びる壁
11: 左に伸びる壁

伸ばした先の柱が、「外壁」 or 「既に壁がある柱」 だった場合
新たに「壁のない柱」から スタート
そうでなければ、伸ばした先の柱 で 同じ処理を行う

f:id:chaz4:20171120221651p:plainf:id:chaz4:20171120221655p:plain

これを繰り返し、全ての柱に 壁があるなら迷路完成

---省略---

ドルアーガの塔では、
線形帰還シフトレジスタ で得た 乱数の1ビットと
前回得た乱数 1ビット
を使って 2ビットを生成しています。

前回、生まれた乱数が 1だった場合
次の壁は
10: 右に伸びる壁
11: 左に伸びる壁

右に伸びる壁(10) の後は、
必ず 上に伸びる壁(00)か、下に伸びる壁(01) になります。

引用:ドルアーガの塔 乱数の工夫の正体

迷路作成のアルゴリズムは色々あるようですが、この方法が簡単そうで面白そうだったので作ってみることにしました。

JavaScriptで作成

f:id:chaz4:20171120220522p:plain

準備段階のイメージ(生成用柱が3×2本の場合) 青が柱で、1ブロックごとに間をあけて配置されています。この柱から壁を伸ばしていく。 茶色は外壁。

生成用柱のみの配列を用意、これには柱を伸ばしたかどうかを記録していく。上記の場合だと3×2の配列
他にステージ情報用の配列を用意、壁の位置を記録していく。上記の場合だと9×7の配列。外壁は先に壁情報で埋めておく。

そして迷路生成作業。
ドルアーガの塔での作成方法をそのままプログラムに記述していく。
今回は生成用柱の領域は8×6で作成しました。

f:id:chaz4:20171120220540p:plain

配列「stage」にステージ情報が書き込まれ、最後にその情報を元にCanvasに描画しています。
リロードする度に新しい迷路が作成されます。
何度か試してみましたが、袋小路(進めない箇所)は作成されなかったので、上手くいったのではないかと思います。

壁を細くする

描画の部分を下記に変更。 壁が細くなり、雰囲気が実際のゲーム画面に近づきます。

f:id:chaz4:20171120220546p:plain

実際のゲームでは乱数のseedというものを使い、各フロアの配置は毎回同じ迷路になります。
フロアごとのデータを持たなくても、これを使って生成するので余計なメモリを使わなくて済むというわけです。当時は特にメモリ等の制限が厳しかったと思うし。
ちなみに、JavaScriptには標準では乱数のseedというものは無いようです。

今回使用した迷路生成アルゴリズムは30年前に使われたものですが、今でも使えるし、すぐに試してみたくなるようなシンプルさが素晴らしいです。


マリオブラザーズ

アーケードアーカイブスマリオブラザーズを買いました。

昔アーケード版で出ていたゲームで、私は駄菓子屋に置いてあったのをプレイした記憶があります。一緒にドンキーコングも置いてあったと思います。 もう30年前とかですね...。

すぐ後にファミコン版が出て、友達の家でそっちの方をよくやっていたので、アーケード版との違いはよく憶えていませんでした。

動画を見るようになってからアーケード版マリオはグラフィック等が少し違うのが判明。 キャラの絵は大きめで発色もキレイな感じ。敵のアニメーションも細かい。

何度も移植されたマリオブラザーズですが、いつもファミコン版の移植ばかり。 アーケード版の完全移植が可能になったのに何故出ないのかと思っていました。 そしてついに出ましたね。

敵を下から突いてひっくり返し、キックで倒すというシンプルながら面白いゲームです。 ファミコン版はバーチャルコンソールのをたまに遊んでいますが、それに比べて序盤から難しめ。 ファイアボールがバンバン飛んでくるし、ハエをひっくり返すタイミングも難しくて。

アーケードアーカイブスのシリーズということで、いつもと同じ使いづらいインターフェースが導入されているのは難点ですね。

途中セーブやキャラバンモードもあるし、ハイスコア目指すのも楽しいし、たまにちょっと遊ぶのに良いゲームですね。

ナナマルサンバツのアニメを観ました

クイズで競う高校生を描いた夏アニメ、ナナマルサンバツを観終わった感想。

f:id:chaz4:20171121213036j:plain

原作のマンガを読んでいて面白かったのでアニメにも期待していました。 マンガの方はキャラが可愛い感じがする絵のタッチが好みだし、競技クイズという題材も珍しく、結構熱い展開もあっていいですね。 10巻くらいまで買ってたんですが、全国大会のところからダルくなってきてしばらく読んでいませんでした(汗) 今は14巻まで出てるようです。 アニメが始まるということでマンガをまた最初から読み直していたんですが、やはり面白いですね。

アニメ版ですが、色々言われている通り、やはりメインヒロインの深見さんの声がアレですね・・・。 滑舌が悪いのもありますが、声の感じもキャラに合ってないと思いました。 まぁ、数話観てたら慣れてきたので何とかなったんですが。

内容の方はほぼ原作通りで面白いです。 音が付いてクイズ番組風の演出も入ると雰囲気があっていいですね。 ちょっとした雑学の知識も身につけられたり。

例会は特に熱い試合だしトラブルメーカーが煩わしいしで盛り上がりますが、原作から大分カットされていたのが残念。無理やり1クールに収めた感じです。 敗者復活戦とか面白いのに。

越山くんの今後も楽しみだし、2期があったらまた観たいです。


ブロッくる

ニンテンドースイッチのDLソフトブロッくるを買ってプレイしてみました。

女の子のイラストに釣られて買ってしまいました(笑) Android版もあるようです。

内容はパズルゲームで、画面を90度単位で回転させながらゴールを目指したり必要なアイテムを集めたりしていくゲームです。

全8ワールドで、各ワールドは10ステージ。 ワールドごとに新しいルールが追加されたりして、その都度解説が入ります。 ワールドの最初の方はチュートリアルのようなもので簡単ですが、段々難しくなっていきます。

回転した時のことを考えながら進めていくわけですが、これが面白いです。 自分も含めて回転したら落ちる物、落ちない物。岩が落ちてきたら潰されるし、自分が落ちた先に棘があったらミスだし。 間違ったと思ってもすぐ前に戻れるので安心。 単にゴールするだけなら簡単でも、条件付きクリアは少し難しい。何回転以内とか、何歩以内とか、宝石を取ってゴールしなければならない等々。

このゲームはストーリーがあり、ステージを進めていくと会話シーンになってストーリーも進んでいきます。アリカの秘密が徐々に判明していき、この世界の謎も分かってくるというもので、以外に面白かったです。

最後のステージで大分苦戦しましたが何とかクリア。今後は条件付きクリアをぼちぼちやっていこうかなと思っていました。 そしてこの前久しぶりに起ち上げたらハードモード解禁の文字が! まだまだ終わらなそうです。

Callmeのミニライブを観に行ってきました

タワーレコード横浜ビブレ店で行われたCallmeのニューシングルリリースイベントのミニライブを観に行ってきました。

当日は雨が降っていて、早めに横浜に着いたもののどうするかということで、開始までビブレの中で過ごすことに。 2階にあるスターバックスで休憩。エアコン効きすぎて寒かったです。

時間近くなってから地下にあるタワーレコードに行って店内をウロウロしてたのですが、久しぶりにCDがたくさん並んでいるのを見た気がします。 CDも買わなくなったなぁ。たまにツタヤで借りるけど、音楽はほとんどはSpotifyAmazonミュージックで聴いてしまう。

ミニライブですが、50人近く集まっていたと思います。 Callmeの3人が入場する時は、自分の目の前を通っていったので、間近で見ることが出来て感激しました!

ライブでは今回のシングルをメインに5曲ほど披露。歌とダンスを生で見るのはやっぱりいいですね。

今回のシングルはすぐにSpotifyにあったのですが、6曲あったので全部入ってるのかと思ったが、カップリング曲が別々に入っているシングルを数バージョン発売しているということ。

Callmeの曲はたまに聴くくらいで、メンバーの名前とかよく覚えてなかったのですが、今回ステージ上で左から順番にコウミ、ルウナ、ミモリと紹介していて、3人の名前を繋げたらコウルミ・・・コールミーなんだなと思った。 これで今後は名前が覚えやすくなります。