14 KiB
Home | Semaine 1
Énoncé - Semaine 1
Délai de livraison
Votre travail est à rendre sur une branche tp1 et doit être fusionné à la branche principale lorsqu'il est terminé.
La livraison est attendue à la fin du TP.
Un retard jusqu'à la fin du second ou du troisième TP est autorisé mais se verra attribué des pénalités (cf. Critères d'évaluation).
Travail demandé
Durant la première semaine, il vous est demandé de réaliser la première partie de la gestion du plateau de jeu.
Package 1 : Modèle
Le premier Package à créer correspond au modèle (Model).
Voici un diagramme de classes de ce qui est attendu :
classDiagram
direction LR
class Board {
<<struct>>
+nbRows : Int
+nbColumns : Int
+init?(withGrid:)
}
class Cell {
<<struct>>
+init(ofType:ownedBy:withPiece:)
}
class CellType {
<<enum>>
unknown
jungle
water
trap
den
}
class Owner {
noOne
player1
player2
}
Cell --> "1" CellType : cellType
Cell --> "1" Owner : initialOwner
Board --> "*" Cell : grid
class Animal {
<<enum>>
rat
cat
dog
wolf
leopard
tiger
lion
elephant
}
class Piece {
<<struct>>
+init(withOwner:andAnimal:)
}
Piece --> "1" Owner : owner
Piece --> "1" Animal : animal
Cell --> "?" Piece : piece
En français, vous avez donc à préparer les types suivants :
- les enums :
CellType
: représente le type d'une cellule (case) du plateau de jeu. Ces cellules peuvent être de type jungle (jungle
), lac (water
), piège (trap
) ou tannière (den
). La valeurunknown
sera surtout utile comme valeur par défaut et pour le débogage.Owner
: représente le propriétaire d'une cellule du plateau (au démarrage du jeu, ou pour les tannières) ou d'une pièce. C'est un jeu à deux joueurs, les deux valeurs possibles sont doncplayer1
etplayer2
. Mais puisqu'une cellule peut n'appartenir à personne, la valeurnoOne
existe également et est utilisée pour cela.Animal
: représente le type d'animal du jeu (ratrat
, chatcat
, chiendog
, loupwolf
, lépoardleopard
, tigretiger
, lionlion
ou éléphantelephant
).Owner
doit se transformer facilement enString
pour permettre le débogage et le test en lignes de commande. Les transformations seront les suivantes :valeur String noOne
"x"
player1
"1"
player2
"2"
- la structure
Piece
qui représente une pièce du jeu. Elle possède donc :- deux propriétés en lecture seule, et non-modifiables :
- un propriétaire (
owner
) - un type d'animal (
animal
)
- un propriétaire (
- un initialiseur permettant d'écrire ces deux propriétés lors de l'initialisation
- la possibilité de transformer une valeur de
Piece
enString
sous la forme :"[1:leopard]"
par exemple pour un léopard du joueur 1.
- deux propriétés en lecture seule, et non-modifiables :
- la structure
Cell
qui représente une cellule ou une case du jeu. Elle possède donc :- des propriétés en lecture seule et non-modifiables :
- un type de case (
cellType
) - un propriétaire de case (pour les tannières et les cases de départ) (
initialOwner
) - éventuellement une pièce s'il y en a une dessus (
piece
)
- un type de case (
- un initialiseur permettant de choisir le type de cellule, un propriétaire (avec la valeur par défaut
noOne
), une pièce (par défaut il n'y en a pas) - la possibilité de transformer une
Cellule
enString
sous la forme :"<piece> on <cellType>, <owner>"
(avec<piece>
qui vautø
s'il n'y a pas de pièce), par exemple :"[1:leopard] on .jungle, x"
ou"ø on .water, x"
ou"[2:tiger] on den, 1"
.
- des propriétés en lecture seule et non-modifiables :
- la structure
Board
qui représente le plateau de jeu. Elle possède donc :- des propriétés en lecture seule et non-modifiables :
nbRows
représentant le nombre de lignes du plateau de jeu,nbColumns
représentant le nombre de colonnes du plateau de jeu.
- une propriété représentant un tableau à deux dimensions de cellules (
grid
). Cette propriété devra être uniquement lisible à l'extérieur deBoard
, mais modifiable au sein de cette structure. - un initialiseur prenant un tableau à deux dimensions de cellules en paramètre. Cet initialiseur devra faire des vérifications :
- toutes les lignes doivent avoir la même taille, sinon, l'initialiseur rend
nil
.
- toutes les lignes doivent avoir la même taille, sinon, l'initialiseur rend
- des propriétés en lecture seule et non-modifiables :
Package 2 : Extensions pour les tests en CLI
Pour permettre un affichage simplifié en lignes de commande, il vous est demandé de permettre l'affichage des pièces, cellules, etc. avec des emojis. Or, ceci étant spécifique à une application en lignes de commande, il n'est pas utile de les ajouter au Package précédent. En conséquence, il vous est demandé de créer un deuxième Package avec des extensions des types précédents afin de permettre l'affichage de :
CellType
(via une propriétésymbol
) :valeur String
unknown
" "
jungle
"🌿"
den
"🪹"
trap
"🪤"
water
"💧"
Animal
(via une propriétésymbol
) :valeur String
rat
"🐭"
cat
"🐱"
dog
"🐶"
wolf
"🐺"
leopard
"🐆"
tiger
"🐯"
lion
"🦁"
elephant
"🐘"
Owner
(via une propriétésymbol
) :valeur String
noOne
" "
player1
"🟡"
player2
"🔴"
Board
(via la propriété classique), pour que cela donne par exemple (à peu près) :
c'est-à-dire que chaque cellule sera représentée par : son type, le type de la pièce, la couleur du joueur propriétaire de cette pièce.🌿🦁🟡 🌿 🪤 🪹 🪤 🌿 🌿🐯🟡 🌿 🌿🐶🟡 🌿 🪤 🌿 🌿🐱🟡 🌿 🌿🐭🟡 🌿 🌿🐆🟡 🌿 🌿🐺🟡 🌿 🌿🐘🟡 🌿 💧 💧 🌿 💧 💧 🌿 🌿 💧 💧 🌿 💧 💧 🌿 🌿 💧 💧 🌿 💧 💧 🌿 🌿 💧 💧 🌿 💧 💧 🌿 🌿🐘🔴 🌿 🌿🐺🔴 🌿 🌿🐆🔴 🌿 🌿🐭🔴 🌿 🌿🐱🔴 🌿 🪤 🌿 🌿🐶🔴 🌿 🌿🐯🔴 🌿 🪤 🪹 🪤 🌿 🌿🦁🔴
Premier test : Command Line Tool
Pour cette première semaine, nous allons créer un test en lignes de commande (qui s'affichera dans l'interface d'XCode).
Le test demandé est très simple :
=> initialiser une valeur de Board
et l'afficher.
Note :
Essayez de refaire la grille de départ (comme ci-dessus).
Critères d'évaluation
Pour être obtenir les points, vous devez faire valider vos aquis par l'enseignant à l'oral pendant les TP (ou si l'enseignant le propose, lors d'une évaluation écrite).
Cette validation doit avoir lieu avant la fin du TP pour obtenir tous les points. Si la validation a lieu pendant le TP2, une pénalité de 50% est appliquée. Si elle a lieu pendant le TP3, une pénalité de 75% est appliquée. Par la suite, plus aucun point n'est attribué.
Légende
symbole | signification |
---|---|
☢️ | si ce critère n'est pas respecté => 0/20 |
🎬 | évalué à la fin du TP |
1️⃣ | ctirère de niveau 1 : tant que vous n'avez pas obtenu tous les points sur les critères de niveau 1, les points sur les critères suivants ne sont pas attribués |
2️⃣ | critère de niveau 2 : tant que vous n'avez pas obtenu tous les points sur les critères de niveau 1 et 2, les points sur les critères de niveau 3 ne sont pas attribués |
3️⃣ | critère de niveau 3 |
Critères
niveau | description | coeff | pénalités TP2 | pénalités TP3 |
---|---|---|---|---|
☢️ | Le dépôt doit être accessible par l'enseignant | ☢️ | ||
☢️ | un .gitignore doit exister au premier push | ☢️ | ||
🎬 | les Packages et le test compilent | 4 | 50% | 75% |
🎬 | le test s'exécute sans bug | 4 | 50% | 75% |
3️⃣ | tous mes projets sont dans le même workspace | 2 | 50% | 75% |
1️⃣ | j'ai créé un Package Model | 2 | 50% | 75% |
1️⃣ | j'ai créé l'enum CellType |
1 | 50% | 75% |
1️⃣ | j'ai créé l'enum Owner |
1 | 50% | 75% |
1️⃣ | j'ai créé l'enum Animal |
1 | 50% | 75% |
3️⃣ | Owner s'affiche comme demandé sous la forme d'un String |
1 | 50% | 75% |
1️⃣ | Piece possède bien les propriétés demandées en lecture seule non-modifiables |
1 | 50% | 75% |
1️⃣ | Piece possède un initialiseur |
2 | 50% | 75% |
3️⃣ | Piece est transformable en String comme demandé |
1 | 50% | 75% |
1️⃣ | Cell possède bien les propriétés demandées en lecture seule non-modifiables |
1 | 50% | 75% |
1️⃣ | Cell possède bien une propriété piece pouvant ne pas avoir de valeur |
2 | 50% | 75% |
1️⃣ | Cell possède un initialiseur utilisant des valeurs par défaut pour deux paramètres |
2 | 50% | 75% |
3️⃣ | Cell est transformable en String comme demandé |
1 | 50% | 75% |
1️⃣ | Board possède bien les propriétés demandées en lecture seule non-modifiables |
1 | 50% | 75% |
1️⃣ | Board possède bien un tableau à deux dimensions de cellule |
2 | 50% | 75% |
2️⃣ | Board.grid est en lecture seule mais modifiable au sein de Board |
2 | 50% | 75% |
1️⃣ | Board possède un initialiseur permettant d'initialiser toutes ses propriétés |
2 | 50% | 75% |
2️⃣ | l'initialiseur de Board vérifie les contraintes et renvoie nil si nécessaire |
3 | 50% | 75% |
3️⃣ | j'ai créé un Package avec les extensions pour l'affichage en lignes de commande | 2 | 50% | 75% |
3️⃣ | j'ai créé une extensions pour CellType |
1 | 50% | 75% |
3️⃣ | j'ai créé une extensions pour Animal |
1 | 50% | 75% |
3️⃣ | j'ai créé une extensions pour Owner |
1 | 50% | 75% |
3️⃣ | j'ai créé une extensions pour Board |
2 | 50% | 75% |
2️⃣ | j'ai créé une application de type Command Line Tool utilisant les deux Packages précédents | 2 | 50% | 75% |
2️⃣ | j'initialise correctement Board dans le test |
2 | 50% | 75% |
3️⃣ | j'affiche correctement Board dans le test |
1 | 50% | 75% |
3️⃣ | mon dépôt possède un readme qui apporte quelque chose... | 2 | 50% | 75% |
3️⃣ | mon code est commenté | 1 | 50% | 75% |
Note :
Les coefficients peuvent être amenés à changer et sont donnés à titre indicatif
Home | Semaine 1
Copyright © 2023-2024 Marc Chevaldonné
Pendant la préparation de ce TP et de cet énoncé, j'écoutais...
![]() |
Fuse One Silk (1981) |
![]() |
Mingus At Monterey Charles Mingus (1964) |
![]() |
Upon The Wings Of Music Jean-Luc Ponty (1975) |
![]() |
Bayou Country Creedence Clearwater Revival (1969) |
![]() |
Live At The Old Absinthe House bar ...Friday Night Bryan Lee (1997) |
![]() |
Follow The Red Line - Live At The Village Vanguard Chris Potter Underground (2007) |
![]() |
Digital Works Ahmad Jamal (1985) |