Diese Herausforderung ist beendet. Klicken Sie hier, um die Endergebnisse der Wettbewerber anzuzeigen
Bei dieser Herausforderung ist jeder Beitrag ein Bot. Jeder Bot sollte eine Javascript-Funktion sein. Bots kämpfen um den höchsten Goldwert. Gold kann gezüchtet oder durch das Töten anderer Bots verdient werden und wird verwendet, um Heilung, Angriffe, Abschirmung und Landwirtschaft zu verbessern.
Zielsetzung:
Bei einer Anzahl von Runden mit bis zu 1000 Runden (endet, wenn nur noch ein Bot übrig ist) gewinnt der Bot mit dem höchsten Gesamtwert (die Summe aller erhaltenen Goldstücke).
Wendet sich:
In jedem Zug wird jeder Bot, der lebt (> 0 HP), einmal ausgeführt. Es kann eine Bewegung zurückgeben, die eine der folgenden sein kann:
- Heilen: Gewinnt HP zurück
- Angriff: Entfernt HP von einem anderen Bot
- Schild: Verteidigt sich gegen spätere Angriffe
- Betäuben: Überspringt den nächsten Zug eines anderen Bots
- Farm: Verdient Gold auf Kosten von HP
- Upgrade: Machen Sie bestimmte Züge besser
Alle Bots geben ihren Zug zurück, bevor einer ausgeführt wird. Betäubung, Heilung, Angriff, Schild usw. wirken sich nicht auf Bots aus, die sich später in diesem Zug bewegen. Wenn zum Beispiel Bot A Bot B betäubt und Bot B in der Reihenfolge nach Bot A ist, bewegt sich Bot B immer noch später in derselben Runde und die Betäubung erfolgt in der nächsten Runde.
Kampf, Landwirtschaft und Aufwertung:
Jeder Bot hat eine maximale HP von 100 und eine zugewiesene UID zwischen 0 und 99. Diese UID ändert sich nach jeder Runde und zeigt an, wie Bots sich gegenseitig überwachen.
Heilung ist einer der einfachsten Schritte, bei dem eine HP-Menge hinzugefügt wird, die von der Stufe abhängt (ab 5 HP). Ein Bot kann nicht mehr als 100 HP heilen.
Das Angreifen eines Bots mit seiner UID ist ein weiterer möglicher Zug mit einem Grundschaden von 5 HP auf Stufe 0. Bots können auch betäubt werden, indem sie ihren nächsten Zug überspringen, der ebenfalls UIDs verwendet.
Bots haben zusätzliche Schild-HP, die keine Begrenzung haben. Dieser Schild HP absorbiert Schaden durch direkte Angriffe anderer Bots und wird durch Abschirmung hinzugefügt. Bei Stufe 0 erhöht die Abschirmung die HP um 5 Schilde.
Die Landwirtschaft erhält 5 Goldpunkte auf Stufe 0 zu einem Preis von 2 HP. Diese 2 HP können nicht abgeschirmt werden. Die einzige Verwendung für Gold (über das Gewinnen hinaus) ist das Aktualisieren von Zügen. Heilung, Angriff und Abschirmung haben einen Grundwert von 5 HP, und die Landwirtschaft beginnt bei 5 Gold. Jede dieser Bewegungen hat individuelle Stufen, die bei 0 beginnen. Diese Formeln bestimmen den Wert in HP oder Gold einer Bewegung, wobei L die Stufe ist:
- Heilung:
L + 5
- Angreifen:
1.25L + 5
- Abschirmung:
1.5L + 5
- Landwirtschaft:
2L + 5
Die Kosten für ein Upgrade eines Zuges sind für eine bestimmte Stufe gleich und werden dadurch bestimmt 2.5L² + 2.5L + 10
, wobei L die aktuelle Stufe ist. Ein Bot kann die Funktion cost(currentLevel)
als Abkürzung verwenden, um dies zu bestimmen.
Bots beginnen mit 25 Goldpunkten, sodass sie entweder zwei Züge auf Stufe 1 oder einen auf Stufe 2 aufrüsten können. Dieses anfängliche Gold zählt nicht für den Gesamtwert eines Bots. Wenn du einen Bot tötest, erhältst du die Hälfte seines Gesamtwerts an Gold, aufgerundet. Wenn zwei Bots in derselben Runde einen anderen töten, erhalten beide die Belohnung.
Input-Output:
Um mit der Steuerung zu kommunizieren, wird der Rückgabewert der Funktion zum Senden von Bewegungsinformationen verwendet. Eine davon sollte zurückgegeben werden:
- Heilen:
heal()
- Attacke:
attack(uid)
- Schild:
shield()
- Betäuben:
stun(uid)
- Bauernhof:
farm()
- Aktualisierung:
upgrade("heal" / "attack" / "shield" / "farm")
Um eine Runde zu überspringen (nichts zu tun), nichts zurückzugeben oder einen falschen Wert zurückzugeben.
Verwenden Sie, um die aktuelle Zugnummer (beginnt bei 1) abzurufen turn()
.
Zu den Argumenten Ihrer Funktion gehören Informationen zu Ihrem Bot, UIDs anderer Bots und Speicher zwischen den Runden. Das erste Argument ist ein Objekt mit den folgenden Eigenschaften: uid
, hp
, gold
, und shield
. Dies sind Kopien der aktuellen Informationen Ihres Bots. Es gibt auch ein verschachteltes Objekt levels
, mit den Pegelzahlen heal
, attack
, shield
, und farm
.
Das zweite Argument ist ein Shuffled Array aller alive Bots außer dein, als Objekt formatiert Eigenschaften enthält uid
, hp
(plus shield), worth
und attack
(Attack - Ebene). Das dritte Argument ist ein leeres Objekt, das für die Speicherung zwischen den Runden verwendet werden kann.
Beispiel Bots:
Dieser Bot wird so lange gezüchtet, bis er seinen Angriff auf Stufe 5 verbessern kann. Anschließend wird in jeder Runde ein zufälliger Bot angegriffen, bis er stirbt (oder gewinnt). Nicht sehr effektiv wegen mangelnder Heilung / Abschirmung.
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);
}
Dieser Bot hat zwei Modi: Offensiv und Defensiv. Es wird entweder einen zufälligen Bot betäuben oder heilen, wenn es sich im defensiven Modus befindet, und es wird entweder angreifen oder beschützen, wenn es sich im offensiven Modus befindet. Es wird versuchen, seine Angriffe nach Möglichkeit zu aktualisieren.
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();
}
Regeln:
- Standardschlupflöcher verboten
- Bots dürfen keine Variablen außerhalb ihres Gültigkeitsbereichs lesen, ändern oder hinzufügen, dürfen nicht versuchen zu schummeln und dürfen keine vom Controller definierten oder DOM-Funktionen aufrufen
- Der Rückgabewert muss falsch sein oder einer der obigen Funktionsausgänge
- Bots sollten nicht so konzipiert sein, dass sie auf einen bestimmten Bot abzielen, sondern können so konzipiert sein, dass sie gemeinsame Strategien nutzen
- Bots dürfen sich nicht selbst angreifen (entdeckt aufgrund eines Kommentars von @Ness)
- Bots müssen sich ausreichend von anderen Bots unterscheiden, damit sie als separate Einträge angesehen werden können
- Teaming ist jetzt nicht erlaubt
- Controller finden Sie hier
- Chatroom
Neues Controller-Debugging:
Mithilfe der Datei gold-battle-log.js
können Sie den Wert der debug
Eigenschaft eines Bots botData
auf 0 (keine Protokollierung), 1 (Protokollbewegungen) oder 2 (Protokollbewegungen, HP, Gold, Ebenen usw.) setzen.
Die Challenge endet am Freitag, den 9. August um 17:00 Uhr UTC
[closed]
am Ende wird es wahrscheinlich dazu führen, dass Gelegenheitszuschauer meine Herausforderung überspringen, da sie davon ausgehen, dass sie von geringer Qualität ist oder nicht zum Thema gehört.