パーソナルブログメモリ

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

惑星に高出力エネルギーを交互に注入し火山活動を起こさせ、自分が作った火山だけで惑星を先に半分に切った方が勝ちゲーム CodinGame Volcanoes

2021-05-30 | ゲーム

リプレイ画面

 

https://www.codingame.com/replay/561103427

 

 

ルール

 

惑星に高出力エネルギーを交互に注入し火山活動を起こさせ、自分が作った火山だけで惑星を先に半分に切った方が勝ち。

画面は展開図で正20面体として考えて、辺で接しているものを繋がりとします。

半分の判定はパネルのSとN 同じ数字ものがつながった時です。

あとエネルギー注入後が1その後ターンごとに4まで増え、4の時隣接する3箇所が平地なら隣接地に1が自動生成されます。

あと隣の相手の火山との関係で対消滅とかします。

 

 

履歴

 

#目標50ステップでそこそこ戦う 5/29 18:36 過去のはみない 今日いっぱいで
#19:19 ルールをやっと知る(前は知らないで作っていた)
#21:19 abema将棋が面白くてちっとも進まん
#22:50 自己勝ち、相手勝ちを判定で とう 13/15
#23:30 tile2を作る やー 7/15
#23:50 2手詰めを探す 0:28 できたっぽい ニャー 4/15
#相手勝ちを止める手をマイナス評価してた うひょ 3/15 BOSS2にまあ勝てない
#1:38 tile_posを作成
#あと次の地形があれば

これが作成時のソースの履歴です。

奇声を発していますが、SUBMITする時は少し覚悟が必要なので発しています。

自信があるときは とう とか発していますが、経験上 調子乗っているときほどダメなことが多いです。

たぶんリミッターが外れていて、確度が低いのではないかと思っています。

 

 

上達の秘訣

 

順位を上げるために必要なのは

行動の回数

相手がスゴイんだという姿勢でめげずにコツコツSUBMITしている人がだいたい上位にいます。

 

直近も作成時が3位で現在4位、

その間SUBMITした方は3人、上位にいった方は3回リトライしてます。

 

 

作成アルゴリズム

 

今回は画面を作ることはしませんでした。

このゲーム少しややこしいのはタイルのIDにあたるものが順番にふった数字とN05とかタイル番号2つあって

隣接リンクの情報も与えられるのですがそちらは順番値

 

タイルを順番値をキーに辞書化して

タイル[順番値] = (タイル番号、タイル番号の数値のみ、[リンク1、リンク2、リンク3])

 

あとは迷路探索のアルゴリズムの応用です。

def waker(n, d): #d
#長さと勝ち
sp = [(n, 0)]
max_leng = 0
out = [n]
win_pos = [ tiles[n][1] ]
mate = []
mate2 = []
while sp != []:
p, leng = sp.pop(0)
for np in tiles[p][2]:

(※ ソースのインデントは崩れてます)

 

ソースは sp探索ノードの設定、長さ、out探索済みを入れる、win_pos探索済みのタイル番号の数値、一手詰み、二手詰みのデータを探索時に追加していきます。

火山のデータが0は平地、>0は自分の火山、<0は相手の火山、いずれでも探索できるように関数に渡すパラメータdが1の時はnに置いた時の自分の探索としています。(相手のときはd=-1)

 

最後火山の成長も入れてみましたが、正確な実装ができず、強いのか弱いのか不明なので保留中です。

(自己対局で5戦で全勝なら強くなっています。)


最新の画像もっと見る

コメントを投稿

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