見出し画像

AIと作る「嫌がらせアイテム」

ボールの通路自動配置システム

前回は、ブロックの通路を自動配置するシステムを作った。
今回は、待っている間に相手に嫌がらせするアイテムを作ってみる。
ローグライクなテニスゲームを目標にするなら、ブロックを破壊したらランダムでアイテム出てくるってのは必須でしょ。



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


嫌がらせアイテム

相手が自陣でブロック崩しをしている間、片方は待ってるだけなので、嫌がらせアイテムとパワーアップアイテムを確率で出してみる。
ブロックを破壊したらアイテムを出すのは、ブロック崩しでやっているが、一応、AIに聞いてみる。

ブロックを破壊したらアイテムを発生させるプログラムを教えて

ブロック破壊時の処理:
ブロックオブジェクトが破壊された時に、ランダムにアイテムを生成します。
このコードでは、ブロックがマウスクリックで破壊された時に50%の確率でobj_itemを生成します。obj_itemは、obj_blockが破壊された位置に生成されます。

Copilotさん
// 破壊イベント (例えば、マウスクリックで破壊する場合)
if (mouse_check_button_pressed(mb_left)) {
    instance_destroy();
    
    // アイテムの生成
    if (irandom(1) == 0) { // 50%の確率でアイテムを生成
        instance_create_layer(x, y, "Instances", obj_item);
    }
}

はいはい。同じですね。
確率で出す出さないを決めた上で、負けてる側に有利なアイテムが出る可能性を高め、嫌がらせアイテム系を出す確率を高くするようにしよう。

アイテムの種類

有利アイテム
・ボールスピードDown
・巨大化

嫌がらせアイテム
・ボールスピードUP
・敵の移動スピードDown
・敵を小さくする
・ボールを小さくする

アイテム画像を作る

アイテムのスプライトを作成

記号化は重要

形の記号化 「バーは四角」「ボールは丸」
・プレイヤーやCPUキャラなどのバーに作用するものは四角
・ボールに作用するものは丸にしている

色の記号化 「巨大化は橙」「SLOWは黄」「Smallは緑」「青は加速」
・効果は色で分けていてオレンジは巨大化
・SLOWは黄色
・Smallは緑
・青がスピードUP
※分かりやすくするためには記号化が重要

記号化の重要性については今後解説する

アイテムを出現

アイテムをオブジェ化して壁が壊れたら出現するようにしたのがこちら。
アイテムは3分の2で出現。負けている方に高確率で出るようにした。

item出現

アイテム効果のコードを書く

「巨大化」「ボールスロー」「ボールスピードUP」「敵をスロー」「敵をスモール」「ボールスモール」6種類の効果を作った。
コードは簡単。拡大縮小は「image_xscale, image_yscale」、速度は「speed」この2種類の対象を変えるだけで6種類を作ることができる。

alarmの問題発生

時間制限があるものは、alarmをobj_itemに設定したがうまくいかん。
obj_itemは取った瞬間なくなるのに、alarmを設定したのが問題だった。
バフがかかるオブジェクトにalarmを設定して問題解決。ややこしい。

AIが動かない問題発生をAIに相談

AIがアイテムを取りに行くコードを書いたら「アイテムのインスタンスが存在しません」というエラー発生。Copilotさんに聞いてみる。

インスタンスが存在するかどうかを確認するコードを教えてください
特定のオブジェクトタイプのインスタンスが存在するかどうかチェックする場合は、以下のコードを使ってください。

Copilotさん
if (instance_exists(obj_block)) {
    // obj_blockタイプのインスタンスが存在する場合の処理
}

Copilotさんはいくつかの方法を提案してくれたが、今回は、オブジェクトを使った方法で作った。

6種類のアイテム効果

gifアニメでは、時間が短くてすんまそん。

恒例のガッチャンコ

アイテムの出現確率を調整して「BlockTennis」にガッチャンコ

相手が自陣でブロック崩ししてボールが回ってこない間も、アイテムを待ってるから、緊張感は出てきた。

ローグライクなブロック崩しアクションへの道

次は、ローグライクなダンジョンで繰り広げるブロック崩しを作ってみようと思う。

ローグライクなブロック崩しアクション
1.自由に動き回って、タメ撃ちでボールを発射して敵や壁を壊す
2.プレイヤーに向かってくるザコ敵
3.ザコをぶっ飛ばしてボールにできるようにする
4.ボスの発射する弾も打ち返せる
5.ローグライクな広いダンジョンで戦う
6.トルネコみたいに強い武器やアイテムを取ってくる感じにしよう。

いつまはガッチリ思考実験をしてから仕様を固めて作ってもらうのだが、今回は自分で作るので、あえて作りながら考えるという感じでやってみる。

エンカウント方式にしてブロックテニスになるとかでもいいな。

「創造>破壊>再構築>実証>結果を楽しむ」というループは1人で作ると以外に楽だな。モッククオリティで良いし。

タスクも書きながら作ってるけど、自分にだけ分かればいいからしようというよりはメモで良いし。

やっぱり、趣味で作る自由は最高!

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

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