Available nodes

 Principe du jeu

Le jeu Hey that's my fish ! ou Pingouin en français est un jeu à plusieurs joueurs dans lequel des pingouins tentent de maximiser les poissons qu'ils peuvent attraper au cours d'une partie.
Le plateau de jeu est constitué d'un ensemble de tuiles contenant chacune entre un et trois poissons. L'ensemble des tuiles forme un graphe où chaque sommet est une tuile. L'ensemble des arêtes incidentes à une tuile est partitionné en paires d'arêtes, et deux arêtes dans une paire sont dites opposées en ce sommet. Une ligne droite est suite d'arêtes telles que deux arêtes consécutives sont opposées en un sommet.
Les pingouins sont placés par les joueurs sur des tuiles distinctes en début de partie. A chaque tour, un joueur peut déplacer l'un de ses pingouins depuis la tuile où il se trouve, de n'importe quelle distance en ligne droite jusqu'à heurter un obstacle. Une fois le pingouin déplacé, le joueur retire la case de départ du pingouin, comptabilise les poissons dessus, et on passe au joueur suivant. Le joueur ayant le plus de poissons en fin de partie est le vainqueur.
La totalité des règles du jeu est disponible dans le document suivant.
Le but du projet consiste à réaliser en C le code nécessaire pour pouvoir jouer à Pingouins avec un nombre quelconque de joueurs, sur un graphe aussi générique que possible. Ce code se découpera en une partie appelée serveur, qui gérera le plateau de jeu et vérifiera l'application des règles, et une partie appelée client qui correspondra à une stratégie mise en place par un joueur.

 Objectifs du projet

  • Définition d'une interface

    La première partie du projet consiste à définir une interface de programmation pour communiquer entre le client et le serveur. Il est laissé toute latitude pour les choix faits dans cette interface, mais sa réalisation devra avoir un caractère contraignant pour le reste du projet. Elle sera évaluée par l'encadrant de l'équipe. Au terme de cette évaluation, le projet continuera sur les bases de cette interface.
    Cette interface sera à rendre, pour chaque équipe, à son encadrant pour la séance de projet de la semaine 13 (24 ou 27 mars).
  • Implémentation d'une structure de données pour les graphes

    Afin de pouvoir jouer sur des graphes génériques, il s'agira de concevoir et d'implémenter un type abstrait de données permettant de les représenter. Il est attendu que ce type abstrait soit suffisamment expressif pour représenter des grilles carrées, triangulaires et hexagonales. Il est envisageable de jouer le jeu sur des pavages apériodiques comme les pavages de Penrose. Il est entendu qu'une telle structure de données doit être vérifiée par un ensemble de tests unitaires.
  • Implémentation d'un serveur de jeu

    Il s'agira d'implémenter le code permettant au serveur d'accueillir des clients, de démarrer une partie, d'organiser les tours de jeu, de vérifier l'application des règles et de compter les points à la fin de la partie.
  • Implémentation d'une stratégie cliente

    Il s'agira d'implémenter au moins deux stratégies pour jouer à Pingouins. Le choix de représentation des stratégies doit être commun entre les équipes ayant un même encadrant.
    Cette représentation sera à rendre, pour chaque équipe, à son encadrant pour la séance de projet de la semaine 13 (24 ou 27 mars).
  • Chargement dynamique

    Les stratégies devront pouvoir être chargés de manière dynamique, en utilisant les fonctions de la famille dlopen, définies dans dlfcn.h. Il sera possible de s'inspirer des instructions données ici.

 Recommandations

  • Le nombre de joueurs n'est pas fixé a priori dans les règles.
  • Dans tous les cas, il est recommandé de faire le plus simple possible, avant d'atteindre le compliqué.
  • L'accent doit être mis sur les tests. Des règles de compilation doivent être mises en place pour faire ces tests de manière automatisée.
  • A encadrant donné, tous les serveurs et les clients doivent être interchangeables.