見出し画像

AIと作る「ボールの通り道☆ブロック自動配置システム」

シンメトリ☆自動配置システム

前回は、ブロックをシンメトリに配置するシステムを作った。
今回は、ボールの通り道を作るようにする。



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


ボールの通路を自動生成

ボールの通路を作るプログラムをAIにお願いする。

GameMakerで、ブロックを配置する時に、Y方向に通路になるような空きスペースを作る方法を教えて

了解しました。
Y方向に通路を確保しつつブロックを配置する方法をご紹介します。

プロジェクトのセットアップ:
ブロックと空きスペース用のスプライトを作成します。
・各列に1つの空きスペースをランダムに配置します。
・残りの空きスペースにブロックを配置します。

Copilotさん

なるほど、空きスペース用の透明ブロックを作って座標をあらかじめ埋めておき、それ以外の場所にブロックを置くってことね。
サンプルコードもくれたけど、今まで作った物に対応しないので割愛。

通路用の透明ブロックは、Y座標だけ選べば置く必要はない。
通路の幅は、y_path_rangeとかで指定できるようにして、選んだY座標から通路の範囲にブロックの座標が入ったら除外するようにプログラムを追加。

新しく追加修正したコード

y_path_range = 60;
// 重なりを判定する関数
function is_overlapping(_new_x, _new_y) {
	for (i = 0; i < array_length(x_positions); i++) {
		if (abs(_new_x - x_positions[i]) < obj_block.sprite_width && abs(_new_y - y_positions[i]) < obj_block.sprite_height) {
			return true; // ブロックが重なっている場合 
		}

		// 新しく通路とブロックが重なった場合の処理を追加
		if(abs(y_path - _new_y) < y_path_range) return true;

	} return false;// 重ならない場合 
}
// 空きスペースのY座標を決める
y_path = irandom(room_height/grid_size_y/2) * grid_size_y;
ボールの通路を自動配置

恒例の「BlockTennis」にガッチャンコ

BlockTennisに通路システムをガッチャンコしてブロックの個数やX座標の範囲、通路の幅などを調整した。

Block Tennis × 通路システム

通路が開いたので、ボールが両陣営に移動するので、CPUと戦ってる感じにはなってきた。これでブロック自動配置システムは一旦終了かな。
それでも、片方がブロック崩しをやっている時にやれることがないので、その辺を追加してみる。

自動配置システムの変遷

①時間でランダム配置
②左右対称に配置
③重ならないように配置
④上下左右に対称に配置
⑤通路を追加
Block Tennis × 通路の自動配置

次は、アイテムボックスで嫌がらせの巻


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

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