Si seguís Twitter, supongo que much@s conozcáis lo que son los War Bots de Twitter, ya sean los de guerrillas entre zonas geográficas o entre gente, como cuando David Broncano mató a la Reina Letizia... Algún ejemplo es éste. En este caso se trata de una guerra entre usuari@s, no entre zonas geográficas.
Si aún así no se entiende, de un listado de gente inicial, se enfrenta a muerte una persona contra otra, quedando resultado una ganadora en combates ficticios y aleatorios. Se publica un tweet de que tal persona ha matado a esta otra persona, y por tanto, queda una persona menos viva en la lista, quedando al final solo un único superviviente. No hace falta estar conectado ni nada, simplemente apuntarse.
El servidor de Edoras, a través de la idea de @Sergiopio de llevarlo a cabo, directamente desarrollado por él y @Kikisito, mano a mano, de manera totalmente automatizada con Java POO y Twitter4J, y con el permiso expreso de @DanNyckel, organiza un...
La guerra tendrá lugar en la cuenta oficial de @EdorasMinecraft de Twitter, batiéndose en duelos una persona contra otra a cada hora desde las 12:00 horas a las 23:00 horas (horario peninsular español).
¡Os animo a participar en los tweets!
El resultado de un combate no estará influido por nada, es decir, es totalmente aleatorio.
¿Cuándo comenzará la guerra?
Se celebrarán 12 combates al día: Un combate exactamente a cada hora, desde las 12:00 horas hasta las 23:00 horas de cada día, ambas inclusive, a las horas en punto. (Horario peninsular español).
Puesto que hay exactamente 84 participantes, hemos decidido batir a duelo 12 parejas al día, durante 1 semana. Empezará a las 12:00 horas del Martes 16 de Julio de 2019, y finalizará el Lunes 22 a las 22:00 horas (83º combate), momento en el que se sabrá el ganador.
Listado oficial de los participantes (12 x 7 = 84)
¿Hay premios?
¡Cómo no! Claro.
Se entregarán premios al últim@ superviviente.
También se entregarán valiosos premios a l@s 3 mejores comentaristas de tweets, que tengan las mejores respuestas y más divertidas, con al menos 200.000 coronas por cabeza. Este premio es el único que pudiera depender directamente de vosotr@s mismos. Os animo a que en cada tweet comentéis algo allí, con GIF's, imágenes, o lo que se os pueda ocurrir, para que haya un poco de "chispa". En parte, la decisión estará influenciada por el número de RT's y Fav's, a cargo del jurado popular. Será divertido.
Si sabéis un poco de Java o de Programación Orientada a Objetos, os invito a que le echéis un vistazo al código y me digáis que os parece. Apenas estoy comenzando la carrera, y siempre son necesarias y vienen bien las opiniones para poder seguir mejorando.
La programación orientada a objetos aplicada sigue esta lógica:
Existe un objeto Persona que representa a cada jugador. Dispone de un atributo "nombre" de tipo String, y un "vivo" de tipo boolean. También se comenzó a implementar un int asesinatos por si había que programar probabilidades de kill según las que se llevara, que luego se implantó porque se prefirió totalmente aleatorio al poder darse preferencia de victoria al primer asesino.
Un objeto Comunidad reúne a los distintas instancias de Persona a través de una relación de asociación hecha en un vector de tipo Persona llamado vpersonas. Dispone de un método addPersona que se invocará al principio del método main, que sirve para rellenar la Comunidad. La lista de participantes se encuentra en una interfaz llamada "ValoresPredefinidos" donde se encuentran otras configuraciones.
Para realizar un combate, desde el main se invoca el método matar() de Comunidad que pide por parámetros 2 instancias de Persona vivas, donde se utili2 veces el método encontrarVivo() de Comunidad que escoge un vivo aleatorio comprobando el atributo de vivo a lo largo de todo el vector de vpersonas.
El método matar() le devuelve un String al main con un mensaje de muerte, además de enviarle al SendRcon que publica el mensaje en el chat del servidor proxy con los 2 parámetros de las personas.
La clase Main es la que reúne al método main, además de reunir a otros métodos con el objetivo de modularizar y abreviar.
En el main, se instancia la Comunidad, se rellena por paso por valor, y mediante 2 bucles (el de las i itera por días, y el de las j itera por combates al día), se acumula en una variable String pw, que será el tweet, concatenando la fecha (método por cierto en el que se usan aposta variables static para llevar el orden), y al final de darle forma al tweet, se actualiza el status de la cuenta de Twitter (es decir, se publica el tweet).
La primera vez que lo programé no caí en diferenciar una instancia persona de otra, porque al elegirse aleatoriamente, cabía la posibilidad de que fueran la misma y se produjera un suicidio. Ya está corregido, y es por ello que está implementado la opción de activar o desactivar suicidios.
Sergiopio programó toda la programación orientada a objetos: Persona, Comunidad, Main, teniendo en cuenta la interfaz. Se dejó programado para que se imprimiera en un fichero .txt a través de un PrintWriter.
Kikisito se encargó de llevar el programa a Twitter, con ayuda de Twitter Developer, obteniendo las credenciales, y Twitter4J. No están preestablecidas las horas fijas de los tweets, sino que a través de unos dlays (pausas) del programa main, se espera un tiempo (1h entre cada tweet de por el día, for j) (y 12h de descanso por la noche al terminar las 12 iteraciones de 1h después del for j, en el for i), y entonces publica el siguiente tweet. Es decir, en este caso, es necesario que una máquina esté corriendo el programa en todo lo que dura la guerra. Se ha procedido a usar una Raspberry Pi con el sistema de Raspbian, que ya te trae Eclipse de fábrica, aún no basado en Linux. Ambos disponíamos de una, en mi caso, Raspberry Pi 3B+. Y por tanto, el programa no se puede interrumpir. Y en el caso de interrumpirse por accidente, se tiene que corregir la lista de participantes de ValoresPredefinidos restando los muertos hasta el momento, volviendo a iniciar el programa. En el caso en el que se cortara en medio de la tarde, se puede seguir, pero hay que forzar otro parón/interrupción adrede a las 23:01 para resituarlo a las 12:00 y no mover el horario.
Por si acaso Twitter se cayera, como pasó el otro día, hay programado un sistema PrintWriter de un fichero .txt que a través de una variable String y static (para acumular los anteriores tweets), se van guardando todos los tweets en un listado, justo antes de ser publicado el tweet. Ha de ser antes porque si la publicación falla, quizás el código se interrumpa y tampoco se guardaría.
Absolutamente nadie, ni siquiera los programadores, conocemos quién va a morir, ni quién va a ganar, ya que los tweets se generan a tiempo real.
Es por ello que la imagen del listado actualizado de vivos que se publica en la cuenta de Twitter cada día es lo único no totalmente automatizado, ya que se tiene que actualizar cada día al no conocerlo. (Se podría haber programado, por ejemplo con Visual Basic .NET en Excel - Office, aunque desconocemos cómo).
Att. @Sergiopio y @Kikisito.