You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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 valeur unknown 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 donc player1 et player2. Mais puisqu'une cellule peut n'appartenir à personne, la valeur noOne existe également et est utilisée pour cela.
    • Animal : représente le type d'animal du jeu (rat rat, chat cat, chien dog, loup wolf, lépoard leopard, tigre tiger, lion lion ou éléphant elephant).
    • Owner doit se transformer facilement en String 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 initialiseur permettant d'écrire ces deux propriétés lors de l'initialisation
    • la possibilité de transformer une valeur de Piece en String sous la forme : "[1:leopard]" par exemple pour un léopard du joueur 1.
  • 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 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 en String 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".
  • 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 de Board, 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.

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)