Version informatisée du jeu "Citadelles"

Overview

🏰

projet2-ps5-21-22-ps5-21-22-projet2-b : Projet Citadelles

Membres de l'Ă©quipe

  • Florian Latapie
  • LoĂŻc Le Bris
  • Marius Lesaulnier
  • Thomas Paul

Description du projet

  • Simulation d'une partie du jeu de sociĂ©tĂ© original Citadelles
  • Les parties se jouent automatiquement : 3 Ă  7 robots s'affrontent
  • Plusieurs stratĂ©gies de jeux sont appliquĂ©es par des robots

Comment lancer les main ?

  • Lancer les 1000 parties avec affichage des statistiques
mvn clean package
mvn exec:java

ou

mvn clean package
mvn exec:java@stats
  • Lancer une partie unique :
mvn clean package
mvn exec:java@oneGame

Ce qui a été fait avant le rush final

Ce qui a été réalisé

Les cartes :

  • âś… Les cartes quartier sont implĂ©mentĂ©es totalement. (cout de construction, couleur)
  • âś… Les cartes merveilles du jeu de base sont implĂ©mentĂ©s ainsi que leur pouvoir.
  • âś… L’action de la carte couronne est intĂ©grĂ©e au jeu (mais pas sous forme de carte) : le roi du tour prĂ©cĂ©dent est le premier Ă  choisir.
  • âś… Le paquet de cartes contient toutes les cartes du jeu de base
  • âś… ImpossibilitĂ© de construire 2 fois la mĂŞme carte

Personnages :

