CITÉ COLLÉGIALE
20912 IFM Développement d’applications mobiles II Hiver 2022
____________________________________________________________________
Question
Dans le cadre de cette pratique, vous devez développer deux classes
Swift :
1. La première classe, nommée Carte, représente une carte à jouer
(de valeur 2 à 10, valet, dame, roi ou as, et de famille pique,
coeur, carreau ou trèfle).
2. La seconde classe, nommée Paquet, représente un paquet de cartes
à jouer (c.à.d. contenant d’instances de Carte).
Ci-dessous vous trouverez les spécifications de ces deux classes.
Classe Carte
C1. La classe doit disposer d’un attribut famille, de type
énumératif dont la valeur est soit .Pique, .Coeur, .Carreau ou
.Trèfle.
C2. La classe doit disposer d’un attribut valeur contenant la valeur
de la carte, de 2 à 14 (11 pour le valet, 12 pour la dame, 13
pour le roi et 14 pour l’as). Le mutateur de cet attribut doit
valider la valeur attribuée afin que valeur contienne toujours
une valeur entre 2 et 14, inclusivement.
C3. La classe doit être désignée « CustomStringConvertible » et
disposer d’une fonction membre description qui retourne un
String décrivant la valeur et famille de la carte (p.ex. "3").
Classe Paquet
P1. La classe doit disposer d’un attribut privé servant à stocker
des instances de Carte.
P2. La classe doit disposer d’un initialiseur permettant soit de
créer un paquet de cartes vide, soit de créer un paquet
contenant les 52 cartes traditionnelles d’un paquet. Lorsqu’un
paquet de 52 cartes est créé, celui-ci doit être brassé (c.à.d.
ses cartes doivent être dans un ordre aléatoire).
P3. La classe doit disposer d’un attribut membre permettant de
retirer la première carte du paquet et de la retourner. Si le
paquet est vide, la fonction doit retourner nil.
P4. La classe doit disposer d’une fonction membre retirant et
retournant le nombre demandé de cartes du début du paquet. Les
cartes retirées doivent être retournées dans une nouvelle
instance de Paquet. Si le paquet contient moins de cartes que
demandées, le paquet retourné doit contenir les cartes restantes
(au pire cas, un paquet vide est retourné).
P5. La classe doit disposer d’une fonction membre retournant le
nombre de cartes restantes de chaque famille.
P6. La classe doit être désignée « CustomStringConvertible » et
disposer d’une fonction membre description qui retourne un
String énumérant le contenu du paquet (p.ex. "[ 3 R A 7
8 ]").
Code pilote
Voici un code pilote vous permettant de tester vos classes :
var paquet: Paquet = Paquet(remplir: true) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, …
print(paquet) "[ A♥ 7♠ 8♦ 3♦ V♥ D♥ 6♥ 8♣ D♠ D♣ 2♦…
var main: Paquet = paquet.piger(5) {[{…}, {…}, {…}, {…}, {…}]}
print(main) "[ A♥ 7♠ 8♦ 3♦ V♥ ]"
var carte: Carte? = paquet.piger() {(Enum Value) _valeur 12}
print(carte!) "D♥"
print(paquet) "[ 6♥ 8♣ D♠ D♣ 2♦ 9♦ 10♠ 6♣ 4♦ V♦ 3♣…
let (piques, coeurs, carreaux, trèfles) = "♠:12, ♥:10, ♦:11, ♣:13"
paquet.nombreDeCartesRestantesDeChaqueFamille
print("♠:\(piques), ♥:\(coeurs), ♦:\(carreaux), ♣\(trèfles)")