Este desafio terminou. Para ver a pontuação final dos competidores, clique aqui
Nesse desafio, cada envio é um bot. Cada bot deve ser uma função Javascript. Bots lutarão para obter o maior valor total em ouro. O ouro pode ser cultivado ou ganho com a morte de outros bots e é usado para melhorar a cura, o ataque, a proteção e a agricultura.
Objetivo:
Em várias rodadas que contêm até 1000 turnos (termina quando resta apenas um bot), o bot com o valor total mais alto (a soma de todo o ouro obtido) é o vencedor.
Voltas:
Em cada turno, todo bot que estiver vivo (> 0 HP) será executado uma vez. Pode retornar uma movimentação, que pode ser uma das seguintes:
- Cura: Recupera HP
- Ataque: Remove HP de outro bot
- Escudo: Defende-se contra ataques posteriores
- Atordoar: Ignora o próximo turno de outro bot
- Fazenda: ganha ouro ao custo da HP
- Atualização: faça certas jogadas melhor
Todos os bots retornarão sua jogada antes que qualquer seja executado, portanto, atordoamento, cura, ataque, escudo etc. não afetarão nenhum bote em movimento mais tarde nesse turno. Por exemplo, se o Bot A atordoa o Bot B, e o Bot B está atrás do Bot A na ordem do turno, o Bot B ainda se moverá mais tarde nesse mesmo turno e o atordoamento ocorrerá no próximo turno.
Combate, agricultura e atualização:
Cada bot tem um HP máximo de 100 e um UID atribuído entre 0 e 99. Esse UID muda após cada rodada e é assim que os bots se controlam.
A cura é um dos movimentos mais simples, adicionando uma quantidade de HP determinada pelo seu nível (começa em 5 HP). Um bot não pode curar mais de 100 HP.
Atacar um bot por seu UID é outro movimento possível, com um dano base de 5 HP no nível 0. Os bots também podem ser atordoados, pulando o próximo turno, que também usa UIDs.
Bots possuem escudo adicional HP, que não tem limite. Este escudo HP absorve dano de ataques diretos de outros bots e é adicionado por blindagem. No nível 0, a blindagem adiciona 5 de HP de escudo.
A agricultura ganhará 5 de ouro no nível 0, ao custo de 2 PV. Este 2 HP não pode ser protegido. O único uso do ouro (além da vitória) é atualizar os movimentos. Cura, ataque e proteção têm um valor base de 5 HP, e a agricultura começa com 5 de ouro. Cada uma dessas jogadas possui níveis individuais, que começam em 0. Essas fórmulas determinarão o valor em HP ou ouro de uma jogada, onde L é o nível:
- Cura:
L + 5
- Atacante:
1.25L + 5
- Blindagem:
1.5L + 5
- Agricultura:
2L + 5
O custo da atualização de qualquer movimento é o mesmo para um determinado nível e é determinado por 2.5L² + 2.5L + 10
onde L é o nível atual. Um bot pode usar a função cost(currentLevel)
como um atalho para determinar isso.
Os bots começam com 25 de ouro, permitindo que eles atualizem rapidamente dois movimentos para o nível 1 ou um para o nível 2. Esse ouro inicial não conta para um valor total de bots. Matar um bot dá a você metade do seu valor total em ouro, arredondado para cima, e se dois bots matam outro no mesmo turno, ambos recebem a recompensa.
Entrada / Saída:
Para se comunicar com o controlador, o valor de retorno da função é usado para enviar informações de movimentação. Um destes deve ser retornado:
- Curar:
heal()
- Ataque:
attack(uid)
- Escudo:
shield()
- Atordoar:
stun(uid)
- Fazenda:
farm()
- Melhorar:
upgrade("heal" / "attack" / "shield" / "farm")
Para pular um turno (não fazer nada), não retornar nada ou retornar um valor falso.
Para obter o número da curva atual (começa em 1), use turn()
.
Os argumentos de sua função incluirão informações sobre seu bot, UIDs de outros bots e armazenamento entre turnos. O primeiro argumento é um objecto com as seguintes propriedades: uid
, hp
, gold
, e shield
. Estas são cópias das informações atuais do seu bot. Há também um objecto aninhada levels
, com os números de nível de heal
, attack
, shield
, e farm
.
O segundo argumento é um conjunto aleatório de todas as outras do que a sua bots vivos, formatado como um objecto contendo propriedades uid
, hp
(mais blindagem), worth
e attack
(nível de ataque). O terceiro argumento é um objeto vazio que pode ser usado para armazenamento entre turnos.
Bots de exemplo:
Este bot irá cultivar até que possa atualizar seu ataque para o nível 5, depois atacará um bot aleatório a cada turno até morrer (ou vencer). Não é muito eficaz devido à falta de cura / blindagem.
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);
}
Este bot tem dois modos: ofensivo e defensivo. Atordoará um bot aleatório ou curará quando estiver no modo defensivo, e atacará ou protegerá quando estiver no modo ofensivo. Ele tentará atualizar seus ataques sempre que possível.
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();
}
Regras:
- Lacunas padrão proibidas
- Os bots não podem ler, modificar ou adicionar variáveis fora do seu escopo, não podem tentar trapacear e não podem chamar nenhuma função DOM ou definida pelo controlador
- O valor de retorno deve ser falso, ou uma das funções da função acima
- Os bots não devem ser projetados para atingir um bot específico, mas podem ser projetados para tirar proveito de estratégias comuns
- Os bots podem não se atacar (descobertos devido a um comentário de @Ness)
- Os bots devem ser suficientemente diferentes dos outros bots para que possam ser considerados razoavelmente entradas separadas
- Agora, o agrupamento não é permitido
- O controlador pode ser encontrado aqui
- Sala de bate-papo
Nova depuração de controlador:
Usando o arquivo gold-battle-log.js
, você pode definir o valor da debug
propriedade de um bot botData
como 0 (sem registro), 1 (movimentos do log) ou 2 (movimentos do log, hp, ouro, níveis, etc.)
O desafio termina às 1700 UTC na sexta-feira, 9 de agosto
[closed]
no final, é provável que os espectadores casuais deixem de ler o meu desafio, pois eles assumem que é de baixa qualidade ou fora de tópico.