AIと作る「ブロック自動配置システム」
前回は、AIと一緒にBlockTennisを作った。
今回は、どうしてもブロックの自動配置が作りたくなっちゃったので、チャレンジしてみる。目指すは「ローグライクなテニスゲーム」だ!
AIはCopilotさん
ブロックの自動配置
10,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方向はランダムで、自動生成するプログラムを書いて
いやー、動かん。( ;∀;)
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近い。
徐々に減らして行って、どんだけ変わるかテストだテスト。
次は、自動配置の重なり対策!
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?