From dc9927e478c40e85d7e4b66486634e4a354e9e95 Mon Sep 17 00:00:00 2001 From: Louis DUFOUR Date: Mon, 15 Jan 2024 12:16:01 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 216 +++++++----------------------------------------------- 1 file changed, 26 insertions(+), 190 deletions(-) diff --git a/README.md b/README.md index 2c8735f..b2d9291 100644 --- a/README.md +++ b/README.md @@ -1,196 +1,32 @@ -**Home** | [Semaine 1](./subject_week1.md) - -# Introduction +# Projet DouShouQi en Swift -- [Introduction](#introduction) -- [Dou Shou Qi](#dou-shou-qi) - - [**But du jeu** :](#but-du-jeu-) - - [**Matériel** :](#matériel-) - - [Pouvoir des animaux](#pouvoir-des-animaux) - - [Déroulement du jeu](#déroulement-du-jeu) -- [Déroulement des TP](#déroulement-des-tp) -- [Évaluation](#évaluation) -- [Structure de l'application](#structure-de-lapplication) -- [Énoncés](#énoncés) +## Introduction +Le projet DouShouQi en Swift est une implémentation console du jeu de plateau DouShouQi. +## Prérequis +- **Système d'exploitation**: macOS Ventura 13.1 +- **Logiciel**: Xcode version 14.2 -Cette introduction explique comment cette ressource va se dérouler, ce qu'il y aura à réaliser, et comment vous serez évaluées et évalués. -Pour découvrir le langage **Swift**, nous proposons de développer le modèle d'un jeu traditionnel chinois appelé le **Dou Shou Qi** dont les origines remontraient au Vème siècle. - -# Dou Shou Qi -## **But du jeu** : -- occuper la tanière de son adversaire -- ou manger toutes ses pièces -- ou l'empêcher de bouger. -## **Matériel** : -Chaque joueur possède 8 pions numérotés (pour représenter leur force) et représentant des animaux : **Rat** 🐭 (1), **Chat** 🐱 (2), **Chien** 🐶 (3), **Loup** 🐺 (4), **Léopard** 🐆 (5), **Tigre** 🐯 (6), **Lion** 🦁 (7) et **Éléphant** 🐘 (8). - -Le plateau de jeu est une grille à deux dimensions de 10 lignes et 7 colonnes. Il est fait de 4 types de cases : -- **Jungle** 🌿 : aucune particularité -- **Lac** 💧 : interdit à tous les animaux sauf le **Rat** ; le **Lion** et le **Tigre** peuvent sauter par-dessus. -- **Tanière** 🪹 : un joueur ne peut pas se déplacer sur sa propre **Tanière** et doit aller sur la **Tanière** de l'adversaire pour gagner -- **Piège** 🪤 : un pion sur un piège (quel que soit le côté du plateau) a une force de **0**. - -La grille originale ressemble à : - -🌿 🌿 🪤 🪹 🪤 🌿 🌿 -🌿 🌿 🌿 🪤 🌿 🌿 🌿 -🌿 🌿 🌿 🌿 🌿 🌿 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 🌿 🌿 🌿 🌿 🌿 🌿 -🌿 🌿 🌿 🪤 🌿 🌿 🌿 -🌿 🌿 🪤 🪹 🪤 🌿 🌿 -(la tanière du haut est celle du joueur 1, celle du bas du joueur 2). - -De plus, certaines cases sont les cases de départ des pions : -🦁 🌿 🪤 🪹 🪤 🌿 🐯 -🌿 🐶 🌿 🪤 🌿 🐱 🌿 -🐭 🌿 🐆 🌿 🐺 🌿 🐘 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🌿 💧 💧 🌿 💧 💧 🌿 -🐘 🌿 🐺 🌿 🐆 🌿 🐭 -🌿 🐱 🌿 🪤 🌿 🐶 🌿 -🐯 🌿 🪤 🪹 🪤 🌿 🦁 -(où les animaux du haut sont ceux du joueur 1, et ceux du bas du joueur 2). - -## Pouvoir des animaux -- Tous les animaux peuvent _manger_ un animal de force égale ou inférieure, avec les exceptions suivantes : - - l'éléphant ne peut pas _manger_ le rat, - - le rat peut _manger_ l'éléphant, - - on ne peut pas _manger_ son propre animal. -- Les animaux ne peuvent se déplacer que sur une case adjacente (même ligne ou même colonne) -- Les animaux ne peuvent pas se déplacer sur leur propre **Tanière** -- Les animaux ne peuvent pas se déplacer dans l'eau (sauf le **Rat**). Attention, le **Rat** ne peut pas sortir de l'eau pour attaquer l'**éléphant** adverse, mais il peut le faire pour attaquer le **rat** adverse. -- Le **lion** et le **tigre** peuvent sauter par-dessus les lacs (en restant sur la même ligne ou sur la même colonne), **sauf** si un **rat** est dans le lac, sur la trajectoire du saut. - -## Déroulement du jeu -Chaque joueur doit à son tour de jeu déplacer l'un de ses animaux. - -# Déroulement des TP - -L'objectif des TP est de réaliser cette application en 5 TP durant 6 semaines. -Les énoncés seront donnés en début de semaine ainsi qu'une liste de thème à travailler pour bien réussir le TP. -La sixième semaine sert de tampon, pour rattraper le retard accumulé pendant les semaines précédentes. -Pour chacune des 5 premières semaines, il est conseillé de : -- avant le TP : - - travailler les thèmes donnés en avance, via : - - la [documentation officielle du langage Swift](https://www.swift.org/documentation/) - - le [livre Apple sur le langage Swift](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/) - - les [ressources de cours sur code first](https://codefirst.iut.uca.fr/documentation/mchCoursDocusaurus/docusaurus/Swift/) - - profiter du résumé en cours et poser des questions sur les parties non comprises -- pendant le TP : - - réaliser au maximum les tâches demandées - - et les faire valider par l'enseignant pour obtenir validation de l'acquisition des compétences -- après le TP : - - faire le point sur le "reste à faire" et s'organiser pour la semaine suivante - - faire le point sur les acquis que vous n'avez pas fait valider pour solliciter l'enseignant à la séance suivante - -Pour la sixième semaine : -- profiter du dernier cours pour poser les dernières questions techniques -- profiter du dernier TP pour rattraper le retard et faire valider ses derniers acquis non validés par l'enseignant. - -> Note : -> Les ressources de cours sur code first ne remplacent pas la documentation officielle. Elles apportent des conseils sur l'ordre de lecture dans la réalisation des TP. -> -# Évaluation - -Une fiche de compétences à acquérir et des points à réaliser en TP sera préparée et accessible pour chaque TP sur code first. -Vous aurez accès aux évaluations de l'enseignant au fur et à mesure de son évaluation. -Pour obtenir une validation, vous devrez prouver votre acquisition des compétences à l'enseignant via : un entretien oral ou un examen écrit. -La note finale sera composée de l'ensemble des acquis validés par l'enseignant à la dernière minute du dernier TP. - -# Structure de l'application - -Voici un diagramme de classes volontairement simplifié présentant grossièrement les différents acteurs de l'application que vous devez réaliser : - -```mermaid -classDiagram -direction TB - -Game --> "1" Rules : rules -Game --> "1" Board : board -Game --> "2" Player: players - -Rules <|.. ClassicRules -Rules <|.. VerySimpleRules - -Rules ..> Board -Board --> "*,*" Cell : grid - -Player <|-- RandomPlayer -Player <|-- HumanPlayer - -class Board { - +insert(piece:, atRow:, andColumn:) - +removePiece(atRow:, andColumn:) -} - -class Cell { - +cellType : CellType - +initialOwner: Owner - +piece : Piece? -} - -class Rules { - +createBoard() : Board$ - +getNextPlayer() : Owner - +isMoveValid(Board, Move) : Bool - +isGameOver(Board, Int, Int) : Bool -} - -class Player { - +chooseMove(in: Board, with: Rules) Move? -} - -class Game { - +init(withRules:, andPlayer1:, andPlayer2: Player) - +start() -} +## Installation et Configuration +### Étape 1 : Clonage du projet +``` +git clone ``` -- ```Board``` représente le plateau de jeu et est composé d'un tableau à deux dimensions de ```Cell``` : il est responsable de l'insertion, de la suppression et donc du déplacement des pions. -- ```Rules``` représente les règles du jeu. Comme elles sont assez touffues (```ClassicRules```), je vous proposerai des règles simplifiées (```VerySimpleRules```). ```Rules``` indique qui est le prochain joueur, si un coup est valide, si la partie est terminée, etc. -- ```Player``` représente un joueur. Nous en réaliserons deux versions en particulier : une *IA* qui jouera aléatoirement (```RandomPlayer```) et un joueur humain (```HumanPlayer```). -- ```Game``` : sert de médiateur et d'ordonnanceur pour la gestion globale du jeu. - -L'application à réaliser est une application en lignes de commandes qui permettra de jouer dans un terminal et ressemblera au résultat ci-dessous : - - - -Vous travaillerez sur : -- ```Board``` et ```Cell``` pendant les deux premières semaines, -- ```Rules``` et ```VerySimpleRules``` pendant la 3ème semaine, -- ```Player```, ```RandomPlayer``` et ```HumanPlayer``` pendant la 4ème semaine, -- ```Game``` et l'application finale pendant la 5ème semaine. - -Des énoncés plus détaillés vous seront donnés au début de chaque semaine. - -# Énoncés -- [Semaine 1](./subject_week1.md) - -**Home** | [Semaine 1](./subject_week1.md) - ---- -Copyright © 2023-2024 Marc Chevaldonné - -While writing this tutorial, I was listening to... - - - - - - -
- - -
-

On The Corner

-

Miles Davis (1972)

-
-
\ No newline at end of file +### Étape 2 : Ouvrir le projet dans Xcode +- Ouvrez Xcode. +- Cliquez sur "File" (Fichier) dans la barre de menu. +- Sélectionnez "Open" (Ouvrir). +- Naviguez jusqu'au répertoire où vous avez cloné le projet et ouvrez le fichier `.xcodeproj`. + +### Étape 3 : Compilation et exécution +- Appuyez sur le bouton de lecture (triangle vert) dans Xcode pour compiler et exécuter le projet. + +## Problèmes Connus et Solutions +- Refaire une structure de projet +- Un autre truc sur tostring +- On peu pas lire Owner, car internal (donc getter) +- Pareil pour cell +- Pareil pour board (peux pas la lire) +- Juste faire un print de board \ No newline at end of file