Tous les personnages ont été implémentés ainsi que leurs pouvoir soit :

  1. L’assassin (pouvoir : assassine un autre personnage)
  2. Le voleur (pouvoir : vole un autre personnage)
  3. Le magicien (pouvoir : Ă©change ses cartes avec un joueur ou Ă©change des cartes de sa main avec la pioche)
  4. Le roi (pouvoir : ses quartiers nobles rapportent et il devient automatiquement le premier joueur)
  5. L’évêque (pouvoir : ses quartiers religieux rapportent il est protégé contre le Condottière
  6. Le marchand (pouvoir : ses quartiers marchands rapportent il gagne une pièce d'or)
  7. L’architecte (pouvoir : il pioche deux cartes en plus et peut bâtir jusqu'à trois quartiers)
  8. Le condottiere (pouvoir : ses quartiers militaires rapportent il peut détruire un quartier)

Les stratégies

  • Une stratĂ©gie qui choisit des personnages, de piocher des pièces ou des cartes et de construire ou non des quartiers de manière alĂ©atoire.
  • Une stratĂ©gie qui construit un maximum de quartiers les moins chers possibles et qui choisit le personnage marchand en premier sinon il prend un personnage avec la couleur plus frĂ©quente parmi ses quartiers construits.

Le déroulement d’un tour

  • Choix du rĂ´le selon le rĂ´le du tour prĂ©cĂ©dent
  • On joue seulement si on n'a pas Ă©tĂ© tuĂ©
  • Choix entre une carte ou prendre 2 pièces
  • Recevoir les taxes avant ou après avoir construit
  • Construire un quartier
  • Appel au pouvoir du personnage (s’il en a un)
  • Utilisation des cartes merveilles s’il en a

Fin du jeu

Des points bonus sont attribués

  • âś… pour le premier Ă  avoir gagnĂ© (+4 pour celui qui gagne, +2 pour ceux qui gagnent au mĂŞme tour qu’au gagnant)
  • âś… pour n'importe quel joueur ayant construit les 5 couleurs de cartes (Rouge, Vert, Bleu, Jaune, Violet)
  • âś… pour les joueurs ayant construit les merveilles UniversitĂ© et Dracoport

Les joueurs sont triés en fonction de leur nombre de points

Le premier de ce tri est le gagnant du jeu

Ce qui n’a pas été réalisé

  • ❌ Le cas d’égalitĂ© des joueurs n’est pas gĂ©rĂ©, affichage des points en fin de partie sans classement.
  • ❌ Cartes Ă©cartĂ©es face visible au moment du choix des personnages en dĂ©but de tour : peu importe le nombre de joueurs, le 1er joueur qui choisit aura toujours un choix parmi les 8 cartes, le suivant parmi les 7 restantes, etc.

Fonctionnalité 1

Avant le rush final, le jeu affichait toutes les informations d’une sortie grâce à une classe d’entrée sortie nommée (IO). Seul le moteur de jeu (GameEngine) a le droit de faire appel à cette classe, cela permet d’avoir un code plus simple. Pour les logs, nous avons décidé d’étendre cette classe, en redéfinissant sa façon d’afficher et en ajoutant la lecture et écriture des fichiers CSV.

Nous avons expérimenté rapidement l’utilisation d’un Logger mais dans les contraintes de temps MVP nous avons préféré garder notre code testé et fonctionnel avec nos System.out.println(). L’avantage étant qu’il est possible d’afficher ou non l'entièreté des informations d’une partie pour chacune de nos classes main, simplement en ajoutant un argument de ligne de commande comme avec l’utilisation d’un Logger ou non. (main “oneGame” sans argument affiche tout et main “stats” avec argument affiche toutes les 1000 parties)

Fonctionnalité 2

pour cette fonctionnalité nous avons fait ce qui a été demandé :

  • Affichage du nom du bot avec sa proportion de parties gagnĂ©es et son nombre de points moyen sur le format suivant : <BotName> has won <#Win> games out of <#ofGames>, average: <#ofAveragePoints> points

  • les donnĂ©es brutes sont enregistrĂ©es au format CSV dans le dossier save/results.csv, le fichier contient dans l’ordre suivant : pour chaque partie : nom du bot, victoire(0 : non : 1 oui), nombre de points, nombre de points bonus, nombre de pièces, prix moyen des quartiers construits, nombre de cartes rouges construites, nombre de cartes vertes construites, nombre de cartes bleues construites, nombre de cartes jaunes construites, nombre de cartes grises construites, nombre de cartes violettes construites

  • les statistiques supplĂ©mentaires sont enregistrĂ©es Ă  cĂ´tĂ© du fichier results.csv, dans le fichier resultsComputed.txt

Les informations de fin de partie sont d’abord ajoutées ligne par ligne dans le fichier results.csv qui peut être vide ou déjà rempli avec des statistiques. Ce fichier est enfin lu est calculé afin d’afficher dans la console les informations nombre de victoires sur nombre de parties et score moyen, les statistiques supplémentaires sont enregistrées dans resultsComputed.txt.

Fonctionnalité 3

Les fonctionnalités du super robot basé sur les commentaires de Richard et d’Alphonse ont été réalisées, le robot fait donc des choix en prenant en compte les autres joueurs contrairement à nos autres stratégies. Nous avons déterminé plusieurs cas à travailler en se basant sur le commentaire de Richard. Ce dernier nous apprend qu’il faut pouvoir contrer son adversaire lorsque celui-ci s’apprête à gagner. Plusieurs cas sont déterminants pour gagner et tous sont liés au choix du personnage. Nous avons ainsi travaillé sur la manière de choisir le personnage en prenant en compte l’état du jeu et de nos adversaires. Évidemment, le choix du personnage amène un pouvoir à utiliser de telle façon à contrer son adversaire.

Pour concevoir le super robot, nous avons divisé les stratégies de choix de personnage et de construction de quartiers en deux. Cela nous permet d’avoir à la fois une stratégie pour contrer un joueur (Richard), mais aussi de pouvoir avoir une stratégie de construction d’un maximum de quartier (bâtisseur d’Alphonse).

Au niveau des statistiques, le robot qui adopte la stratégie de construire le plus possible gagne en majorité sur les mille parties, car il ne joue pas ce à quoi le super robot s'attend. Le super robot essaye de stopper sa progression en jouant agressivement, mais l’autre robot jouant de manière isolé, le super robot n’arrive pas à le bloquer. On a donc d’un côté un robot qui construit coûte que coûte et de l’autre un robot qui s’arrête de construire pour bloquer un adversaire sur le point de gagner. Cependant, toutes ses tentatives sont un échec et entraînent sa défaite.

You might also like...

This is not the latest version this is almost like 2.0, deobfuscated by OMA.

AresClient-Deobf This is the pvp client, which is closed source, not the open source anarchy one. Ares client devs are so special mentally they though

Aug 3, 2021

A MATLAB-like scientific scripting environment for Kotlin, a simpler Kotlin only version of KotlinLab

KotlinLab: Easy and effective MATLAB-like scientific programming with Kotlin and Java JShell Installation The installation of KotlinLab is very simple

Sep 28, 2022

The utility is designed to implement version control of APEX application pages.

The utility is designed to implement version control of APEX application pages.

Oracle APEX version control tool The utility is designed to implement version control of APEX application pages. How it works The developer exports th

Aug 25, 2022

Version-agnostic and package-agnostic interfaces used in Constellar. Zero strict dependencies, works as a submodule.

bridge Version-agnostic and package-agnostic interfaces used in Constellar. Zero strict dependencies, works as a submodule. Used for cross-compatibili

Feb 23, 2022

A version of xray that makes blocks partially transparent for mc 1.12.2

seethrough-xray a version of xray that makes blocks partially transparent feel free to skid this into ur client if you want to. if not then ok it does

Dec 2, 2022

My first proper GitHub project, I guess. Basically an automated version of the "Battle Royale" short series on Geo Facts' YouTube channel.

My first proper GitHub project, I guess. Basically an automated version of the

State-Royale Made by Pixer415, with some help from ThatOneCalculator This project needs your contributions. New modes/new features/typo fixes/suggesti

Jun 27, 2022

Oxygen-log4j-patcher - A tool that upgrades the log4j from an Oxygen installation to version 2.16

Oxygen XML Patch Tool for Apache Log4j vulnerability CVE-2021-44228, CVE-2021-45046 and CVE-2021-45105 This is a tool that updates the log4j version 2

Jan 10, 2022

Gitlet - A version control system for managing file versions, mirroring the features of Git

Gitlet - A version control system for managing file versions, mirroring the features of Git. Emphasized the serialization and manipulation of files to compress, access, and manage file content efficiently. Stressed the employment of appropriate data structures and file persistance.

Jan 4, 2022

Changelog-java-version - Eine Auflistung der Ă„nderungen in Java aus Sicht eines Entwicklers.

Changelog Java Versions Eine Auflistung der Änderungen in Java aus Sicht eines Entwicklers. Inhaltsverzeichnis Zugehörige Präsentation Homepage des Au

Jan 4, 2022

JVM version of Pact Enables consumer driven contract testing

JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

Dec 30, 2022

Log4Shell RCE exploit using a gadget class. Not dependent on an old JDK version to work.

Log4Shell RCE exploit using a gadget class. Not dependent on an old JDK version to work.

Jan 4, 2022

Continued version of Notorious by @K1llb0t

Continued version of Notorious by @K1llb0t

Notorious2.0 it supposed to be a leak but K1llb0t allow me to make it public and yes its better Note from K1llb0t_ Reason why i made this client is si

Dec 2, 2022

Another fully updated version of the Homework Planner.

The Homework Planner Description This is another updated version of the homework planner, which is a simple and user-friendly application that allows

Jan 17, 2022

There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution.

Intro There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution. Course resources: This

Dec 15, 2022

Desktop size version of my Open 6DOF Platform.

Desktop size version of my Open 6DOF Platform.

Mini-6DOF Desktop size version of my Open 6DOF Platform. This is an expansion on my initial learning that I did to get up to speed for the big version

Aug 26, 2022

A Java Mindustry mod template that works on Android and PC. The Kotlin version of this mod can be seen here.

Mindustry Java Mod Template A Java Mindustry mod template that works on Android and PC. The Kotlin version of this mod can be seen here. Building for

Jan 22, 2022

An easy to use api to interact with many versions of minecraft in a version independent environment.

Glass - API An easy to use api to interact with many versions of minecraft in a version independent environment. Setup Instructions should be relative

Jan 25, 2022

Portal system based on front and back end separation built by ruoyi separation version

Keington-Portal-Separate English 中文 Introduction Keington Portal Separate is an official website portal system built by Keington Information Technolog

Jan 30, 2022

Exeter client. A client created by Friendly, for Minecraft version 1.8

Exeter client. A client created by Friendly, for Minecraft version 1.8

Exeter client. A client created by Friendly, for Minecraft version 1.8. It has been released or leaked on that version.

Dec 31, 2022
Owner
Florian Latapie
Florian Latapie
Java (and original) version of Hamcrest

Java Hamcrest Licensed under BSD License. What is Hamcrest? Hamcrest is a library of matchers, which can be combined in to create flexible expressions

Hamcrest 2k Jan 5, 2023
JVM version of Pact Enables consumer driven contract testing

JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

Pact Foundation 961 Dec 30, 2022
Box86Launcher Is Modified Version Of ptitSeb/box86 Which Runs x86 Version Of WineHQ On Android Nativel

Box86Launcher Box86Launcher Is Modified Version Of ptitSeb/box86 Which Runs x86 Version Of WineHQ On Android Natively. Unlike ExaGear or Running Box86

AkiraYuki 61 Jan 3, 2023
Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2

Visit the official web site for more information. Central Dogma Central Dogma is an open-source, highly-available and version-controlled service confi

LINE 503 Dec 20, 2022
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
(cross-platform) Java Version Manager

jabba Java Version Manager inspired by nvm (Node.js). Written in Go. The goal is to provide unified pain-free experience of installing (and switching

Stanley Shyiko 2.5k Jan 9, 2023
Java version of LIBLINEAR

This is the Java version of LIBLINEAR. The project site of the original C++ version is located at http://www.csie.ntu.edu.tw/~cjlin/liblinear/ The ups

Benedikt Waldvogel 307 Dec 11, 2022
Java (and original) version of Hamcrest

Java Hamcrest Licensed under BSD License. What is Hamcrest? Hamcrest is a library of matchers, which can be combined in to create flexible expressions

Hamcrest 2k Jan 5, 2023
bedroom is a latest version fabric base for minecraft clients.

bedroom is a latest version fabric base for minecraft clients. this was made to serve as the base for beach house, i'm just making it public so others

beach house development 27 Dec 15, 2022
JGit An implementation of the Git version control system in pure Java.

JGit can be imported straight into Eclipse and built and tested from there. It can be built from the command line using Maven or Bazel. The CI builds use Maven and run on Jenkins.

Eclipse Foundation 1k Jul 5, 2021