メイクコード アーケード を使ったゲーム作り第10弾です。
前回、前々回とタイルマップを使った課題でした。
今回もタイルマップを使います。
「この機能を使いこなせばゲーム作りの幅が広がるんだ」
という思いが強くあるので、説明てんこ盛りでいきます。
5ページ構成という長さになりそうです。
これまでにしてきた説明はできるだけ省略します。
理解が追いつかないときは前の課題からやり直しましょう。
これから作るゲーム
これはゲームではないです。
ダンジョンの作り方を学習するためのサンプルになります。
まずは抜け道(壁)とアイテムの配置です。
抜け道とは当たりの無い壁のことです。
一見、移動できないと思える所でも実は通過できるというギミックです。

次は、アイテムをランダムに配置する方法です。

スイッチによる消せる壁の作り方です。

配置した敵を動かす方法です。

以上のようなダンジョンのギミックと、次の部屋への切り替え方を説明します。
プレイヤーを表示しよう
新しいプロジェクトを作りましょう。
名前は「ミニダンジョン」にしました。

プレイヤーを作ります。

キャラクターはこれにしました。
このキャラと同じ大きさなら、どの絵でも構いません。

操作できるようにします。
ついでに背景色も入れます。肌色っぽい色を選びましょう。

プレイヤーの設定はこれで終わりです。
実行してプレイヤーの移動テストを行いましょう。
1つ目のマップを作ろう
タイルマップを使ってマップを作っていきます。
シーン から タイルマップを設定する を持ってきます。

マップエディタを開きます。

横に長いマップを作ります。
マップサイズを横 16 縦 7 に変更します。

下図のように壁を作ります。

当たり判定をセットします。
セットしない所を2箇所作ります。

実行してみましょう。
当たり判定を入れなかった所をすり抜けられるかチェックします。
プレイヤーのサイズが大きいので引っ掛かりやすいです。注意しましょう。

この手のギミックは昔からよく使われます。
親切なゲームでは、絵に少し手を入れて「よく見ると他と違う壁」にしたりします。
カメラを入れよう
このマップは画面サイズより大きいため、カメラを入れてプレイヤーを追いかけるようにします。
シーン から カメラでスプライトmySpriteを追う を持ってきます。

最初だけ の中に入れます。
これでスプライト mySprite つまりプレイヤーを中心にカメラが移動します。

プレイヤーの初期配置を決めよう
現在、実行するとプレイヤーは画面中央に表示されます。
マップに関係なく表示されるため、壁の上に表示されたりします。

このようなことが起こらないようにプレイヤーの初期位置を決めなくてはいけません。
ただし、座標を指定する方法はよくありません。
マップが増えるたび、マップ毎に座標を設定する必要が出てきてしまうからです。
定番としては初期配置の情報をマップ内に組み込んでしまう方法があります。
早速やってみましょう。Dungeon の絵を選択して
3つの絵を使い「プレイヤーの初期位置」「コインの配置」「脱出の階段」をマップに組み込みます。

下図のように配置します。

実行するとこんな感じになります。
ちなみに、絵は私が適当に選んだだけで違う絵を使っても大丈夫です。

シーン から mySpriteをランダムに◻︎の上に配置 を持ってきます。

最初だけ の中に入れたら「プレイヤーの初期位置」の絵に変更します。

mySpriteをランダムに◻︎の上に配置 のランダムについてですが、組み込んだ絵が1つならば必ずその絵の上に表示されます。
なお「マップの四隅のどこか」に出現させたいのであれば、初期配置の絵をマップの四隅に組み込むだけです。簡単ですね。
実行すると、プレイヤーは初期配置の絵の上に表示されます。

初期配置の絵を消そう
初期配置の絵はいらないので消しましょう。
これから説明するのは、マップ上の絵を消すときによく使う手法です。
今回のようにマップ情報とプログラムが分離している場合は、マップに使われている絵の情報を読み取って使います。
ループ から 配列 list の値を変数値に入れてくりかえす を持ってきます。

最初だけ の中に入れます。

シーン から すべての◻︎位置の配列 を持ってきます。

繰り返しの list の所に入れます。
そして初期配置の絵に変更しましょう。
これでマップ上にある初期配置の絵の情報をすべて扱えるようになります。

シーン から タイルをタイルマップ列0行0に設定する をループに入れます。

値 を下図のようにはめ込みます。
ループするとき 値 の中の情報を使って空のタイルを設定します。
つまり、初期配置の絵を消します。

実行して初期配置の絵が消えることを確認します。

このようにマップ上の絵の情報を読み取り、必要なだけ繰り返しを行う方法はとてもよく使います。
続きます。