RPG には欠かせないマップの作り方について解説します。マップの「画像」の作り方は、下記の記事で解説しています。本格的なマップを作りたい人は参考にしてみてください。
今日のポイント
・よく似たプログラムがあったとき、プログラムの中に法則(ルール)が隠れていないか調べてみよう
目次
【はじめに】完成した作品を見る
【考え方】作品の全体像を理解する
主なスプライト
① スプライト「プレイヤー」のコスチューム
②~⑤ スプライト「マップの★の端」のコスチューム
プレイヤーがマップの端まで来たことを調べられるようにするため、スクラッチの画面の上・下・左・右にスプライトを用意します。端まで来たかどうかを調べるには座標や色を使ってもいいのですが、スプライトの当たり判定を利用する方法が簡単で確実です。
⑥ スプライト「表の世界」のコスチューム
⑦ スプライト「トンネル」のコスチューム
スプライト間のイベント
【プログラミング】してみよう
完成した作品はこちらにあります。難しいところは真似してみてください。
変数を作成する
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 のマップ | |
---|---|---|
基本的なルール | 右に移動するときは、コスチュームの番号を「+1」する | 右に移動するときは、コスチュームの番号を「+1」する |
特殊なルール | 右端のマップ(2、4)から右に移動するときは、コスチュームの番号を「-1」する | 右端のマップ(3、6、9)から右に移動するときは、コスチュームの番号を「-2」する |
法則(ルール)をプログラムで表現する
まとめ
よく似たプログラムがあったとき、プログラムの中に法則(ルール)が隠れていないか調べてみよう
⇒ 法則を見つけたら、それを整理してプログラミングしてみよう