【ローグライクゲー】キャラクターを壁外に生成、または1人だけ生成したい時のメモ【制作日記】

どうも、萬朶櫻(@wanduoying)、182朶目の記事です。

 

前囘ではマップ上にマップにキャラやアイテムなどを生成しました。

【ローグライクゲー】マップにキャラやアイテムなどを生成する【制作日記】

今囘は

  • プレイヤーを1人だけ生成するやうにする
  • キャラクターが壁の中に生成されないやうにする

ここをどうにかします。

プレイヤーや敵が壁内に生成されないやうにする

MapGenerator()におけるmap[,]の要素をCharacterGenerator()で使用できるやうにする

キャラクターを壁以外の所に生成させるには、MapGenerator()で宣言したローカル變數map[,]をCharacterGenerator()で參照できるやうにする必要があります。

MapGenerator()のmap[x,z]が0(壁)ならCharacterGenerator()のmap[x,z]では-1(何も生成せず)みたいな。こんな感じ。

 

さつそく記述を變更してみます。

MapGenerator()内でローカル變數として宣言、初期化してゐたmap[,]の配列を

このやうに、宣言だけ外に出してメンバ變數にします。

メンバ變數にすることによつて、全てのメンバ函數からmap[,]を參照することができるやうになりました。

 

CharacterGenerator()に追加の條件處理を入れる

CharacterGenerator()内で既にmap[,]といふローカル變數があり、ややこしいのでmapCharaに名前を替へました。

 

9~20行目のfor文の中にif else文を入れたわけですが、これ三項演算子にできさうですね。早速替へてみます。

エラー無し。初めて實戰で使ふ記述なので、上手く動いてくれて嬉しいです。

確認のため、敵の生成數をふやして實行。ちやんと壁以外の所に生成されました。

 

またこれを利用して、罠が通路上に生成されないやうにしておきました。やり方は大體同じなので省略します。

プレイヤーや階段など、複數生成したくないオブジェクトを配置する

前囘までの記述はこちら。

for文の中に敵と横竝びで處理が書かれてゐます。

複數生成されるのはこれが原因なので、for文の外に出します。

 

出しました。とりあへずこれで1つだけ生成されるやうになります。

 

14,15行目でローカル變數playerPosX、playerPosZを宣言。これをプレイヤーの座標とします。

17行目のwhile文でひたすらplayerPosX、playerPosZにランダムな數を代入させ、そして30行目のif文で設定した条件(壁などが無い空間)に合致すればwhire文を脱出。x座標がplayerPosX、z座標がplayerPosZの位置にキャラクターを生成させる。

 

實行結果をキャプチャし忘れてゐましたが、ちやんと意圖通りの動作になつてゐます。

各種オブジェクトの生成に關してはここまでとして。次は移動、行動についてやつてみようと思ひます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA