introduction
Le jeu se déroule dans un petit monde avec différentes villes. Les dirigeants des villes se détestent et aimeraient diriger le monde. Les gens sont divisés en deux groupes, les guerriers et les petits-nés. Cependant, les lowborns peuvent devenir des guerriers. Vous êtes le dirigeant de trois de ces villes.
Gameplay
Lorsque le jeu commence, vous dirigez trois villes. Dans chaque ville, il y a 100 personnes. Vous devez les diviser en chevaliers et enfants bas-nés.
Ensuite, le jeu commence et se fait au tour par tour. Un tournant ressemble à ceci: "Produce" knights
=> execute command of first town
=> execute command of next town
(à répéter pour toutes les villes) => try a rebellion
.
- A chaque tour, votre programme sera invoqué pour chaque ville qui vous appartient . Vous pouvez soit attaquer une ville , soutenir une ville ou simplement attendre . Ces actions seront exécutées séquentiellement et non simultanément.
- Tous les trois tours, vous obtenez un chevalier pour 2 enfants nés de basse race (23 enfants nés de naissance => 11 chevaliers). La quantité de lowborns reste la même.
- Les chevaliers à l'intérieur d'une ville ont un bonus de défense de 1,2. Si vous êtes attaqué, vos chevaliers seront multipliés par ce nombre (par exemple
78 knights
, vous l’auriez93 knights
pendant l’attaque). Après l'attaque, les chevaliers supplémentaires seront enlevés (si vous82 knights
survivez, vous aurez toujours78 knights
). - Lors d'une attaque, chaque chevalier tue un ennemi avant de mourir. Par exemple:
30 knights
attaque100 knights
(sans bonus de défense) => 70 chevaliers survivent. - Vous pouvez capturer une ville en tuant tous les chevaliers qui s'y trouvent . Tous les lowborns vous appartiennent maintenant et vos chevaliers survivants sont en poste dans la ville. Au tour suivant, vous pourrez diriger cette ville en plus de toutes vos autres villes .
- Une fois la ville capturée, elle n’a plus de bonus de défense pendant 2 tours complets (car les portes sont brisées). Au troisième tour, les portes seront réparées.
- Pour éviter la rébellion des lowborns, vous avez besoin d'au moins la moitié du nombre de chevaliers qu'il y a de lowborn (23 dans la ville ont au moins 12 chevaliers dans la même ville). Sinon, les lowborns tueront tous les chevaliers et la ville deviendra "neutre" (sans chef, indiqué par un PlayerId
-1
). - Les villes neutres "produiront" des chevaliers, mais n'attaqueront ni ne soutiendront aucune autre ville.
Syntaxe
Le contrôleur vous fournit une entrée via des arguments de commande, votre programme doit sortir via stdout.
Sortie (préparation)
Avant le début du jeu, le contrôleur appelle votre soumission sans argument. Cela signifie que vous devez répartir vos 100 habitants (pour chaque ville) en chevaliers et enfants peu-nés. Vous devez produire KnightCount KnightCount KnightCount
, par exemple 95 80 95
.
Entrée
Round;YourPlayerId;YourTownId;PlayerId_TownId_knights_lowborns;PlayerId_TownId_knights_lowborns;...
Au premier tour, ce sera quelque chose comme
1;2;2;0_0_100_0;1_1_50_50;2_2_80_20
. Ici, vous voyez que c’est le premier tour, vous êtes le joueur 2 dans la ville 2. Vous avez 80 chevaliers et 20 enfants nains.
Plus tard dans le jeu, cela pourrait être quelque chose comme 20;2;1;0_0_100_0;2_1_30_50;2_2_40_20
. Vous êtes toujours le joueur 2 (cela ne change jamais), mais vous avez capturé la ville 1 (que vous contrôlez maintenant).
Sortie
A TownId NumberOfKnights
ou S TownId NumberOfKnights
ou W
(pour attendre).
Exemple: A 2 100
(attaquez la ville 2 avec 100 chevaliers) ou S 3 2
(soutenez la ville 3 avec 2 chevaliers).
Règles
- Les robots ne doivent pas être écrits pour battre ou soutenir d'autres robots.
- L'écriture dans des fichiers est autorisée. S'il vous plaît écrivez à " yoursubmissionname .txt", le dossier sera vidé avant le début d'une partie. Les autres ressources externes sont interdites.
- Votre soumission a 1 seconde pour répondre (par ville).
- Fournissez des commandes pour compiler et exécuter vos soumissions.
Gagnant
Le gagnant est celui qui compte le plus grand nombre de villes après 100 tours. Si un joueur s'empare de toutes les villes, le jeu s'arrête et il gagne. Si plusieurs joueurs ont le même nombre de villes, le nombre de chevaliers comptera, puis le nombre de mort-nés.
Manette
Vous pouvez trouver le contrôleur sur github. Il contient également 2 samplesbots, écrits en Java. Ouvrez-le dans Eclipse, placez les robots compilés dans le dossier racine et ajoutez une classe au programme de contrôle (comme les samplebots).
Résultats
Pour les résultats finaux, j'ai couru 10 jeux. C'est la moyenne:
Villes de joueurs 1. Libérateur 37,5 2. Sehtimianer 8.2 3. SuperProducer 5.4 4. Sleeper 1.4 5. Frankenstein 1.2 6. Beurre 0.8 (plus de chevaliers) 7. TheKing 0.8 (moins Knights) 8. Exode 0.6 9. Tortue 0.5 (plus de chevaliers) 10. AttackOn3 0.5 (moins les chevaliers) 11. Démocratie 0.3 12. CalculatedFail 0.2 13. Révolutionnaire 0.1
Vous pouvez lire un exemple de jeu ici: exemple de jeu sur github
la source
A
soutient une autre villeB
, le nombre donné de chevaliers est simplement transféré deA
àB
, après quoi ils sont contrôlés par le propriétaire deB
, n'est-ce pas?Réponses:
Python3, Liberator
Le seul but de ce bot est de libérer les personnes les plus communes du joug oppressant de la tyrannie.
la source
Python 2, le roi
Le roi dirige la ville la plus peuplée de son empire et exige que tous les chevaliers en surnombre lui soient envoyés depuis les autres villes sous son contrôle. Quand il aura assez de chevaliers, il attaquera une ville ennemie. Il n’est pas un roi très intelligent, n’a donc pas étudié l’histoire ni compris les conséquences de ses actes.
Ceci n'est pas testé avec le contrôleur ou d'autres bots.
la source
He is not a very smart King, so has not studied history or understands the consequences of his actions.
Javascript (Node), Empire
Commence fort pour effrayer les autres villes. Les villes tentent de travailler ensemble pour capturer les autres. Donne la priorité à la capture de villes avec beaucoup de bas-nés.
Run: noeud empire
la source
knights - lowborns/2
, mais si vous avez 30 chevaliers et 90 enfants à la naissance, cela ne fonctionne pas. S'il vous plaît réparer votregetAttackers()
fonction.DEBUG
drapeau dans le contrôleur qui le faisait avaler des erreurs même avec leGAME_MESSAGES
drapeau défini sur true. Je pense que je pourrais encore utiliser un peu de travail sur ma stratégie, en particulier avec Liberator, mais avec la dernière édition, je ne vois aucune erreur lorsque je lance mes tests avecDEBUG
onJava, Frankenstein
En essayant de trouver un moyen de détruire Liberator, une petite erreur a glissé dans mon code. Le code a ensuite commencé à détruire la concurrence. Après avoir ajouté Democracy et réarrangé les joueurs, cela a commencé à échouer. En étudiant le code, j'ai essayé de trouver sa stratégie. Par conséquent, le code suivant a été créé. Il a tendance à attaquer et à détruire le meilleur joueur. Une fois les meilleurs joueurs détruits, le reste est facilement détruit.
Voici le lecteur original:
la source
Java, tortue
Grâce à TheBestOne pour les méthodes de base, je viens de changer l’algorithme (j’espère que ça ira). Ce bot améliore fondamentalement sa ville la mieux défendue pour rivaliser avec la ville ennemie la plus dangereuse, tout en gardant suffisamment de chevaliers pour empêcher la rébellion dans ses autres villes.
Compiler:
javac Turtle.java
Courir:
java Turtle
la source
dangerousEnemyTown = dangerousEnemyTown.knightCount() >= town.knightCount() ? dangerousEnemyTown : town;
nondangerousEnemyTown = bestDefendedTown.knightCount() >= town.knightCount() ? bestDefendedTown : town;
Java 8, politicien
Agit comme un vrai politicien. Dommage que Crasher le tue encore.
Compiler:
javac Politician.java
Courir:
java Politician
la source
lie
méthode bien trop couranteJava 8, beurre
Se répand le plus uniformément possible. Étouffe une ville si la ville est suffisamment petite.
Compiler:
javac Butter.java
Courir:
java Butter
la source
Java, révolutionnaire
Un dernier, toujours basé sur les méthodes principales de TheBestOne. Ce bot tente d'inciter à la rébellion dans toutes les villes, car le joueur neutre est inoffensif, en tuant un certain nombre de chevaliers par rapport à la population de bas-nés. Bien sûr, il n'attaquera pas le joueur neutre.
Compiler:
javac Revolutionist.java
Courir:
java Revolutionist
la source
JAVA, Sehtimianer
Merci encore à TheBestOne, j’ai également copié ses méthodes principales; ) C’est la première fois que je joue à un jeu KingOfTheHill-CodeGame, alors j’espère avoir tout fait correctement. Je présente fièrement les Sehtimianers: D
Les Sehtimianers essaient d'être supérieurs tout au long du jeu et le terminent à la fin. J'espère que mon bot ne fera pas trop mal :)
la source
Java, Exodus
Encore une fois, basé sur les méthodes principales de TheBestOne. Ce bot migre de ville en ville une fois qu'il a atteint un certain niveau de population de chevaliers, sans distinction de son propriétaire, et répète ce processus jusqu'à ce qu'il ait converti le monde entier.
Compiler:
javac Exodus.java
Courir:
java Exodus
la source
Python 2, démocratie
Ce roi n'est pas roi. C'est quelque chose de moderne. C'est le roi des gens . C'est la démocratie. C'est lent, inefficace, et quand il fait quelque chose, il le fait mal.
Courez
python2 democracy.py
. Notez que la démocratie nécessite Python 2 .Edit: Correction d'un bug sur l'impression de l'objet de la ville
la source
<__main__.Town
.C ++ 11, CalculatedFail
Après avoir essayé quelques petites choses avec le petit Java que je connais et que je n’étais pas tout à fait capable de réaliser ce que je voulais, j’ai choisi de le réécrire en C ++ et d’ajouter la gestion des fichiers. Le problème était, mon C ++ est assez rouillé et pas beaucoup mieux, donc certaines parties sont tressées et juste la première solution dans google, donc pas vraiment de code de qualité ...
Malgré tout, j’ai pu obtenir au moins un résultat qui ne laisse pas vraiment tomber, il gagne au moins de temps en temps, mais je ne peux pas le tester à la perfection, car je ne suis pas en mesure d’exécuter toutes les autres soumissions sur ce PC. Je vais probablement réécrire le ciblage complètement et l'ajouter à une autre réponse plus tard aujourd'hui ou demain.
compiler avec:
g++ -std=c++11 CalculatedFail.cpp -o CalculatedFail.exe
google dit que sur linux, il s'agit de CalculatedFail.out au lieu du fichier .exe, mais je ne peux pas le tester.
et courir
CalculatedFail.exe
comme il utilise un fichier pour vérifier le bonus de def, lancer le jeu simultanément plusieurs fois peut entraîner des erreurs ...
espérons que cela fonctionne correctement sans trop de problèmes
la source
Java, Illuminati
J'ai lu ceci et je savais que je ne pourrais jamais proposer de stratégie viable. J'ai donc décidé de jouer le lézard lamentablement sous-représenté - des gens qui pourraient nous gouverner ou non. Au lieu de se battre avec les autres robots, celui-ci les oblige à coopérer, pour les abandonner à la fin. En fait, ce bot ne laisse aucun dommage permanent.
la source
Java, SuperProducer
Il est tard dans ma région du monde et je n’ai donc pas assez de temps pour développer mon exposé. Je prévois de préciser comment cela fonctionnera plus tard.
Les performances du bot semblent fortement dépendantes de l'ordre de départ, il gagne parfois ...
J'ai eu quelques idées pour aider à augmenter les tours gagnants ... mais tardif: P
Compiler: javac SuperProducer.java
Exécuter: java moogiesoft.SuperProducer
la source
C ++ 11, attackOn3
le code lui-même n'est pas devenu beaucoup plus joli, mais maintenant j'utilise un autre moyen de cibler, j'ajouterai éventuellement des commentaires au code plus tard.
semble bien faire avec les bots que je suis en train de courir, même s'il reste difficile face à Frankenstein et Liberator et que je ne peux pas gagner systématiquement.
compiler avec:
g++ -std=c++11 attackOn3.cpp -o attackOn3.exe
et courir
attackOn3.exe
la source