Scratch(迷路ゲーム:暗闇モード版)

暗闇マスク迷路プログラム

さて前回はシンプルな迷路ゲームを作りましたが、ゲーム性を高めるために今回は行き先がタイルで隠されているという暗闇モードを追加してみたいと思います。

このゲームを作るにはあらかじめシンプル版の迷路ゲームの作り方をマスターしておく必要があるため、ここから読み始めた人はまず下の記事から参照してください。

Scratch(迷路ゲーム:シンプル版)
Scrathのサンプルプログラムを何個か作ってUPしてきましたが、今回はとてもシンプルな難易度が低いものを作ってみたいと思います。 Scratch(迷路ゲーム:シンプル版) ということで迷路ゲームです。スプライトは1つだけといったとても...

 

Scratch(迷路ゲーム:暗闇モード版)

こちらが暗闇モードを追加した迷路ゲームの完成版となります。

中身はこちらから

https://scratch.mit.edu/projects/351760083

 

ゲームのやり方

スタートボタンを押すと、迷路上に濃い青色のタイルが敷き詰められて行先が見えないようになります(暗闇モード)、ペンギン君が迷路を進み青色のタイルに触れると触れたタイル分だけクリアになり行先が現れます。つまり、パッと見てこういけばゴールにたどり着けるよねという単純なものから、近づいてみるまで行先がわからないという形になりゲームが難しくなっています。こうやって左上のSTART地点からGOALを目指して進みます。

 

プログラムの説明

基本的な考え

さて今回の暗闇モード追加のプログラムの基本的な考えですが、ちょっと前回のシンプル版よりも一気に考え方が難しくなります。というのも、反復処理(ループ)を二回まわすからです。このことを一般的になんというかわからないのですがループの入れ子や、重複ループ、二重ループといったところでしょうか

今回は約縦横300pxのタイルを横に4枚、縦に3枚(合計4x3で12枚)並べるという処理を最初におこないますが、これをタイルの位置を毎回手作業で指定しながら、12回タイルを設置するプログラムを書く・・・というものありなのですが馬鹿らしいですよね。そのため、ここで横に並べる反復処理と縦に並べる(移動する)反復処理を組み合わせて1つのプログラムで一気に解決させます。

 

基本的な概念はこちらです。横に4枚、縦に3枚で敷き詰められるタイルがあった時、それぞれのタイルは次のように表現されます。

XYテーブル(その1)

次に横方向(X方向)を変数s、縦方向(Y方向)を変数tそのとすると。上記のタイルは次のように表現されます。

XYテーブル(その2)

これにより、sとtの値を1から1つずつずらすことで全てのタイルの場所を指定することができます。ただし、これはあくまでもどのタイルを示すだけなので、今回は1つ300pxのタイルを隙間なく敷き詰めるための正確な座標を指定してしてやる必要があります。微妙に位置合わせを試した結果、きれいに敷き詰めるX,Y座標を定めるには以下の計算を行ってやる必要があります。

XYテーブル(その3)

この計算式を使うと12のタイルの座標は以下のように計算されます。

XYテーブル(その6)

この座標の位置に合わせて自動でタイルを敷き詰めるのが、今回の処理になります。そして、その処理を行う処理フローがこちらになります。なお、本来はフローチャートを書くのですが、今回は少しイメージ重視で記載してみました。

XYテーブル(その5)

この絵をみてわかるとおり、まず1行目の処理としてt=1のまま、sを1から4まで1列ずつずらしていき、それが終わると2行目、つまりt=2としてsを同じように1から4まで1列ずつずらします、そして3列目の最後まで終わると条件を全て満たすので処理が終わります。この処理を絵の右側の処理の流れで実現しています。実際にメインの処理をしているのは絵でいうところの赤で囲まれた部分の処理(座標計算&タイル設置)だけで、それ以外の部分は反復処理を回すためだけの処理となっています。

さて、ここまでがプログラムの基本的な説明です。この概念を元にスプライトの説明に入ります。

各スプライトの詳細

ペンギン君

ペンギン君

ペンギン君の処理は前回の迷路ゲーム(シンプル版)から変更するところはありません。

暗闇タイル

暗闇タイル

今回のプログラムで加える処理はこの暗闇タイルの部分だけです。スプライトの中身の処理は以下になります。

 

scratch-maskedmaze-暗闇タイルスプライト

こちらの処理については先に示した通りの処理フローをそのままスプライトの処理に組み込んだものです。このスプライトの処理では、まずタイルの置く位置を決めてやってからクローン、つまりタイルを作成しています。クローンされたタイルについては、ペンギン君が触れたら消すという処理を全てに与えます。そのため、一番左上の位置に存在するタイルについては、最初からペンギン君に触れることになるので、その部分だけ抜けてタイルが生成されているように見えますが、実際はタイルができてからペンギン君に触れて消えているというのが正しいです。

 

さらに難しくしてみよう

さてここまでで、一旦、プログラムは出来上がり、暗闇モード版迷路は完成なのですが、意地悪な僕はもう少し難しくしてみたいと思いました。それは、ペンギン君がせっかく開けたタイルが時間が経過するとまた閉じてしまうという処理です。それは次のようにクローンした後の処理部分を変更してやることで実現できます。

scratch-maskedmaze-暗闇タイルスプライト難

その結果、出来上がったのがこちら。どうです、さらに難しくなっているでしょ!?

中身はこちらから

https://scratch.mit.edu/projects/353186599

まとめ

今回はこのような形でシンプルな迷路にタイルを敷き詰めて行先がみえなくなるという処理を施しました。記述するコードの長さはそんなに長くないけれども、そのロジックを理解するには結構、頭を使いますよね。慣れていないとほんと反復処理というものは理解に苦しむところです。

本来であればプログラムは、これらのループで使うsやtなどのカウンタと呼ばれる変数は0から始めることが慣例ですが、ここは子供向けのScratchということで1から始めて理解をしやすくしました。(といってもScratchが対象とする小学生には既に難しい概念に入ってしまっていますが)

さて次回は、再びシンプル版迷路に戻り、ここに敵を登場させることで迷路の難易度を上げる方向でサンプルプログラムを作ってみたいと思います。

コメント

タイトルとURLをコピーしました