パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

University of Wrocławに体験入学してローグのAIを作成してみる

2021-12-19 | CodinGame

Artificial Intelligence for Games, 2021 edition course, University of Wrocław, 2021.の授業の最中。

授業内容はローグ系のゲームのAIを作成するというもの。CodinGameのYOUR LAST ACTIVITIESになぜか、

https://www.codingame.com/multiplayer/bot-programming/code-keeper---the-hero

が入っている。家の座敷わらしかヨーロッパの妖精さんがいたずらをしたのか、University of Wrocławから

オファーをいただいたのかは不明。

 

CodinGameの久しぶりのBOT プログラム。今年はもう終わりかなと思っていたら、自分がやってみたかった

ローグ系のAI作成 さっそく参加。

 

 

自動生成された最初のプログラム

 

まずデータを保持する部分を作成。クラスの配列でメインのデータをキープ

 

 

勇者の武器は剣、弓、大鎌、ハンマー。剣以外は利用回数が存在します。最初は剣を装備します。

攻撃対象がなければみえる範囲(ユニット中心で7x7)、出口(10000ポイント)、宝(100ポイント)、

ポーション(HP10回復)、箱の優先順で移動します。

 

バグをとります。

 

大鎌とハンマーも購入(実装)します。

 

なんやかんや真ん中ぐらいまでいけるかなーとか思っていたのですが...ブービー賞。ヴロツワフ大学生

なかなかやるではないか。

 

ここでキャラクターの紹介、勇者(グーニーズの主人公タイプ)、スケルトン、ガーゴイル、オーク、ヴァンパイア

オークは間接攻撃をしかけてきて、ヴァンパイアは視野が広いです。スケルトンは疲れていて、勇者がとなりに

きた時だけ、動き出します。

 

数日前にチャレンジして挫折した、ファミコンウォーズのAIの要素がいろいろと詰まっていることに少しずつ気が

付かされました。ローグを検討しているうちにファミコンウォーズが浮かんだのかなと思うぐらい。これにさらに

生産のアルゴリズムがあればそれっぽいものになりそうです。

 

順位をあげるための作業

1) マップの作成(このゲームでは視界範囲の壁などのキャラクター情報のみでマップは与えられない)

2) 全ての武器の実装

3) 移動をパスファインドで検索

4) 怪物たちの各ポイントでの攻撃の合計を計算しておき、死地には移動しない

5) 移動順の修正(出口にはすぐ向かわない。ダメージが少ない時はポーションを取らない等)

6) 順位1,2,3位の方をローカル対戦に招聘して鍛えてもらう

 

なんとかここまで、あとはいい関数を2つ作成して、すばらしい関数を1つ作成できればトップに届きそう。

1,2,3位の方達との対戦は微差だけど埋まらない厚い壁を感じました。例のごとくここから、いい関数では

ないかと思っていた関数の実装失敗して(設計ミスかも)、投稿できないレベルまで弱くなっています。

 

かなり実装したつもりですが、手強いです。

 

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。