見出し画像

AIと作る「ブロックダンジョン」 プレイヤー編

ブロック自動配置システム

前回までは、ブロックを自動配置するシステムを作った。
この自動配置とボロック崩しをベースにローグライクなブロックダンジョンを作っていく。



アドバイザーのAIはCopilotさん


ローグライクなブロックダンジョン

昔流行ったビーダマンに似てるかな?

「ダンジョン」×「ブロック崩しアクション」

ゲーム概要
◎ローグライクな毎回変わるブロックダンジョン!
◎タメ撃ちでボールを発射し敵やブロックを破壊!
◎ザコをぶっ飛ばしてボールに!?
◎ボスの発射する弾も打ち返せる!?
◎トルネコみたいに強い武器やアイテムを取って帰る

「ゴールまでの逆算」でタスク化

タスクリスト
①プレイヤーを作る
 ▢ 移動とガイドと通常攻撃
 ▢ タメ撃ちでボールを発射
 ▢ ボールを打ち返す
②ボールザコを作る
 ▢ 移動と索敵
 ▢ ザコをぶっ飛ばしてボールとして利用
③テストステージでテスト
 ▢ 仮ブロックを配置してテスト
④敵を作る
 ▢ 突進敵
 ▢ ボール発射敵
 ▢ プレイヤーのダメージ処理
⑤ダンジョンの自動生成
 ▢ 自動生成のルールを作る
 ▢ ダンジョンの大きさなどを設定
⑥アイテムの自動生成
 ▢ アイテムの発見とパワーアップ
 ▢ 持ち帰って装備して再チャレンジ
⑦ボス戦
 ▢ 突進敵やシューティング敵、ザコ呼びなど

作りながら変えていくがこんなもんかな?

①プレイヤーを作る

移動とガイド

矢印キーで8方向移動

矢印キーを使った8方向移動は以前に作ったものを流用。
今回は、移動だけでなく8方向に攻撃できるようにしたいのだが、絵を8方向に描くのはしんどいので、左右反転+ガイドで向きがわかるようにする。

左右反転のコードを教えて

水平反転は、image_xscale = -1でできます。

CoPilotさん
円を描くツールで作ったプレイヤー

ということで、右向きのスプライトを用意して、
image_xscale = 1; // 右矢印が押された時
image_xscale = -1; // 左矢印が押された時
というコードを追加した。これで移動方向に応じて絵が左右に反転される。

8方向のガイドを出したい

プレイヤーが矢印キーの入力に応じて8方向に向きを変えるためには、キャラクターの向きと矢印を更新する必要があります。

Step 1: キャラクターの向きの初期化
まず、キャラクターの向きを管理する変数を初期化します。

Step 2: 矢印キーの入力をチェックし、向きを更新
Stepイベントで矢印キーの入力をチェックし、キャラクターの向きを更新します。

Step 3: 矢印を表示する
キャラクターの向きに応じて矢印を表示するためには、スプライトを回転させます。矢印スプライトを用意し、そのスプライトをキャラクターの方向に応じて回転させます。

Copilotさん

obj_dir ガイドのオブジェクト

// Createイベント
direction = 0;
// Stepイベント

// 矢印はプレイヤーを追従
x = obj_player.x
y = obj_player.y

if (keyboard_check(vk_up)) {
    if (keyboard_check(vk_right)) {
        direction = 45; // 右上
    } else if (keyboard_check(vk_left)) {
        direction = 135; // 左上
    } else {
        direction = 90; // 上
    }
} else if (keyboard_check(vk_down)) {
    if (keyboard_check(vk_right)) {
        direction = 315; // 右下
    } else if (keyboard_check(vk_left)) {
        direction = 225; // 左下
    } else {
        direction = 270; // 下
    }
} else if (keyboard_check(vk_right)) {
    direction = 0; // 右
} else if (keyboard_check(vk_left)) {
    direction = 180; // 左
}

image_angle = direction; // 矢印のスプライトを回転
ガイドを表示

タメ撃ちでボール発射

スペースキーを押し続けた後、離すとボールを発射するプログラム
このプログラムは、スペースキーを押し続けた後にボールを発射するようにするための基本的な手順を示します。

Step 1: 変数の初期化
まず、オブジェクトに必要な変数を追加します。

Step 2: キー入力の処理
スペースキーが押されている間、時間を計測します。押し続けている間、chargingフラグをtrueに設定し、タイマーを増加させます。

Step 3: ボールの発射処理
スペースキーが離された時にボールを発射します。ボールの速度や方向を設定するコードを追加することもできます。

Copilotさん

AIのコードを修正し、発射可能になったら黄色くなるのを追加。
ガイドの方向に発射するようにしたのがこちら。

// チャージ攻撃設定
charge_time = 0; // チャージ攻撃の初期時間
charging = false; // チャージ攻撃したか?
ok_charge = 30; // チャージ時間
// タメ撃ち
if (keyboard_check(vk_space) and !instance_exists(obj_ball) and damage_hit == false) {
	charging = true;
	charge_time += 1; // マイフレームごとにカウント
	if (charge_time >= ok_charge) image_blend = c_yellow;
	
} else {
	// スペースキーを離した時、充電時間が1秒(60フレーム)以上ならボールを発射 
	if (charge_time >= ok_charge and damage_hit == false) { // ボールを発射する処理 
		instance_create_layer(x, y, "Instances", obj_ball);
		obj_ball.direction = obj_dir.direction; // 矢印の向きにボールを発射
		}
	// 充電時間をリセット
	image_blend = blend_color;
	charge_time = 0; 
} 

発射するボールはブロック崩しのボールを使用。
消えたら、charging = false;を変えるようにしている。

発射したボールを打ち返す

ブロック崩しでボールを打ち返す処理は実装済み。

ブロック崩しで作ったカウンター攻撃

今回は、通常攻撃もガイドの方向に出るように修正した。


今回作ったプレイヤー


発射したボールを反射できる

ブロックダンジョンへの道

今回はプレイヤーを作った。次回はボールザコを作る。

タスクリスト
①プレイヤーを作る
 ✅ 移動とガイドと通常攻撃
 ✅ タメ撃ちでボールを発射
 ✅ ボールを打ち返す
②ボールザコを作る
 ▢ 移動と索敵
 ▢ ザコをぶっ飛ばしてボールとして利用
③テストステージでテスト
 ▢ 仮ブロックを配置してテスト
④敵を作る
 ▢ 突進敵
 ▢ ボール発射敵
 ▢ プレイヤーのダメージ処理
⑤ダンジョンの自動生成
 ▢ 自動生成のルールを作る
 ▢ ダンジョンの大きさなどを設定
⑥アイテムの自動生成
 ▢ アイテムの発見とパワーアップ
 ▢ 持ち帰って装備して再チャレンジ
⑦ボス戦
 ▢ 突進敵やシューティング敵、ザコ呼びなど

作りながら変えていくがこんなもんかな?

次はボールになるザコを作る


いいなと思ったら応援しよう!

この記事が参加している募集