RPG には欠かせないマップの作り方について解説します。マップの「画像」の作り方は、下記の記事で解説しています。本格的なマップを作りたい人は参考にしてみてください。
今日のポイント
・よく似たプログラムがあったとき、プログラムの中に法則(ルール)が隠れていないか調べてみよう
目次
【はじめに】完成した作品を見る
プレイヤーがマップを上下左右に移動したとき、移動先のマップが表示されるように作ります。
表の世界(3 × 3 のマップ)
裏の世界(2 × 2 のマップ)
【考え方】作品の全体像を理解する
主なスプライト
① スプライト「プレイヤー」のコスチューム
②~⑤ スプライト「マップの★の端」のコスチューム
プレイヤーがマップの端まで来たことを調べられるようにするため、スクラッチの画面の上・下・左・右にスプライトを用意します。端まで来たかどうかを調べるには座標や色を使ってもいいのですが、スプライトの当たり判定を利用する方法が簡単で確実です。
⑥ スプライト「表の世界」のコスチューム
「表の世界」は 3 × 3 のマップです。下記のように、1 ~ 9 まで順番にマップの画像を並べます。
⑦ スプライト「トンネル」のコスチューム
「表の世界」と「裏の世界」をつなぐトンネルです。
スプライト間のイベント
スプライトのイベントや、イベント間のメッセージの関係を示した図です。「メッセージ」を出す側と、「メッセージ」を受け取る側をよく確認しておきましょう。
【プログラミング】してみよう
完成した作品はこちらにあります。難しいところは真似してみてください。
変数を作成する
No | 変数名 | 変数の種類 | 使い方 | どんな値が入る? |
---|---|---|---|---|
1 | 【定数】プレイヤーのX座標の下限 | 変数 全てのスプライト用 | マップを右に移動した際の、プレイヤーのX座標 | 定数 (X座標) |
2 | 【定数】プレイヤーのX座標の上限 | 変数 全てのスプライト用 | マップを左に移動した際の、プレイヤーのX座標 | 定数 (X座標) |
3 | 【定数】プレイヤーのY座標の下限 | 変数 全てのスプライト用 | マップを上に移動した際の、プレイヤーのY座標 | 定数 (Y座標) |
4 | 【定数】プレイヤーのY座標の上限 | 変数 全てのスプライト用 | マップを下に移動した際の、プレイヤーのY座標 | 定数 (Y座標) |
5 | 【定数】プレイヤーの歩く早さ | 変数 全てのスプライト用 | プレイヤーが何歩ずつ進むか | 定数 (例:10) |
6 | 1辺のマップ数 | 変数 全てのスプライト用 | 変数名の通り | 数字 (2×2のマップの場合は「2」、3×3のマップの場合は「3」) |
7 | 今いるマップ名 | 変数 全てのスプライト用 | 変数名の通り | 文字 (「表の世界」 or 「裏の世界」) |
すべてのプログラム
① スプライト「プレイヤー」のプログラム
②~⑤ スプライト「マップの★の端」のプログラム
幽霊の効果は、見た目を透明にするために利用します。当たり判定は有効です。
似たようなブロックで「隠す」がありますが、こちらは当たり判定が無効になるので今回は使いません。
⑥ スプライト「表の世界」のプログラム
「表の世界」は 3 × 3 のマップです。変数「1辺のマップ数」を「3」にしましょう。
下記の「次のマップに移動」というブロック定義は難しいと思います。私も試行錯誤しました。詳しく知りたい人は、この記事の下の方にある「ワンポイントアドバイス」を参考にしてみてくださいね。
⑦ スプライト「トンネル」のプログラム
下記は、トンネルをどこに表示するか決めるプログラムです。赤枠内の数字を変えて、皆さんの好きな位置で表示してみてください。
ワンポイントアドバイス
ブロック定義「次のマップに移動」は最初からプログラミングできたわけではありません。当初は、2 × 2 のマップのとき、3 × 3 のマップのとき、でそれぞれプログラムを作成していました。2 つ作成してみて初めて、プログラムがとても似ていることに気づいたのです。
プログラムを比較する
下記が、2 × 2 のマップのときと、3 × 3 のマップのときのプログラムです。プログラムが似ているということは1つにまとめられるかもしれないということです。ここでは、右のマップに移動するプログラム(赤枠部分)について考えたいと思います。
法則(ルール)を探す
プログラムを一つにまとめるためには、法則(ルール)を探さなくてはいけません。恐らく誰もが、右のマップに移動するとき、コスチュームの番号を「1」増やすというルールに気づくと思います。
次に、プレイヤーが右端にいる状態から右に移動すると、2 × 2 のマップではコスチュームの番号を「-1」に、3 × 3 のマップではコスチュームの番号を「-2」にするというルールがあることにも気づくでしょう。
2 × 2 のマップ
3 × 3 のマップ
これらのルールを整理すると、下表のようになります。
2 × 2 のマップ | 3 × 3 のマップ | |
---|---|---|
基本的なルール | 右に移動するときは、コスチュームの番号を「+1」する | 右に移動するときは、コスチュームの番号を「+1」する |
特殊なルール | 右端のマップ(2、4)から右に移動するときは、コスチュームの番号を「-1」する | 右端のマップ(3、6、9)から右に移動するときは、コスチュームの番号を「-2」する |
法則(ルール)をプログラムで表現する
先ほどのルールをプログラムで表現したものが下記になります。高校3年生で習う「数列」という考え方が必要になるので、小学生や中学生でここまでプログラミングできる人は少ないかもしれません。難しい内容ですのであまり悩み過ぎないように。「このような手順で考えていくのか」ということを「なんとなぁ~く」感じてもらえればと思います。
まとめ
よく似たプログラムがあったとき、プログラムの中に法則(ルール)が隠れていないか調べてみよう
⇒ 法則を見つけたら、それを整理してプログラミングしてみよう