パーソナルブログメモリ

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

amazonsのコーディングのデバッグ

2021-01-27 | プログラムをマスター計画2020

延々と作っているとデータ設計からし直したくなる時が来る。

その新しいデータ設計も速くはなりそうだけど、まとまるのか自信がない。

しっかり練って作り直さないとダメになる確率も高い。

 

chessの改良どうしたものかと悩んでいる中 amazonsというゲームが投稿(制作中)されていたので遊んでみます。

最初は簡易なものから作成、移動先の空き2マスぐらいを評価値にしようとしましたが、

関数作成中にやめて、chessで検討中のデータ構造と似た解析を導入してみます。

 

10x10マスでクイーン4個の移動制御、移動先、移動先の評価、移動先から矢を打つ

軽く2手の読みは必須のようで意外に手強いのかもしれません。

一手の速度制限も100msと多め。

 

<ルール説明>

プレイ人数は2人、10x10マスのエリアに4個ずつクイーンを置きます。

チェスのクィーンと同じ動きをしたあと(空間地以外動けません)、クィーンの動ける範囲に矢を放ってそこに壁を設置します。

お互い一手ずつ動かして、最後まま動けた方が勝ちです。

 

同じCodinGameのPenguinsとWondev Womanと似ています。

 

こんなアルゴリズムにします。

1手の移動範囲が少ない駒をまず選び、移動先の1手の移動範囲が多い場所に移動して

移動先から一番遠い地点に矢を放ちます。

 

コーディング完了!

 

デバッグ開始

コロン : ほんとよく忘れます。

 

インデントずれ、一文字ならラッキー 4つズレて想定外の動きをされ、最近どこかでハマりました。

 

 

合法手を指していない。

条件設定ミスで初期値から変更されていませんでした。

 

 

10行目のp 数値を想定していたのですがlistが入っていました。

今回移動先のデータを個別でなく、方向+個別にしていたので新しいデータ設計との認識ミスでした。

 

 

合法手を指していない。座標の指定順が逆でした。

 

 

合法手がさせていない。

矢の放った先が全然違ってました。(コピペで修正ミス)

 

 

合法手がさせていない。

特定条件の時、座標の計算元が違ってました。

 

60stepぐらい、20分ぐらいデバッグで完成、その最初の対局は...引き分け

 

そのままTEST IN ARENAへ暫定トップ。

そのソースを一画面で収まるように少し圧縮

 


最新の画像もっと見る

コメントを投稿

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