パーソナルブログメモリ

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

Python3 塗りゲーのAIを作成とボスを倒して世界一位になったプログラムの解説

2022-09-20 | 新規1000万人ぐらいにプログラムをマスターしてもらいたい

こんな塗りゲー

CodinGame COMMUNITY CONTRIBUTE PAINTEDを遊んでいます

 

プログラムの初期状態

 

 

変数などを使いやすい形に変えロボットをクラス化する

 

パスファインディングで効果的にぬるルーチンを入れる

15行目のZIPを忘れたらサーバー側でヌルポが発生して、しばらくドツボにハマる

ボスに勝利

 

サブミットして、はい世界一!

 

プログラムの解説

2 ロボットのクラス

 定義時に解析用に表示もしてみる

9 パスファインディングのAI用の関数

 lengまでの長さの上下左右の検索、11行目スタックの情報は (位置 長さ 通った位置達 スコア 動いた方向達)

 スコアは相手塗り2点、新規塗り1点、自塗り位置0点として加算していきます

 20行で一番ポイントの高かったパスの最初の移動方向を返します

 

取得データ

21 初期データ取得

 プレイヤーのID、チームのID、マップの幅、マップの高さ、テレポート数、ボックス数、ロボット数、各プレイヤーの所持ロボット数

31 マップ情報取得

 少し計算しやすいように枠をつけて、空が"E"だと見づらいので"."に変更しています

33 ロボットの情報取得

 ID 位置x y オーナー チーム init

他のデータはLevel 1では使われません テレポート数とボックス数は0のため

 

メインループのAI呼び出し

36 自分のチームのロボットなら一番ポイントの高い手にMOVEさせます

 

Level4だと、こんな感じに動いてくれます 

Level4で動かすには37行目の条件にand r.owner==pidが必要です(なくてもワーニングだしながら、そこはかとなく動きます)

テレポートとかボックスとか何も判定していませんが、Level4でもなんとかなっているみたいです

 

 


最新の画像もっと見る

コメントを投稿

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