GithubHelp home page GithubHelp logo

cow4's Introduction

Code of war 2015

====

Plateforme relative à l'édition 2015 de Code of War

Prérequis

Pour installer le serveur il vous faut nodejs et npm https://nodejs.org/

Installation

  • Installer le serveur
npm install codeofwar
  • Lancer le serveur
cd node_modules/codeofwar/
node js/release/Server.js

Vous pouvez choisir la position de départ des IA

node js/release/Server.js -p1_pos 8,8 -p2_pos 12,12 _c_pos 24,24

'-p1_pos' pour la position du joueur 1 '-p1_pos' pour la position du joueur 2 '-c_pos' pour la position du poulet

suivi des coordonnées x,y avec x et y compris entre 0 et 24.

  • Mettre à jour le serveur
npm update codeofwar

Une fois le serveur démarré, vous pouvez vous rendre sur http://monserveur:3000/

Interface de combat d'IA

Connectez vous sur http://monserveur:3000/

Cette page liste les IA connectées au serveur. Vous pouvez en selectionner deux et lancer un combat. Une nouvelle page affiche alors la partie entre les deux IA.

  • Lancer une IA demo

Nous fournissons une IA de test, pour la lancer executez la commande ci-dessous

node js/release/IADemoApp.js server

Vous pouvez indiquer sur quel serveur l'ia doit se connecter, par defaut c'est 'localhost'.

Les règles du jeu

Le but du jeu est de parcourir un labyrinthe pour attraper le premier le poulet. Le labyrinthe est figé. Les joueurs ont au maximum 200 tours pour l'attraper.

Tour de jeu

Les tours s'enchainent toujours dans le même ordre : joueur 1, joueur 2, puis coq.

Le temps de tour de jeu d'une IA est limité : GameConstants.TIMEOUT_DURATION:Int = 2*1000;

Tous les tours, un joueur gagne 1 point de mouvement (PM) qu'il peut conserver jusqu'à un maximum de 5 PM. Le coq ne peut pas cumuler ses PM.

Durant son tour, un joueur peut se déplacer vers une case voisine, et/ou ramasser un item, et/ou utiliser un item.

  • Il peut se déplacer tant qu'il a un nombre de PM suffisant.
  • Il peut utiliser autant d'item qu'il possède.
  • Il ne peut pas se déplacer vers une case déjà occupée (sauf par le coq).

Les items

La potion d'invisibilité

Utiliser une potion d'invisibilité va masquer la position du joueur au joueur adverse et au coq pendant 10 tours

Le piège

Utiliser un piège va le déposer sur la case courante. Si un joueur ou le coq tombent dedans, ils ne pourront plus bouger pendant 10 tours. Le joueur qui pose le piège peut donc tomber dedans !

Le parfum de poulette

Utiliser cet item va offrir au coq un bonus de 10 PM

Développer sa propre IA

Vous pouvez coder votre IA dans le langage de votre choix dans la mesure où il peut établir une connection socket.

Quelques SDK Open Source sont disponibles ici :

https://github.com/damoebius/Cow4_SDK

https://github.com/thearsenik/CoW4-Java8

Documentation

http://api.codeofwar.net/modules/Server.html

Se connecter au serveur

La connection au serveur se fait en socket sur le port 8127.

Les messages sont échangés en JSON sérializé en String et séparés par la chaine #end#

Une fois la connection avec le Serveur établie, il faut lui envoyer un messsage d'Authentification.

{
    "type":"authenticate",
    "name":"monIa",
    "avatar":"http://monsite/monavatar.jpg",
    "token":"yourtokenifone",
    "profil":1
}

Vous pouvez, ou non, préciser le token qui vous a été communiqué lors de votre inscription. Cela serait necessaire uniquement pour la phase de qualification.

Vous devez par contre choisir le profil de votre IA.

