Votre aimable voisin, Doctor Tree, vient de vous donner trois créatures magiques appelées Codémon. Il y a un tournoi de bataille dans la ville voisine de Colorville. Es-tu le meilleur, comme personne ne l'a jamais été?
Vue d'ensemble
C'est un tournoi de bataille. Chaque joueur contrôle une équipe de trois monstres et l'objectif est d'assommer l'autre équipe. Il y a 100 tours, avec des points attribués pour les victoires et les matchs nuls. L'équipe avec le plus de points gagne!
Monstres
Un codémon est une petite créature compliquée. Vous avez le choix entre cinq types (éléments), trois statistiques et trois cases de déplacement pour chacun.
Les types
Chaque Codémon se voit attribuer un type. Les cinq types sont Normal, Psychique, Feu, Eau et Herbe. Chacun a ses forces et ses faiblesses. Les dommages sont basés sur le tableau suivant:
Les chiffres sont des multiplicateurs de dégâts. Par exemple, l'eau attaquant le feu a un modificateur de 0,5 (demi-dégâts), alors que l'herbe attaquant le feu est doublée (2).
Statistiques
Chaque monstre a trois statistiques qui déterminent ses capacités de combat. L'attaque augmente les dégâts. La défense réduit les dégâts qu’elle subit. La vitesse lui permet de se déplacer avant ceux qui ont une vitesse inférieure.
Chaque monstre a une valeur de départ de 50 pour chaque statistique, et un maximum de 100. Lorsque vous créez vos monstres, vous pourrez attribuer 80 points de statistique supplémentaires (chacun). N'oubliez pas qu'aucune statistique individuelle ne peut dépasser 100. Vous pouvez donc disposer d'une distribution 100/80/50, 90/80/60 ou 65/65/100, mais utiliser une distribution 120/50/60 est illégal. Toute équipe avec des statistiques illégales est disqualifiée. Vous n'êtes pas obligé d'utiliser les 80 points, mais vous ne devriez probablement pas aller avec le minimum 50/50/50.
Vous pouvez également considérer HP comme une statistique, mais chaque Codémon a une valeur 100 HP non modifiable. Lorsque HP tombe à zéro, ils ne peuvent plus continuer à se battre. HP est rempli à 100 avant chaque bataille.
Se déplace
Chaque monstre connaît trois mouvements de combat. Les trois choisis doivent être distincts, donc pas de punch / punch / punch.
Il y a 15 coups, trois de chaque type. Chaque type a une attaque directe, une attaque plus faible avec un effet et un seul effet.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
fait référence au type de déménagement. power
c'est son pouvoir de frappe. uses
indique combien de fois il peut être utilisé par bataille ( -
illimité). usable
indique les types par lesquels il peut être utilisé (par exemple, Punch ne peut pas être attribué à un type Psychic, car il n'y en a pas P
). effect
montre quels effets les mouvements ont. Il y a 75% de chances que chaque effet fonctionne, sauf que l'effet est soigné, qui fonctionne toujours.
Pour les effets qui changent les statistiques d'un monstre, les effets peuvent être empilés . Par exemple, utiliser Weaken deux fois peut réduire l'attaque de votre adversaire à une efficacité de 0,64. Les effets qui ne changent pas les statistiques d'un monstre (Sleep, Burn, etc.) ne s'empilent pas .
Le sommeil endormit l'adversaire, avec 60% de chances de se réveiller au début de chaque tour. Aucune action ne sera entreprise par les monstres endormis.
Brûlure inflige des dégâts à l'adversaire 10 HP à la fin de chaque tour lorsqu'il est actif . Le poison fonctionne de la même manière, mais prend une quantité croissante à chaque tour. Au premier tour, c'est 5 et il gagne 5 à chaque tour par la suite. Donc, à partir du quatrième tour, cela fera 20 dégâts. Ce sont des dégâts plats, qui ne sont pas affectés par le type du monstre ou qui sont sujets à des bonus.
La confusion peut amener un monstre à s’attaquer lui-même au lieu de faire ce qui lui a été demandé. Cette attaque a une puissance de 10 et a 30% de chances d’arriver à un tour donné.
Pour être clair, les effets durent jusqu'à la fin du combat (sauf le sommeil, comme indiqué ci-dessus).
Les mouvements reçoivent également une augmentation de 20% de leur puissance s'ils sont utilisés par un monstre du type correspondant. Par exemple, un monstre Grass utilisant Vine est boosté, alors que Punch n'est pas utilisé.
Statistiques secrètes
Les statistiques et le type (mais pas les déplacements) de chaque monstre sont de notoriété publique. Vos adversaires seront en mesure de voir ce qu'ils combattent, afin de choisir la meilleure action. Cependant, il y a aussi des bonus disponibles qui sont cachés.
Plus précisément, toutes les deux batailles, vous recevrez un point statistique "bonus" pour chaque monstre de votre équipe. Les points sont attribués à tous les monstres, morts ou en vie, gagnants ou perdants. Vous pouvez l'affecter à l'une des trois statistiques que vous choisissez. Vous ne pouvez pas les empiler sur un seul monstre; chaque monstre en reçoit un à chaque fois. Ces points sont immunisés à la limite de 100. Puisqu'il y aura 100 rounds de combat, cela signifie que vous pouvez obtenir une seule statistique jusqu'à 149 si vous lui attribuez tous vos bonus. Encore une fois, l'adversaire ne verra que vos statistiques "de base", donc plus vous avancez dans le tournoi, plus leurs connaissances s'écartent de la vérité.
Bataille
La bataille se déroule entre des équipes de trois personnes, une active par équipe à la fois. Au début, il vous sera montré l'équipe de l'adversaire et invité à choisir quel monstre sera votre premier joueur "actif".
Après cela, les tournants ont lieu avec les étapes suivantes:
- Switch: les monstres sont obligatoires (le cas échéant)
- Choisissez l'action de combat
- Switch: tous les monstres optionnels (choisis comme action de combat) ont lieu
- Sleep Check: Chance de se réveiller
- Attaque 1: Si possible, le monstre le plus rapide utilise le coup choisi
- Attaque 2: Si possible, l'autre monstre utilise son coup sélectionné
- Effet des dégâts: Appliquez des dégâts de brûlure / poison aux monstres vivants
"Speedier" signifie le monstre avec la vitesse la plus élevée. Si les deux statistiques de vitesse sont identiques, il est choisi par tour de pièce PRNG à chaque tour.
À la fin de chaque tour où votre monstre actif meurt, il vous sera demandé de choisir un nouvel actif. Tu peux également choisir de changer de monstre actif en tant que mouvement pour n’importe quel tour (à condition d’avoir plus d’un vivant). Encore une fois, si vous changez de mouvement, vous ne ferez pas un mouvement de combat ce tour-ci.
Les monstres ne sont pas "traités" lorsqu'ils sont inactifs. Cela signifie qu'ils ne subissent aucune brûlure / poison, que les compteurs de poison ne s'accumulent pas, qu'ils ne se réveillent plus du sommeil, etc. Aucun effet n'est supprimé ou modifié lors du changement . Ce n'est pas cet autre jeu de combat de monstres. Si vous changez d'attaque avec l'attaque levée et brûlée, ils seront toujours là lorsque vous reviendrez.
Les dégâts sont causés que vous tuiez ou non votre adversaire actif. De cette façon, les membres des deux équipes peuvent mourir en un seul tour.
Lorsqu'une équipe est à court de monstres utilisables, elle perd. Si les deux équipes s'épuisent au même tour, c'est une égalité. Si la bataille dure 1000 tours, c'est une égalité.
La formule pour déterminer les dommages est la suivante:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
et effDefense
sont les statistiques efficaces pour les monstres. Une attaque efficace est obtenue en ajoutant Attack et Bonus Attack, puis en multipliant (par 0.8 ou 1.25) si des effets l’altèrent. N'oubliez pas que ces effets peuvent s'empiler.
Les dégâts ne peuvent être 0 que lorsque le modificateur de type est 0 (Normal <-> Psychique) ou que la puissance du mouvement est 0 (Guérison, Brûlure, etc.). Sinon, le minimum est appliqué à 1.
Tournoi
Les tournois durent 100 tours. À chaque tour, les équipes sont mélangées et appariées au hasard. S'il y a un nombre impair d'équipes, les restants reçoivent un bye (les scores sont à égalité). Gagner une bataille rapporte à l’équipe 2 points, les égalités valent 1 et les pertes ne sont rien. L'équipe avec le plus de points à la fin gagne!
Si les équipes sont à égalité, un tournoi avec seulement les équipes à égalité pour la première place aura lieu pour déterminer l'ordre de départage.
Protocole
Le contrôleur enverra à votre programme l’une des quatre commandes. Le premier caractère détermine le type de commande, suivi de données si nécessaire.
Votre programme acceptera la commande comme argument et répondra sur STDOUT dans la seconde qui suit. . Ne restez pas en vie en écoutant STDIN, il ne sera pas là. Chaque commande va engendrer un nouveau processus.
Vous pouvez écrire des données / états sur le disque. Placez tous les fichiers dans un sous-dossier portant le même nom que votre équipe. N'écrivez pas plus de 32 kilo-octets de données, sinon vous serez disqualifié. Les données persisteront entre les tours, mais seront effacées entre les tournois.
Les commandes
Données d'équipe
Ceci est envoyé une fois au début du tournoi pour inscrire votre équipe. Votre réponse devrait être constante , pas différente pour chaque tournoi.
Requete:
T
Réponse:
name|member0|member1|member2
name
est une chaîne avec le nom de votre équipe. Veuillez utiliser uniquement des caractères alphanumériques pour faciliter l'analyse.memberN
est une chaîne membre, donnant les détails de chaque monstre:
Chaîne membre:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Encore une fois, 'name' est une chaîne, cette fois avec le nom de ce monstre. typeid
est son type. Les identifiants de types sont dans l'ordre indiqué dans le tableau ci-dessus, avec Normal = 0 et Grass = 4.
Les trois champs suivants sont vos statistiques de base. Gardez à l'esprit les limites décrites dans la section des statistiques ci-dessus.
Les trois derniers sont les mouvements de votre monstre. Les identifiants sont indiqués dans le tableau ci-dessus.
Un exemple de réponse de données d'équipe peut ressembler à ceci:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Toute équipe qui renvoie ici des données vides, mal formatées ou illégales ne participera pas tant que cela n’aura pas été corrigé.
Choisissez actif
Ceci est envoyé au début de chaque bataille et lorsqu'un monstre meurt et doit être changé.
Requete:
C#battleState
battleState
montre l'état de la bataille en cours. Ours avec moi ici, c'est moche:
yourTeamState#theirTeamState
Où XteamState
ressemble:
name:activeSlot|member0state|member1state|member2state
activeSlot
montre quel monstre est actuellement actif (0-2). Les États membres se déclinent en deux versions. Si c'est votre équipe, cela donne des informations supplémentaires. Alors,
Votre membreXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Leur membreXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
est simplement un identifiant entier que vous pouvez utiliser pour garder une trace des monstres si vous n'aimez pas utiliser name
.
attack:defense:speed
sont vos statistiques de base .
poisonedturns
vous indique le nombre de tours pour lesquels vous avez été empoisonné.
moveCountX
indique le nombre d'utilisations qu'il vous reste pour chaque mouvement. Si 0, il ne peut pas être utilisé. Pour des mouvements illimités, ce sera négatif.
bonus(stat)
est le nombre de points bonus que vous avez attribués à chaque statistique.
effectid
est une liste d'effets de taille variable qui ont été appliqués à votre monstre. Il n'y aura pas de fin :
sur la chaîne, qu'il y ait ou non des effets actifs. S'il y a des effets empilés, ils apparaîtront sous forme d'effets multiples dans la liste.
Les identifiants d'effet sont:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Réponse:
memberSlot
La seule réponse requise est un nombre unique 0,1,2, indiquant le membre que vous voulez activer. Ce doit être un membre capable de se battre. Ne pas renvoyer 1
si le membre 1 est mort.
Action de combat
À chaque tour, vous devez décider quoi faire.
Requete:
A#battleState
Le battleState
voici exactement comme décrit ci-dessus.
Réponse:
Pour utiliser un déplacement, renvoyez l'emplacement dans lequel se trouve le déplacement. Par exemple, si j'ai affecté la perforation à l'emplacement 0, l'envoi 0
effectue la perforation.
Pour passer à un autre membre, envoyez la fente du membre plus dix . Donc, pour passer au membre 2, envoyez 12
.
Tout ce qui n'est pas dans [0,1,2,10,11,12] est considéré comme invalide et aucune action ne sera prise ce tour-ci.
Statistiques bonus
Toutes les deux batailles, vous recevez un point secret de bonus pour chaque membre de l'équipe.
Requete:
B#yourTeamState
Votre état d’équipe est le même que celui indiqué ci-dessus, ne me faites pas le répéter.
Réponse:
stat0:stat1:stat2
Votre réponse représentera quelle statistique augmenter pour chaque membre de l'équipe. L'attaque est 0, la défense est 1, la vitesse est 2.
Donc, pour augmenter la vitesse d'un membre, l'attaque du membre deux et la défense du membre trois, vous devez répondre par:
2:0:1
Manette
Le contrôleur peut être trouvé sur BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Il suffit de lancer tous les fichiers de classe compilés, les soumissions et players.conf dans un dossier et de les exécuter.
La classe principale du contrôleur est appelée Tournament
. L'utilisation est:
java Tournament [LOG_LEVEL]
Les niveaux de log de 0 à 4 donnent des informations croissantes. Le niveau 0 exécute le tournoi en silence et ne donne que les résultats, le niveau 3 commentant tour à tour. Le niveau 4 correspond à la sortie de débogage.
Vous pouvez ajouter des soumissions au tournoi en players.conf
ajoutant simplement la chaîne de ligne de commande nécessaire à l'exécution du programme, une par ligne. Les lignes commençant par #
sont des commentaires.
Dans votre message, incluez la commande que je devrai ajouter à ma players.conf
et à toutes les étapes de compilation (si nécessaire).
Une équipe factice est composée de tous les membres normaux ayant effectué les trois coups normaux. Ils choisissent des mouvements au hasard et ont des statistiques terribles. Amusez-vous à les battre.
Règles diverses
Vous ne pouvez pas lire ou écrire sur des ressources externes (sauf dans votre propre sous-dossier, jusqu'à 32 Ko comme indiqué ci-dessus).
Votre équipe doit participer au tournoi "à l'aveugle". Cela signifie que vous ne pouvez pas analyser la source d'autres personnes pour déterminer ce que fera une équipe / un monstre spécifique dans une situation donnée. Vous pouvez analyser les mouvements / statistiques de votre adversaire et garder une trace de l'avancement du tournoi, mais pas de codage en dur de cette information.
Ne pas interférer avec d'autres processus / soumissions. Ne pas les invoquer, utiliser la réflexion pour obtenir leurs données, etc. Ne jouez pas avec mon ordinateur. Juste ne l'essaie pas. Ceci est à ma discrétion. Les contrevenants peuvent être interdits d’entrée ultérieure.
Les candidats sont limités à un maximum de deux inscriptions. Si vous soumettez plus, je ne marquerai que les deux premiers. Si vous souhaitez en révoquer un, supprimez-le.
Les entrées peuvent ne pas exister uniquement pour soutenir d'autres entrées. En outre, vous ne pouvez pas essayer de disqualifier indirectement d’autres concurrents (par exemple, en utilisant un nom d’équipe de 27 millions de personnages pour les lecteurs DQ qui essaient de l’écrire sur le disque). Chaque soumission doit jouer pour gagner sur son propre mérite.
Votre programme peut générer au maximum un processus enfant à la fois (nombre total de descendants, pas de descendants directs). Les processus enfant et principal doivent tous deux être terminés directement après la sortie. Quoi qu'il en soit, assurez-vous de ne pas dépasser le délai d'attente.
Le tournoi aura lieu sur mon ordinateur sous Ubuntu avec un processeur Intel i7 3770K.
Résultats
Ce sont les résultats des joueurs actuels. C'est très serré entre les meilleurs prétendants, et je pense augmenter le nombre de tours à 500 (et ajuster l'espacement des points bonus pour correspondre). Des objections, des commentaires?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Résultats complets de lecture après lecture sur Google Drive
bye
pour un nombre inégal de concurrents et on s’assurerait que les paires de matches sont justes et équitablement réparties.
n^2
place de n
. Avec seulement les 7 concurrents et les 100 tours actuels, cela représente 2100 combats (contre 300 joueurs en l’état et 1500 avec 500 tours). Cela ne fait qu'empirer avec l'arrivée d'un plus grand nombre d'entrées. Je pourrais réduire le nombre de tours, mais j'hésite à le faire en raison de la variabilité inhérente (en ce qui concerne les statuts esp) et il est plus facile d'avoir un multiple de 50 (pour les points bonus).