Mise à jour de 'README.md'

pull/1/head
Louis DUFOUR 2 years ago
parent b88867376a
commit dc9927e478

@ -1,196 +1,32 @@
**Home** | [Semaine 1](./subject_week1.md)
# Projet DouShouQi en Swift
# Introduction
## Introduction
Le projet DouShouQi en Swift est une implémentation console du jeu de plateau DouShouQi.
- [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)
## 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 <lien-du-projet>
```
- ```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 :
<img src="./images/Terminal.png" width="600px"/>
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 &copy; 2023-2024 Marc Chevaldonné
While writing this tutorial, I was listening to...
<table>
<tr>
<td>
<img src="./images/listeningto/on_the_corner.jpg" width="120"/>
</td>
<td>
<div>
<p><b>On The Corner</b></p>
<p><i>Miles Davis</i> (1972)</p>
</div>
</td>
</tr>
</table>
### É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
Loading…
Cancel
Save