Les profils

  • le MASTER_OF_COINS (le nain) est immunisé contre les pièges : profil 1
  • le TECH_WIZARD (l'alchimiste) est immunisé contre la potion d'invisibilité, mais pas le poulet : profil 0
  • le HAND_OF_THE_KING (l'elfe) immunise le poulet contre le parfum de poulette : profil 2

Le serveur répondra avec un message renvoyant l'ID de l'IA ou un message d'erreur.

{
    "type":"id",
    "id":3254898715
}

Combat d'IA

Lorsque c'est à son tour de jouer, le server envoie à l'IA un message GetTurnOrder

{
    "type":"getTurnOrder",
    "data":{
        // GameMap Object
    }
}

Ce message contient toutes les informations relatives à la partie. L'IA doit répondre en moins d'une seconde, un message de type TurnResult

{
    "type":"turnResult",
    "ia":{
        // IAInfo Object, contient les info sur l'auteur du tour
    },
    "actions":[
        {} // TurnAction Object, une action à exécuter
    ]
}

Reportez vous à la documentation de l'API pour plus de détails

http://api.codeofwar.net/modules/Server.html

Le labyrinthe

À noter que la référence de la grille du labyrinthe se trouve en haut à gauche.

Alt la map

L'IA du poulet

A son premier tour, le poulet va foncer vers la case tout à gauche.

Alt premier coup

A partir de ce moment, l'ia va commencer par calculer le chemin le plus rapide pour atteindre ses deux adversaires

Alt scan ia

Ensuite elle va chercher la première intersection disponible sans emprunter une route vers une IA.

Alt goto intersection

Et elle y va. Arrivée là-bas elle analyse à nouveau la situation.

Où trouver de l'aide

Vous pouvez remonter des annomalies ou des demandes d'évolution ici : https://github.com/damoebius/Cow4/issues

Vous pouvez échanger avec la communauté sur notre groupe : https://groups.google.com/forum/#!forum/expantion-origin

Enfin vous pouvez contacter l'équipe à cette adresse : [email protected]

Se qualifier

Pour qualifier votre IA, connectez la sur le serveur qualif.codeofwar.net puis rendez vous sur la page http://qualif.codeofwar.net:3000/Qualif/montoken pour assister au match contre notre IA de qualif

En cas de victoire de votre IA un score lui est attribué. Plus la victoire est rapide, plus le score est important.

Les scores sont récupérables ici : http://qualif.codeofwar.net:3000/SCORES/GET

cow4's People

Contributors

ffleureau avatar kriyss avatar mathieudebit avatar wpottier avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cow4's Issues

Timeout sur un envoi de 1sec

Je lance le serveur avec les options suivantes :
js/release/Server.js -p1_pos 8,13 -p2_pos 2,18 -c_pos 4,17
Le p2 ne bouge pas, il envoie des ordres vides :
result : {"type":"turnResult","actions":[]}#end#
Le p1 envoie :

Turn 0 in time 1133ms
result : {"type":"turnResult","actions":[{"type":"move","target":1424090482567}]}#end#

Turn 1 in time 1001ms
order [Move to [x:9y:14]]
result : {"type":"turnResult","actions":[{"type":"move","target":1424090482568}]}#end#

Turn 2 in time 1000ms
order [Move to [x:10y:14]]
result : {"type":"turnResult","actions":[{"type":"move","target":1424090482569}]}#end#

Turn 3 in time 1001ms
order [Move to [x:10y:14]]
result : {"type":"turnResult","actions":[{"type":"move","target":1424090482569}]}#end#

Le délai entre les ordres est de 1sec environ et pourtant je me prend un TIMEOUT
1446159053120 : TIMEOUT : next ia turn

PS : quand je force p2 à mettre 1 sec à répondre j'ai plus de problème.

Manque des fichiers pour le serveur

Hello,

Depuis la mise a jour de ce weekend il y a deux petits soucis avec le serveur.

Il manque le fichier codeofwar/server/js/easeljs-0.7.1.min.js

Et le fichier codeofwar/server/img/gameMap.png est dans le dossier images au lieu de img.

Merci ;)

Cow

Est-ce que le poulet va bouger (surement vu qu'il y a 3 IA) ? Si oui, c'est prévu pour quand ?

Chaîne de fin de message

J'ai vu que pour distinguer la fin d'un message, tu cherche la chaîne #end#. Que se passe-t-il si mon IA s'appelle "Fri#end#s" ?
Je sais que l'exemple est un peu tiré par les cheveux mais pourquoi ne pas laisser les couches plus basses détecter la fin d'un message et se baser sur enlèvement end ou finish (en fonction des langages) ?
Ce serait dommage de voir des gens exploiter ça pour faire planter l'IA adverse.

Quelle est la durée d'invisibilité ?

Salut,

La version 1.0.4 a changé la durée d'invisibilité de 42 à 10 au niveau des constantes.
Par contre le README est resté à 42 tours.

Est-ce un oubli dans le README ou une erreur dans les constantes ?

Les items ne sont pas réinitialisés entre deux combats

Salut,

Entre deux combats, les items restent attachés au IA (sans déconnexion).
Ainsi quand j'ai lancer 4 fois mon IA (qui collecte juste deux items sans les utiliser), je me retrouve avec 3 items au début du 4ème lancement (cf image).

bug_nombre_item

Si je déconnecte puis reconnecte mon IA alors je repars bien avec les compteurs à zéros.

IA du coq incohérente?

Hello,
En effectuant quelques test, je constate que le coq un fois arrivé à une intersection, fait demi-tour et reviens droit sur mon joueur. Est-ce normal? D'après la description de l'IA du coq dans le README je dirais que non. D'autant que la deuxième IA se trouve dans la même direction que la première.

De plus je me retrouve dans un cas de fin de partie en erreur ou le serveur s'arrête car le coq essai de venir sur la case ou se trouve mon IA ("SheepIA : la case ciblée est déjà occupée"). ça me semble surprenant comme comportement.

capture d ecran 2015-10-07 a 14 42 54

souci de chemin relatif

Si je lance le serveur depuis un autre dossier que celui prévu :

node node_modules/codeofwar/js/release/Server.js

au lieu de :

cd node_modules/codeofwar/
node js/release/Server.js

j'obtien ce message d'erreur au lieux de la page souhaité.

Error: ENOENT, stat 'c:\[...]\coq-of-war\server\index.html'
   at Error (native) 

N'auriez-vous pas moyen de faciliter le lancement distant pour pouvoir lancer le serveur en même temps que le client pour les test ?

Lien vers la doc de l'api mort

Bonjour à tous,

Depuis la mise a jour du site, le lien vers la doc de l'api est mort : http://www.codeofwar.net/api/modules/Server.html

Je ne sais pas si elle a évolué depuis la derniere fois que j'y suis allé, mais je ne sais toujours pas quelle est le format pour envoyer des actions.
Serait-il possible d'ajouter au readme un exemple d'action ?

{
    "type":"turnResult",
    "ia":{},
    "actions":[
        {} // Exemple d'action
    ]
}

Merci beaucoup :)

Fin du jeu

Rebonjour, je suis bien parti pour vous embeter un max :)

