- de crise e martírio
(essa é a legenda porque as legendas são legais)
Neste desafio do rei da colina em python (sim; você não precisa ir mais longe para saber que não pode enviar em java), você precisa criar um bot que jogue um jogo muito semelhante ao bem-vindo à masmorra
Regras do jogo
(note que este não é o jogo original)
Há um baralho, um conjunto de itens e algumas cartas de recompensa e cartas de morte. O HP base é 3. O baralho consiste em 13 cartas de monstro numeradas 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
para indicar seus pontos fortes.
Item da lista
Pacto demoníaco: Derrote o demônio (monstro de força 7) e o monstro abaixo dele na pilha de masmorras. - (apenas derrota o demônio se o demônio foi o último na masmorra)
Poção de Vida: Quando você cair para 0 PV, derrote o monstro e retorne para 3 PV.
Santo Graal: Derrote monstros com força par (no jogo, eles são mortos-vivos). Se um monstro de número par ocorrer após o pacto demoníaco ter sido usado, ele age primeiro, e você não terá uma morte extra-pacto após esse monstro.
Adaga Vorpal: Escolha um monstro antes de entrar na masmorra; esse tipo de monstro é derrotado. Se o monstro-alvo ocorrer após o pacto demoníaco ter sido usado, ele age primeiro, e você não terá uma morte extra-pacto após esse monstro.
Escudo: Adicione 3 ao HP total antes de fazer spelunking. Isso não afeta o uso da poção de saúde, que sempre retornará a saúde para 3.
Armadura: Adicione 5 ao HP total antes de fazer spelunking. Isso não afeta o uso da poção de saúde, que sempre retornará a saúde para 3.
Os cartões de recompensa são usados para rastrear quem foi bem-sucedido na masmorra. As cartas da morte rastreiam quem falhou na masmorra.
Fase de desenho
Antes do início da fase de desenho, todas as cartas de monstros são devolvidas ao baralho, ambos os jogadores são restaurados para 3 PV e todos os itens descartados são restaurados, de modo que exista um de cada.
O primeiro jogador decide se deve retirar uma carta do baralho, escondendo-a do outro jogador. Nesse caso, eles devem optar por colocá-lo no topo da pilha de masmorras ou descartá-lo junto com um item de sua escolha. Itens e cartões descartados ficarão indisponíveis para qualquer jogador até a próxima rodada.
Após o jogador um ter sua vez, o jogador dois faz o mesmo. Os jogadores decidem alternadamente se empatam e o que fazer com a carta comprada, até que alguém decida não comprar ou que um jogador pegue a última carta do baralho. Se um jogador decide não comprar ou comprar a última carta, a fase de compra termina e o outro jogador agora precisa entrar na masmorra e começar a spelunking.
Fase de Espeleologia
Se a adaga Vorpal não tiver sido descartada, o jogador de spelunking deve agora decidir em qual carta aplicá-la. Não há decisões ativas a serem tomadas para o restante desta fase.
O primeiro jogador pega a carta do topo; isto é, a última carta colocada na masmorra e ver o seu número de força. Se o pacto demoníaco estiver ativo no turno anterior, a carta retirada será descartada. Caso contrário, os itens do jogador serão verificados na ordem 'pacto demoníaco', 'santo graal', 'punhal vorpal'. O primeiro item não descartado, capaz de derrotar o cartão sorteado, será usado e o cartão descartado. Se o pacto demoníaco for usado, ele estará ativo para a próxima carta. O item usado não é descartado.
Se não houver um item aplicável disponível, a força da carta é subtraída da saúde do jogador. Se a saúde deles não for mais positiva, eles serão restaurados para 3 PV e a poção descartada, se disponível, caso contrário, o rastreamento da masmorra termina e eles recebem um cartão de morte.
Enquanto o jogador não é derrotado e há cartas restantes na masmorra, esse processo de retirada da carta do topo é repetido. Após derrotar com sucesso todas as cartas da masmorra, o rastejamento termina e o jogador spelunking recebe uma carta de recompensa.
Descrição completa do jogo
Um jogo consiste em uma série de rodadas, cada uma tendo uma fase de desenho e depois uma fase de spelunking. No final de cada rodada, um jogador coletará uma carta de morte ou uma recompensa; uma vez que um jogador acumule 5 dos dois tipos, o jogo termina. Se eles tiverem 5 cartas da morte, eles perderão o jogo. Se eles tiverem 5 cartões de recompensa, eles vencem. De qualquer maneira, o outro jogador recebe o resultado oposto. Se nenhum jogador tiver 5 cartas de um tipo, o jogo progride para a próxima rodada e o jogador que ficou em segundo na rodada anterior agora passa primeiro e vice-versa.
Detalhes KOTH
Cada bot jogará 400 jogos contra todos os outros bot de acordo com as regras descritas acima. Qual bot é o jogador um (e, portanto, o primeiro na primeira rodada) alterna cada jogo, e todo o estado é redefinido entre os jogos.
Aqui estão os itens novamente:
Pacto demoníaco: Derrote o demônio (monstro de força 7) e o monstro abaixo dele na pilha de masmorras. - (apenas derrota o demônio se o demônio foi o último na masmorra)
Poção de Vida: Quando você cair para 0 PV, derrote o monstro e retorne para 3 PV.
Santo Graal: Derrote monstros com força par (no jogo, eles são mortos-vivos). Se um monstro de número par ocorrer após o pacto demoníaco ter sido usado, ele age primeiro, e você não terá uma morte extra-pacto após esse monstro.
Adaga Vorpal: Escolha um monstro antes de entrar na masmorra; esse tipo de monstro é derrotado. Se o monstro-alvo ocorrer após o pacto demoníaco ter sido usado, ele age primeiro, e você não terá uma morte extra-pacto após esse monstro.
Escudo: Adicione 3 ao HP total antes de fazer spelunking. Isso não afeta o uso da poção de saúde, que sempre retornará a saúde para 3.
Armadura: Adicione 5 ao HP total antes de fazer spelunking. Isso não afeta o uso da poção de saúde, que sempre retornará a saúde para 3.
eo deck: 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
.
Você deve implementar uma classe bot que não usa variáveis de classe, derivadas da seguinte classe base:
class BasePlayer:
def start_turn(self, last_turn):
raise NotImplementedError
def play(self, card):
raise NotImplementedError
def vorpal_choice(self, last_turn):
raise NotImplementedError
def result(self, bot, result, dungeon, vorped):
raise NotImplementedError
Essa classe base mostra os métodos que sua classe precisa implementar e o número de argumentos usados por cada um.
Descrições de Argumentos do Método
last_turn
invorpal_choice
estart_turn
é um número inteiro ou um valor Nenhum. Um valor de 0 a 5 indica que o inimigo descartou a carta comprada junto com o item indicado por esse valor (veja a lista de itens acima). Um valor de 6 indica que o inimigo colocou a carta na masmorra. Um valor Nenhum indica que o bot está jogando primeiro nesta rodada (não é possível paravorpal_choice
). Emvorpal_choice
last_turn, é provável que seja 7, indicando que eles passaram nesse turno. A única circunstância em que não é 7 é quando o inimigo sacou a última carta.card
é um número que representa a força de uma das cartas do baralho, conforme enumerado acima.
Agora, os argumentos para result
são um pouco mais complexos:
bot
indica o bot que entrou na masmorra. 0 indica entrar na masmorra e 1 indica que o inimigo entrou na masmorra.result
indica o sucesso da viagem. False indica que o bot de spelunking foi bem-sucedido, enquanto True indica que eles falharam.dungeon
é uma lista de cartões / entradas representando os cartões que estavam na masmorra. A masmorra é encomendada por encomenda; a primeira carta colocada no calabouço é a primeira da lista e a última carta colocada no final. Você não receberá nenhuma informação sobre cartões descartados; eles são secretos do outro bot.vorped
é um número inteiro que representa ovorpal_choice
feito pelo bot de spelunking. Sebot==0
você já sabe disso, mas sebot==1
pode ser uma informação útil.
Serei sincero, não me lembro inteiramente por que fiz o resultado da vitória Falso, mas acho que foi uma boa ideia na época.
Retornar valores
start_turn
: Retorne 1 para comprar um cartão ou 0 para passar.play
: Retorne de 0 a 5 para descartar o item correspondente e a carta sacada, ou 6 para colocar a carta na masmorra (consistente com a entrada da última volta, exceto a passagem, que é feita durante a partida inicial).vorpal_choice
: Devolva o número da carta que você deseja eliminar com a adaga Vorpal (1 para eliminar 1s, 5 para eliminar 5s). Escolher um cartão inexistente mata você (8 é ilegal, 10 é ilegal, 0 é ilegal).result
: Você pode retornar qualquer coisa, porque esta é uma função de informação para atualizar os dados do bot.
Você pode conferir o controlador aqui
Esclarecimentos adicionais ou apenas repetindo alguns pequenos detalhes que você pode ter ignorado e talvez queira saber rapidamente:
Bots jogam 400 jogos entre si, bot.
Nenhuma variável de classe
Sem segmentação específica de outros bots
Não há como apoiar outros bots
Não há reflexões, como modificar o módulo aleatório ou outros bots.
6 bots no máximo (por pessoa), a menos que seja óbvio que todos os bots valem a pena incluir no KOTH (mas ainda assim provavelmente não fazem muitos bots, por favor)
Não existe um horário final específico para este KOTH, exceto o final da recompensa pelo que vale a pena. Apenas tente ganhar a cada vez.
Resultados até agora (desculpe por ser um tanto preguiçoso com esses caras: P)
1 GrailThief 2732 0.98
2 Steve 2399 0.86
3 DevilWorshipper 1854 0.66
4 RunAway 1336 0.48
5 BoringPlayer 1190 0.42
6 SlapAndFlap 783 0.28
7 DareDevilDumDum 750 0.27
8 RandomMandom 156 0.06
O ladrão "rouba" a recompensa. não de verdade, porque valeu a pena. Bom trabalho, Sleafar!
fonte
2. place the item in the dungeon. The item goes in the dungeon (duh)
parece ser um erro de digitação; não há um item mencionado nesse momento (você acabou de tirar uma carta do baralho de monstros). As regras provavelmente devem ser esclarecidas um pouco.or any information known only to one player.
estou mais esclarecido? a masmorra é revelada apenas no final, então as cartas compradas por um bot são conhecidas apenas por um bot. Como bônus, as cartas descartadas nunca são reveladas. se você pensa "oh bem, então há uma melhor estratégia probabilística", previsão adversário ainda é muito importante para isso também é inválidoRespostas:
GrailThief
Um rastreador de masmorra antigo e experiente. Ele sabe que a maioria dos outros espera que o Santo Graal os salve; portanto, ele garante que ele desapareça.
fonte
DevilWorshipper
Minha primeira tentativa de um desafio KOTH:
Essencialmente, nos livramos do pacto e da adaga vorpal, esperamos o demônio entrar no convés e passamos. A cada rodada que o oponente possa ter atraído o demônio, ela tem a% de chance de que a última carta que o oponente tenha sacado seja um demônio, para apenas assumir que ele já jogou o demônio.
Deixe-me saber se há algo que eu fiz de errado; Eu não mexo com python há algum tempo, este é o meu primeiro KOTH, e são 2 da manhã, então é provável que haja algo.
EDITAR% S:
Tirar a aleatoriedade acaba ajudando muito. Com a aleatoriedade, é muito idiota. Além disso, como dito nos comentários abaixo, ele tenta convocar o demônio ou dragão.
Steve
Steve tenta adivinhar se a masmorra é ou não letal. Se ele pensa que é, ele passa. Fora isso, tentei fazê-lo se livrar dos itens de maneira inteligente. Ele costumava ajustar seu limiar de PASS, dependendo se ele morria na masmorra ou se o oponente vivia, mas acabou ficando muito mais tonto, então eu me livrei disso.
Ele ainda não vence o GrailThief na minha máquina, mas pelo menos se aproxima.
fonte
SlapAndFlap
Primeira vez em KOTH, então me dê um tapa forte por erros.
Este simplório está sempre tentando remover todos os itens bons com monstros de baixa força, enquanto mantém itens poderosos e apenas força o oponente a jogar.
Ele vence o RunAway e o DumDum pelo menos: D
Meu outro bot na resposta excluída por algum tempo, eu preciso corrigi-lo amanhã.
fonte
RandomMandom
O bot aleatório obrigatório. Apropriadamente, ele perde muito com os bots padrão, o que é bom, porque significa que o jogo tem pelo menos alguma estratégia.
fonte
DareDevilDumDum
meio claro. nunca recua. a única maneira que você pode (consistentemente; o RunAway perde às vezes, mas ainda supera isso na maioria das vezes) perder para esse bot é se você não remover nenhum item ou for um super covarde. pense neste bot como um lembrete para remover itens, caso contrário, mesmo isso poderá ganhar.
E
Fugir
praticamente eles removem a armadura e fogem um pouco antes do fim. como daredevildumdum, ele não se lembra de nada, exceto pelo número de cartas no baralho (que não seriam lembradas no jogo real (você apenas verificaria)) e se alguém removeu a armadura (principalmente a mesma de antes) )
Também porque eu sou um pôster de desafio especial, esses bots não contam para a minha contagem de bots, porque são bots de exemplo que são burros
fonte
BoringPlayer
O oposto de RandomMandom, o BoringPlayer sempre faz as mesmas escolhas. O problema é que parece que ele é muito bem-sucedido para um bot tão simples. Ele marca 3800+ no meu teste local.
fonte