この挑戦は終わりました。競合他社の最終スコアを見るには、ここをクリックしてください
この課題では、各サブミッションは1つのボットです。各ボットはJavaScript関数でなければなりません。ボットは、金で最高の合計価値を獲得するために戦います。金は養殖するか、他のボットを殺すことで獲得することができ、治癒、攻撃、シールド、および養殖のアップグレードに使用されます。
目的:
最大1000ターン(ボットが1つだけ残った時点で終了)を含む多くのラウンドで、合計の価値が最も高いボット(取得したすべての金の合計)が勝者です。
ターン:
各ターンで、生きているすべてのボット(> 0 HP)が1回実行されます。次のいずれかの動きを返すことができます。
- 回復:HPを回復する
- 攻撃:別のボットからHPを削除します
- シールド:後の攻撃から守ります
- スタン:別のボットの次のターンをスキップします
- 農場:HPのコストでゴールドを獲得
- アップグレード:特定の動きを改善する
すべてのボットは、実行される前に移動を戻すため、スタン、ヒール、攻撃、シールドなどは、そのターンの後半に移動するボットには影響しません。たとえば、ボットAがボットBをスタンし、ボットBがターン順でボットAの後にある場合、ボットBは同じターンの後半に移動し、スタンは次のターンに発生します。
戦闘、農業、およびアップグレード:
各ボットの最大HPは100で、割り当てられたUIDは0〜99です。このUIDはラウンドごとに変化し、ボットがお互いを追跡する方法です。
ヒーリングは最も単純な動きの1つであり、レベルによって決まるHPの量を追加します(5 HPから開始)。ボットは100 HPを超えて回復することはできません。
UIDでボットを攻撃することもできます。レベル0で5 HPの基本ダメージがあります。ボットは、UIDを使用する次のターンをスキップしてスタンすることもできます。
ボットには追加のシールドHPがあり、制限はありません。このシールドHPは、他のボットからの直接攻撃によるダメージを吸収し、シールドによって追加されます。レベル0では、シールドは5シールドHPを追加します。
ファーミングでは、レベル0で5 HPのコストで5ゴールドを獲得します。この2 HPはシールドできません。ゴールドの唯一の用途は(勝ちを超えて)移動をアップグレードすることです。回復、攻撃、およびシールドの基本値は5 HPであり、農業は5ゴールドから始まります。これらの動きのそれぞれには、0から始まる個別のレベルがあります。これらの式は、HPまたは動きのゴールドの値を決定します(Lはレベルです)。
- 癒し:
L + 5
- 攻撃:
1.25L + 5
- シールド:
1.5L + 5
- 農業:
2L + 5
移動のアップグレードのコストは特定のレベルで同じであり、によって決定され2.5L² + 2.5L + 10
ます。ここで、Lは現在のレベルです。ボットは、cost(currentLevel)
これを決定するショートカットとして関数を使用できます。
ボットは25ゴールドから始まり、2移動をレベル1に、または1移動をレベル2にすばやくアップグレードできます。この開始ゴールドは、ボットの合計価値にはカウントされません。ボットを殺すと、その合計価値の半分が金になり、切り上げられます。2つのボットが同じターンに別のボットを殺すと、両方が報酬を受け取ります。
入出力:
コントローラと通信するために、関数の戻り値を使用して移動情報を送信します。次のいずれかが返されます。
- 癒し:
heal()
- 攻撃:
attack(uid)
- シールド:
shield()
- スタン:
stun(uid)
- ファーム:
farm()
- アップグレード:
upgrade("heal" / "attack" / "shield" / "farm")
ターンをスキップする(何もしない)、何も返さない、または偽の値を返す。
現在のターン番号(1から始まる)を取得するには、を使用しますturn()
。
関数の引数には、ボット、他のボットのUID、およびターン間ストレージに関する情報が含まれます。最初の引数は、次のプロパティを持つオブジェクトです:uid
、hp
、gold
、とshield
。これらは、ボットの現在の情報のコピーです。ネストされたオブジェクトがあるlevels
のレベル番号と、heal
、attack
、shield
、とfarm
。
2番目の引数は、自分以外のすべての生きているボットのシャッフルされた配列であり、プロパティuid
、hp
(およびシールド)、、worth
およびattack
(攻撃レベル)を含むオブジェクトとしてフォーマットされます。3番目の引数は、ターン間ストレージに使用できる空のオブジェクトです。
ボットの例:
このボットは、攻撃をレベル5にアップグレードできるようになるまでファーム化し、ターンごとにランダムボットを攻撃(または勝利)するまで攻撃します。ヒーリング/シールドがないため、あまり効果的ではありません。
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
このボットには、攻撃モードと防御モードの2つのモードがあります。防御モードではランダムボットを気絶させるか回復し、攻撃モードでは攻撃またはシールドします。可能な限り攻撃をアップグレードしようとします。
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
ルール:
- 禁止されている標準的な抜け穴
- ボットは、スコープ外の変数を読み取ったり、変更したり、追加したり、チートを試みたり、コントローラー定義またはDOM関数を呼び出したりすることはできません。
- 戻り値は偽であるか、上記の関数出力のいずれかでなければなりません
- ボットは特定のボットをターゲットとするように設計するべきではありませんが、一般的な戦略を活用するように設計することができます
- ボットは自分自身を攻撃することはできません(@Nessのコメントにより発見)
- ボットは、他のボットとは十分に異なっていなければならず、合理的に個別のエントリと見なすことができます
- チーム化は現在許可されていません
- コントローラーはここにあります
- チャットルーム
新しいコントローラーのデバッグ:
ファイルを使用して、ボットgold-battle-log.js
のdebug
プロパティの値botData
を0(ロギングなし)、1(ログの移動)、または2(ログの移動、hp、ゴールド、レベルなど)に設定できます。
チャレンジは8月9日金曜日の1700 UTCに終了します
[closed]
最後に、カジュアルな視聴者は私の挑戦を読むことをスキップする可能性があります。