AIと作る「嫌がらせアイテム」
前回は、ブロックの通路を自動配置するシステムを作った。
今回は、待っている間に相手に嫌がらせするアイテムを作ってみる。
ローグライクなテニスゲームを目標にするなら、ブロックを破壊したらランダムでアイテム出てくるってのは必須でしょ。
アドバイザーのAIはCopilotさん
嫌がらせアイテム
相手が自陣でブロック崩しをしている間、片方は待ってるだけなので、嫌がらせアイテムとパワーアップアイテムを確率で出してみる。
ブロックを破壊したらアイテムを出すのは、ブロック崩しでやっているが、一応、AIに聞いてみる。
ブロックを破壊したらアイテムを発生させるプログラムを教えて
// 破壊イベント (例えば、マウスクリックで破壊する場合)
if (mouse_check_button_pressed(mb_left)) {
instance_destroy();
// アイテムの生成
if (irandom(1) == 0) { // 50%の確率でアイテムを生成
instance_create_layer(x, y, "Instances", obj_item);
}
}
はいはい。同じですね。
確率で出す出さないを決めた上で、負けてる側に有利なアイテムが出る可能性を高め、嫌がらせアイテム系を出す確率を高くするようにしよう。
アイテムの種類
アイテム画像を作る
記号化は重要
アイテムを出現
アイテムをオブジェ化して壁が壊れたら出現するようにしたのがこちら。
アイテムは3分の2で出現。負けている方に高確率で出るようにした。
アイテム効果のコードを書く
「巨大化」「ボールスロー」「ボールスピードUP」「敵をスロー」「敵をスモール」「ボールスモール」6種類の効果を作った。
コードは簡単。拡大縮小は「image_xscale, image_yscale」、速度は「speed」この2種類の対象を変えるだけで6種類を作ることができる。
alarmの問題発生
時間制限があるものは、alarmをobj_itemに設定したがうまくいかん。
obj_itemは取った瞬間なくなるのに、alarmを設定したのが問題だった。
バフがかかるオブジェクトにalarmを設定して問題解決。ややこしい。
AIが動かない問題発生をAIに相談
AIがアイテムを取りに行くコードを書いたら「アイテムのインスタンスが存在しません」というエラー発生。Copilotさんに聞いてみる。
if (instance_exists(obj_block)) {
// obj_blockタイプのインスタンスが存在する場合の処理
}
Copilotさんはいくつかの方法を提案してくれたが、今回は、オブジェクトを使った方法で作った。
gifアニメでは、時間が短くてすんまそん。
恒例のガッチャンコ
相手が自陣でブロック崩ししてボールが回ってこない間も、アイテムを待ってるから、緊張感は出てきた。
ローグライクなブロック崩しアクションへの道
次は、ローグライクなダンジョンで繰り広げるブロック崩しを作ってみようと思う。
いつまはガッチリ思考実験をしてから仕様を固めて作ってもらうのだが、今回は自分で作るので、あえて作りながら考えるという感じでやってみる。
エンカウント方式にしてブロックテニスになるとかでもいいな。
「創造>破壊>再構築>実証>結果を楽しむ」というループは1人で作ると以外に楽だな。モッククオリティで良いし。
タスクも書きながら作ってるけど、自分にだけ分かればいいからしようというよりはメモで良いし。