Battle Royale, os bots e twitter

Non son novidade ningunha os bots, especialmente de twitter que simulan batallas ou guerras entre territorios, persoas, etc. A cousa é que, ultimamente e especialmente durante o confinamento, puxeronse de moda certas contas que son obviamente xente, é dicir, que ademais de estar amañadas están enganando aos seus seguidores. Xa teño visto máis cousas deste estilo por aí, diferentes persoas que queren, por algunha razón, convencer á xente de que o seu bot/intelixencia artificial fai algo que obviamente foi feito por persoas.

Disclaimer

O pequeno script que fixen eu probablemente teña 300 anti-patterns e erros de orientación a obxectos, pero tampouco o fixen coa intención de que fora unha ferramenta de aprendizaxe, simplemente por entreterme e ver como de difícil era o tema. Se eu fora vós non o copiaría porque seguro que está a un esbirro de romper.

A premisa

A miña idea é ben simple: unha serie de personaxes que se deben enfrentar nunha batalla a morte ata que só quede un. As persoas, ademais, poderán facer diferentes accións, todas elas básicas iso si. O principal punto é que cada personaxe pode atopar unha serie de items ou obxectos, configurables, que lle permiten facer máis dano, ter máis vida, etc.

As personaxes e os items

Cada xogador ten tres estatísticas básicas susceptibles de ser modificadas polos obxectos que vaia atopando. Estas son ataque, defensa e vida e funcionan máis ou menos como cabería esperar. Para facerlle dano a outro ao ataque réstaselle a defensa do contrario e o resultado será o dano inflixido. Para manter o deseño simple, a persoa que ataca a outra ten prioridade, é dicir, fai dano primeiro. Desta forma evitamos empates que resulten en que acabe morrendo todo o mundo. Igual non é a maneira máis elegante ou máis interesante, pero vai co tema da aleatorieadade. Un xogador pode tan só atacar aos seus veciños. Cando mata a un deles, adquire á vez os veciños deste, facendo o seu terreo de influencia más grande. A orde na que as personaxes realizan as accións está aleatorizada de forma que non se beneficien a ningún.

As accións

Cada personaxe, pode facer as seguintes accións (con posibilidades configurables): esconderse, buscar items, descansar, atacar ou ser un torpe e non dar feito nada.

Esconderse:

O primeiro que fan todos os xogadores (en canto á orde de execución do código) e decidir se se esconde ou intentan facer algo de proveito. Esconderse permite que o xogador agochado non poida ser atacado por outros.

Buscar items:

Ao buscar items, unha personaxe pode atopar algo ou non. As posibilidades de atopar ou non items son configurables e o item que atope é aleatorio, dentro da lista dos dispoñibles.

Descansar:

Rexenera toda a vida.

Atacar:

Ataca a un veciño aleatoriamente. Pode fallar se o veciño ao que se decide atacar está agochado. Tamén cabe a posibilidade que o intento sexa fallido porque ambas personaxes enfrentadas non sexan capaces de matarse entre elas, xa que non hai segundos golpes, ou se matán nun só enfrentamento ou nada. Nese caso ambos salirán danados pero non morrerán. Tamén pode ocorrer que un personaxe tivera pensando atacar pero fose atacado por outro e sobrevivise. Nese caso este xogador recapacitará e abandonará o plan. Cabe destacar que no caso de que se fora producir un empate pero un dos “axentes” gañara pola prioridade, este rematará coa mínima vida, 1 punto, sinalizando que foi unha batalla moi apretada.

Non facer nada:

Cunha pequena posibilidade, tamén configurable, algún xogador será incapaz de facer nada en todo o día.

Engandindo xogadores

Para engadir personaxes basta con modificar o arquivo players.csv. Neste inclúense xa os nomes das columnas para facer máis simple o proceso. Basicamente cada xogador precisa dun nome, as estatísticas (ataque, defensa e vida) e unha lista de inimigos veciños. É importante ser consistente coa escritura dos nomes xa que é o que usa os script para recoñecer a cada xogador.

Engandindo items

Cada item necesita un nome, e ademais, necesita estatísticas que modificarán as que ten cada personaxe. Hai que dicir que pola forma na que está programado non soporta estatísticas negativas. Aínda que para defensa e ataque non tería problema (o ataque negativo curaría inimigos, non desexable pero pasable) o problema ven dado de recoller algo que mataría á personaxe.

O resultado

Para executar este scritp só é necesio python3 sen ningunha dependencia fóra dos paquetes estándar. Para executar bastaría con

 python3 simulate.py 

O resultado da simulación é un arquivo de texto, res.txt, con todos os eventos separados nos diferentes días de forma que sexa fácil de poñer en chíos ou darllo como entrada a un bot.

O código en si

Podedes botarlle unha ollada ao código en Github

Exemplo de batalla