
AIと作る「ブロック自動配置システム」

前回は、AIと一緒にBlockTennisを作った。
今回は、どうしてもブロックの自動配置が作りたくなっちゃったので、チャレンジしてみる。目指すは「ローグライクなテニスゲーム」だ!
AIはCopilotさん
ブロックの自動配置
10,10のグリッドサイズに沿って生成してください
了解しました!10x10のグリッドに沿ってブロックを生成する方法を説明します。これには、以下のような手順が必要です。
グリッドサイズの設定:
グリッドのサイズを定義します。例えば、各ブロックのサイズが10ピクセルの場合、生成する位置をこのサイズに基づいて計算します。
ブロック生成ロジックの変更:
ブロックを特定の間隔で配置するためのロジックをスクリプトに追加します。
obj_genarate(生成オブジェクト)
Createイベント内
// 1秒間隔のアラームを設定
alarm[0] = 60;
Alarm 0イベント内
// ランダムなグリッド位置を計算
var grid_size = 10;
var grid_x = random(room_width / grid_size) * grid_size;
var grid_y = random(room_height / grid_size) * grid_size;
// 新しいブロックを生成
instance_create_layer(grid_x, grid_y, "Instances", obj_block);
// 再びアラームを設定
alarm[0] = 60;

実行する前から分かっていたが、Alarmを使って時間をかけて、ランダムに配置するCopilotさん。
指示が曖昧なせいなので、もう少し具体的に聞いてみる。
20個のブロックを、x方向は画面中央から左右50ドットの範囲で、y方向はランダムで、自動生成するプログラムを書いて
20個のブロックを左右対称に生成する
center_xでルームの中央のx座標を定義し、offset_xを使って左右にブロックを配置します。
x方向は左右50ドットの範囲で、Y方向はランダムで配置
このコードでは、offset_xを使ってX方向にブロックを中心から左右に最大50ドットまでずらし、Y方向はランダムな位置に設定します。
いやー、動かん。( ;∀;)
Copilotさんのコードを修正して動くようにしたCreate Eventがこちら。
// 変数の定義
// グリッドサイズを定義
var _grid_size = 10; // グリッドの間隔
var _blocks_per_side = 10; // ブロックの個数
var _x_range = 50; // x方向の範囲
var _center_x = room_width / 2; // centerポジション
var _offset_x; // xオフセットを左右対象にする
var _random_y; // y座標はランダム
// 左右対称にブロックを生成(X方向は指定された範囲内、Y方向はランダム)
for (var _i = 0; _i < _blocks_per_side; _i++) {
_offset_x = (_i + 1) * _grid_size; // x方向は範囲に基づいてオフセットを計算
_random_y = random(room_height); // y方向はランダム
// 左側のブロック
instance_create_layer(_center_x - _offset_x, _random_y, "Instances", obj_block);
// 右側のブロック
instance_create_layer(_center_x + _offset_x, _random_y, "Instances", obj_block);
}
エスケープキーでブロックを再生成するようにコードを追加して、ブロックを自動配置できるようになった。

ブロックが重なったり画面外に出たりしていたので、次は重ならないのように修正だな。
自動配置の移り変わり


色々追加修正調整して、ローグライクなテニスゲームを目指そう。
この自動生成は小さな一歩だが、これをもとにダンジョンとかシューティングやアクションゲームの敵の配置を作っちゃうから大きな一歩だ。
Copilotさんが文字数は500~1000文字以内って言ったが2000近い。
徐々に減らして行って、どんだけ変わるかテストだテスト。