Scriptbot Warz!
結果は内にあり、暗殺者が私たちのチャンピオンであり、3試合中2試合に勝ちました!Scriptbotを送信したすべての人に感謝します!優れたパスを表示し、すべてのアクションオプションを最大限に活用したBestOpportunityBotのホーンに感謝します。
地図1
暗殺者は早い段階でBestOpportunityBotを使用しましたが、残りの試合はかなり退屈でした。詳細なプレイバイプレイはこちら。
- 暗殺者:HP 10、ダメージ10、ダメージ3
- The Avoider v3:10 HP、0ダメージ、0ダメージ
- 食べ終わった:10 HP、0ダメージ、0ダメージ
- BestOpportunityBot:HP 0、ダメージ3、ダメージ10
地図2
BestOpportunityBotはこの試合でほとんどの作業を行いましたが、アサシンは最終的に彼を連れ去ることができました。詳細なプレイバイプレイはこちら。
- 暗殺者:2 HP、10ダメージ、9ダメージ
- BestOpportunityBot:HP 0、ダメージ32、ダメージ10
- The Preventer v3:0 HP、0ダメージ、12ダメージ
- 食べ終わる:0 HP、0ダメージ、11ダメージ
地図3
BestOpportunityBotは、この試合で全員をtrapに追い込みました。とてもかっこいい。詳細なプレイバイプレイはこちら。
- BestOpportunityBot:HP 10、ダメージ30、ダメージ0
- 暗殺者:0 HP、0ダメージ、0ダメージ
- 食べ終わる:0 HP、0ダメージ、0ダメージ
- The Avoider v3:HP 0、ダメージ0、ダメージ0
ご回答ありがとうございます!Scriptbotが4つしかないため、以下の各マップに1つずつ、3つの完全無料試合のトーナメントプランを放棄します。最高の勝利記録を持つスクリプトボットが勝利します。ネクタイが発生した場合、ネクタイを破ったスクリプトボットが最初に勝つという突然の死になります。
あなたがそれを受け入れることを選択した場合、あなたの仕事は、ASCIIマップを横断してその敵を破壊できるScriptbotをコーディングすることです。各バトルは、ランダムなスタート順のターンベースのゲームの形をとり、各スクリプトボットはアクションを起こすためにエネルギーポイント(EP)を費やす機会があります。GameMasterスクリプトは、各Scriptbotに入力を送り、出力を解釈します。
環境
各Scriptbotは独自のディレクトリ内に含まれており、そこでファイルとファイルから読み取りmap
、stats
ファイルへの読み取り/書き込みがdata
できます。このdata
ファイルは、役に立つと思われる永続的な情報を保存するために使用できます。
統計ファイル
stats
ファイルには、あなたの対戦相手についての情報が含まれており、次のようにフォーマットされます。各プレイヤーは別々の行に表示されます。最初の列はプレーヤーIDです(@
あなたを意味します)。2番目の列は、そのプレーヤーの健康状態です。
1,9HP
@,10HP
3,9HP
4,2HP
マップファイル
map
ファイルには、次のようになります...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
...またはこれ...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
...またはこれ...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
...またはまったく異なるように見えるかもしれません。いずれにしても、使用される文字とその意味は同じままです。
#
通行不能で侵入できない壁。1
、2
、3
...敵プレイヤーを表す数値。これらの番号は、stats
ファイル内のプレーヤーIDに対応しています。!
トラップ。これらの場所に移動したScriptbotはすぐに死にます。@
Scriptbotの場所。自由に移動できる広場
ゲームプレイ
GameMasterスクリプトは、Scriptbotにランダムな開始順序を割り当てます。スクリプトボットは、生きている間にこの順序で呼び出されます。Scriptbotには10のヘルスポイント(HP)があり、各ターンに10のエネルギーポイント(EP)から始まり、移動または攻撃に使用できます。各ターンの開始時に、Scriptbotは1 HPを回復するか、すでに10 HPである場合は1 EPを追加で付与されます(したがって、実行することが実行可能な戦略である場合があります)。
1つのScriptbotのみが生き残るか、100ターンが経過すると、戦闘は終了します。戦闘の終了時に複数のScriptbotが生きている場合、その場所は次の基準に基づいて決定されます。
- ほとんどの健康。
- ほとんどのダメージが与えられました。
- ほとんどのダメージ。
Scriptbot入力
GameMasterは、バトルマップをmap
Scriptbotが読み取りアクセスできる名前のファイルに印刷します。マップは任意の形式をとる可能性があるため、Scriptbotがマップを解釈できることが重要です。Scriptbotは、EPを示す1つのパラメーターで呼び出されます。例えば...
:> example_scriptbot.py 3
Scriptbotは、EPをすべて使用するか、最大10 11回使用するまで呼び出されます。マップおよび統計ファイルは、各呼び出しの前に更新されます。
Scriptbotの出力
Scriptbotは、アクションをスタウトに出力する必要があります。可能なアクションのリストは次のとおりです。
MOVE <DIRECTION> <DISTANCE>
あたり1枚のEPコスト
DISTANCE
。このMOVE
コマンドは、Scriptbotをマップ上で移動します。壁や他のScriptbotなどの障害物がある場合、GameMasterはScriptbotを可能な限り移動します。場合DISTANCE
Scriptbotの残りのEPよりも大きいが与えられ、そのEPがなくなるまで、ゲームマスターはScriptbotを移動します。DIRECTION
任意のコンパス方向であってもよいN
、E
、S
、またはW
。PUSH <DIRECTION> <DISTANCE>
あたり1枚のEPコスト
DISTANCE
。このPUSH
コマンドにより、Scriptbotは別のScriptbotを移動できます。コマンドを発行するScriptbotは、プッシュされるScriptbotのすぐ隣になければなりません。プッシュされるScriptbotをブロックするオブジェクトが存在しない場合、両方のScriptbotは指定された方向に移動します。DIRECTION
またDISTANCE
、MOVE
コマンドの場合と同じです。ATTACK <DIRECTION>
EPが1つかかります。この
ATTACK
コマンドは、発行するScriptbotのすぐ隣で、指定された方向にあるScriptbotに1ダメージを与えます。コマンドの場合DIRECTION
と同じMOVE
です。PASS
ターンを終了します。
サポートされている言語
これを合理的に保つために、次の言語を受け入れます。
- Java
- Node.js
- Python
- PHP
すぐに使用できる言語で一般的にパッケージ化されるライブラリに制限されます。コードを機能させるためにあいまいなライブラリを見つけさせないでください。
提出と審査
以下にScriptbotのソースコードを投稿して、クールな名前を付けてください!使用した言語のバージョンもリストしてください。すべてのScriptbotsは、おかしな点がないかどうか確認されますので、コメントして、コードをわかりにくくしないでください。
複数のエントリを送信できますが、同じエントリのバージョンではなく、完全に一意のエントリにしてください。たとえば、Zerg RushボットとGorilla Warfareボットをコーディングできます。それはいいです。Zerg Rush v1、Zerg Rush v2などを投稿しないでください。
11月7日にすべての回答を収集し、最初のレビューに合格した回答をトーナメントブラケットに追加します。チャンピオンは受け入れられた答えを受け取ります。理想的なブラケットを以下に示します。16個のエントリが存在する可能性は低いため、一部のブラケットは3つまたは2つのボットにさえなる可能性があります。ブラケットをできるだけ公平にするようにします。最初に送信されたボットには、(たとえば、1週間が必要な場合に)必要な支持が与えられます。
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Q&A
私はいくつかの詳細を見逃していると確信しているので、質問してください!
マップファイルは常に#記号で囲まれていると信頼できますか?そうでない場合、ボットがマップから歩き出そうとした場合はどうなりますか?-BrainSteel
はい。マップは常に#で区切られ、Scriptbotはこれらの範囲内で開始されます。
PUSHコマンドで指定された方向にボットが存在しない場合、コマンドはどのように機能しますか?-BrainSteel
GameMasterは何もせず、ゼロEPが使用され、Scriptbotが再度呼び出されます。
未使用のEPは蓄積されますか?-フェールサム
いいえ。各Scriptbotは10 EPでラウンド/ターンを開始します。費やしていないEPはすべて無駄になります。
私はそれを持っていると思いますが、ただ明確にするために:ボットAとBでは、イベントの順序はA @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP->攻撃...、またはA @ 10EP-> MOVE A @ 9EP->攻撃... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP->攻撃... MAP_UPDATE?つまり、1つのコントローラーボットクエリループ内のすべてのアクションはアトミックですか?もしそうなら、なぜループですか?完了すべきすべてのアクションを含む単一のファイルを返してみませんか?それ以外の場合、ボットは独自の状態ファイルを書き出して、マルチアクションシーケンスを追跡する必要があります。マップ/統計ファイルは、最初のアクションの前にのみ有効です。-COTO
2番目の例は近いですが、完全に正しくありません。ターン中、Scriptbotは、EPが使用されるまで繰り返し、または最大11回呼び出されます。マップおよび統計ファイルは、各呼び出しの前に更新されます。このループは、ボットが無効な出力を行う場合に役立ちます。GameMasterは無効な出力を処理し、再びボットを関与させ、ボットに間違いを修正する機会を与えます。
テスト用にGameMasterスクリプトをリリースしますか?-IchBinKeinBaum
GameMasterスクリプトはリリースされません。ボットの動作をテストするために、マップと統計ファイルを作成することをお勧めします。
robotAがrobotBをトラップにプッシュした場合、robotAはrobotBの現在のヘルスに等しい「ダメージを与えられた」ポイントと見なされますか?-マイク・スウィーニー
はい、それは良い考えです。ボットには、トラップにプッシュしたボットのヘルスに等しいダメージポイントが付与されます。
#
、Scriptbotはこれらの境界内で開始されます。
map
ファイルは常に#
シンボルで囲まれていると信頼できますか?そうでない場合、ボットがマップから歩き出そうとした場合はどうなりますか?