Stechec2 API

Bonjour, J'viens de lire chaque pièce de doc que j'ai trouvée dans le git de Stechec2, et j'en ai pas trouvé qui explique comment ajouter le support d'un nouveau langage. J'ai mal cherché ou faut se débrouiller sans doc? Et les generateurs, ils doivent obligatoirement être en Ruby ou peux choisir un autre langage?

Pour l'instant il n'y a pas de doc, il faut se débrouiller à partir de ceux qui existent déjà. Et oui, pour l'instant tout est en Ruby.

Y'a des gens qui ont déjà réussi à ajouter un langage là dessus? Parce que sans doc moi je comprend rien à l'architecture du truc xD

Oct. 21, 2019, 4:20 p.m. Edited on Oct. 21, 2019, 4:26 p.m.

Salut, tu peux regarder ici pour un exemple d'ajout de langage à Stechec2 :) le patch est assez isolé, ça devrait te montrer tout ce qu'il est nécessaire de rajouter aux bons endroits. Bonne chance !

Ok! Merci, je vais voir si je m'en sort xD Et sinon, pour les problèmes de qualifications, on peut bien répondre en Go? Parce que j'ai envoyé le challenge 1 et j'ai une erreur de compilation pour un truc qui compile très bien chez moi:

1
build cache is required, but could not be located: GOCACHE is not defined and neither $XDG_CACHE_HOME nor $HOME are defined

Bonjour,

Au sujet de Stechec2, j'ai continué de me casser la tête dessus, mais là je bute sur un truc et j'aimerais bien avoir une (petite?) clarification.

De ce que j'ai compris, il faut, à partir du fichier YAML décrivant le jeu, générer du code qui doit être compilé en Shared Object (.so) qui exporte quelques fonctions (init_game, play_turn etc. par exemple). Mais, le .so généré ne contient pas les fonctions qui modifient l'état du jeu, et il doit les récupérer dans un autre Shared Object (ou ailleurs je ne sais pas) au moment de l’exécution par Stechec2.

D'abord, c'est l'état actuel de ma compréhension de cette hydre sans documentation, et j'ai totalement pu passer à côté d'un truc. Ensuite, si mes hypothèses précédentes sont justes, comment on récupère les fonctions à appeler pour exécuter des actions/lire l'état du jeu?

BTW, si vous avez pas que ça à faire de vous faire embêter par quelqu'un qui s'est lancé dans un truc trop compliqué pour lui, je comprendrais parfaitement que ce message reste sans réponse.

Nov. 9, 2019, 1:55 p.m. Edited on Nov. 9, 2019, 1:58 p.m.

Salut !

Tu peux trouver davantage de documentation ici : https://stechec2.readthedocs.io/en/latest/index.html Ça ne détaille pas tant que cela le fonctionnement interne de stechec2 mais peux t'aider à comprendre comment nous développons un jeu chaque année avec. J'ai aussi récemment fait une conférence dans mon école qui pourrait répondre à tes questions, voici les slides : https://haltode.fr/upload/stechec2.pdf

Concernant tes questions, les candidats vont simplement make leur code avec le Makefile généré par stechec2, ce qui compilera le code et créera un champion.so (le shared object dont tu parles). Les fonctions du candidats, ainsi que les fonctions qui sont nécessaires aux orgas Prologin (notamment jour_touer) sont bien dans ce .so, et nous pouvons utiliser le champion ainsi, quel que soit le langage d'origine.

EDIT : pour ce qui est du YAML, il nous sert au début du développement du jeu, pour générer du code qui est commun d'une année à l'autre. Ensuite il faut compléter ce code à trou avec les véritables régles du jeu que l'on veut coder. Enfin, un wscript permet de compiler le jeu et créer une lib comme libprologin2019.so (ce .so est commun aux candidats, en revanche chaque candidat aura ses propres champions et donc des champion.so)

Merci beaucoup! J'vais regarder tout ça!

Par contre, y'a juste un truc que je n'arrive toujours pas à comprendre: d'où viennent les fonctions de base du jeu? Quand on regarde dans player_env/cxx on a un interface.hh qui contient des définitions de fonction, mais pas de code qui fasse vraiment les choses:

1
2
3
4
5
6
/// Cancels the last played action
extern "C" bool api_cancel();
static inline bool cancel()
{
    return api_cancel();
}

Ici, en l’occurrence, je n'arrive pas à trouver l’implémentation de api_cancel. C'est que cela est passé lors de l'appel du Makefile?

Les fonctions du jeu sont ... codées dans le repo du jeu ! (que ce soit l'exemple du tictactoe avec stechec2 ou encore les jeux prologin)

Quand tu installes les jeux avec ./waf.py configure --with-games=tonjeu --prefix=/home/user/stechec2-install il va créer et installer tout ce qui est binaire/librarie des jeux spécifiés.

Nov. 9, 2019, 2:40 p.m. Edited on Nov. 9, 2019, 2:40 p.m.

C'est bon! Je viens de débusquer /usr/lib/libtictactoe.so! Bah j'ai plus qu'a essayer de le binder maintenant >_<

Bah en fait non... Après pas mal de recherche, je bloque toujours >_<

Le Go ne peut import un .so que si c'est un package Go qui a été build en librairie, donc pas moyen d'import le lib*.so du jeu. J'ai rien compris et y'a une alternative, ou le seul moyen d'ajouter le go à stechec2 c'est de tout recoder?

Reply to the thread

You have to register or log in to post messages.