Quand un des joueurs attrape le poulet, ou que le jeu se termine de manière generale, rien n'est envoyé aux IA pour leur dire ? J'ai l'impression qu'il ne se passe pas grand chose ...

Fonctionnement de l'API

Bonjour,
Je l'exemple donné dans le README avec le serveur en local avec curl et je n'arrive pas à m'authentifier.
On est d'accord que selon ce qui est expliqué

curl -H "Content-Type: application/json" -X POST -d '{"type":"authenticate","name":"monIa","avatar":"http://monsite/monavatar.jpg","token":"yourtokenifone","profil":1}#end#' http://localhost:8127

devrait me permettre de m'authentifier.

Pourtant j'ai aucune réponse du serveur et j'ai le message :

[socket server] new connection 
[client proxy] impossible de parser le message json : Unexpected token P

Autre question pourquoi séparer les messages par une chaine #end# ? Une seule requête suffit pour poster toute les infos, non ?

Poulet demarre un tour apres

Est-ce moi qui compte mal, ou le poulet ne fait rien au premier tour et commence à se deplacer au deuxieme ?

Position du poulet

Bonjour,

La position du poulet renvoyé par le serveur n'est pas bonne.
Par exemple les mouvements du poulet sur les 1er tour :

Renvoyé par le serveur Vus sur la carte
[x:12y:12] [x:12y:12]
[x:12y:12] [x:12y:12]
[x:10y:12] [x:11y:12]
[x:10y:12] [x:10y:12]
[x:9y:12] [x:19y:12]

J'ai noté le problème à chaque fois que le poulet est sur une intersection.

Les profils ne correspondent pas

Dans la doc : MASTER_OF_COINS, TECH_WIZARD et HAND_OF_THE_KING.
Mais sur le site : Nain, Alchimiste et Elfe.

J'imagine que ça ne change rien à leur "pouvoir", mais je signale tout de même.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.