• Aucun résultat trouvé

Informatique Terminale : Compléments de programmation Sujet 2 : Jeu de dominos

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique Terminale : Compléments de programmation Sujet 2 : Jeu de dominos"

Copied!
2
0
0

Texte intégral

(1)

Informatique Terminale : Compléments de programmation

Sujet 2 : Jeu de dominos

Le but du sujet est de réaliser une partie de dominos à plusieurs joueurs en Python.

1. Écrire le code de la classe

Domino

dont les objets ont deux attributs

n1

et

n2

qui sont des entiers compris entre

0

et

6

avec une méthode

somme

qui renvoie la somme de ces attributs et une méthode

representation

qui renvoie une chaîne de caractères du type

n1:n2

2. Écrire le code de la classe

Joueur

avec les méthodes indiquées ci-dessous :

class Joueur:

def __init__(self, numero, jeu): # jeu est une liste d’instances de Domino # les attributs de l’objet ont le même nom que les paramètres

def affiche_jeu(self): # renvoie une chaîne de caractères avec les dominos du joueur # sous la forme J5 > | 1:2 | 3:4 | où 5 est le numéro du joueur

def plus_grand(self):

# renvoie la première instance de Domino de la liste jeu qui a la plus grande somme

def domino(self, chiffres): # chiffres est une chaîne de caractères de la forme n1:n2 # renvoie l’instance Domino(n1, n2) de la liste jeu si elle existe et None sinon

def joue(self): # renvoie le domino entré par un joueur dans un input

# dont le texte affiché est la chaîne renvoyée par la méthode affiche_jeu

# l’input est affiché tant que le domino entré par le joueur n’est pas dans son jeu def score(self): # renvoie le total de tous les points des dominos du joueur

3. Écrire un code Python d’une fonction

melange

qui prend une liste

liste

en paramètre et échange aléatoirement

3*n

éléments de la liste,

n

étant la longueur de cette liste.

4. a) Écrire le code du constructeur de la classe

Partie

qui prend la variable

nbre_joueurs

en

paramètre. Les attributs des instances de la classe

Partie

sont :

nbre_joueurs

[le paramètre],

joueur

[une liste de

nbre_joueurs

instances de la classe

Joueur

dont l’attribut

jeu

est un élément de la liste

jeu

renvoyée par la méthode

distribution

de la classe

Partie

(voir b) ; cette méthode ne prend pas d’autre paramètre que

self

] et

chaine

[une liste vide qui sera complétée au fur et à mesure de la partie par des chaînes de caractères de la forme

2:1

ou

1:2

].

b) Écrire le code de la méthode

distribution

décrite en a). Elle répartit les

28

dominos

Domino(i, j)

avec

0 <= i < j <= 6

en en distribuant autant à chaque joueur aléatoirement.

c) Écrire le code de la méthode

test

(pour la classe

Partie

) qui prend en paramètre une instance

domino

de la classe

Domino

et renvoie

1

si le domino correspondant peut être ajouté à la liste

chaine

et renvoie

0

sinon. Un domino peut-être ajouté à la liste

chaine

si un des ses numéros est le premier ou le dernier de la chaîne de dominos correspondante.

d) Écrire le code de la méthode

peutJouer

qui prend en paramètre une instance

joueur

de la classe

Joueur

et renvoie

1

si le joueur possède un domino qui peut être joué et

0

sinon.

e) Écrire le code de la méthode

fin

qui renvoie

1

si un joueur n’a plus de domino ou si aucun joueur

ne peut jouer et renvoie

0

sinon.

(2)

5. Le code de la méthode

jouer

est le suivant :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

def jouer(self):

n = self.nbre_joueurs ordre = list(range(n)) melange(ordre)

joueur = self.joueur[ordre[0]]

domino = joueur.plus_grand()

self.chaine.append(str(domino.n1) + ':' + str(domino.n2)) joueur.jeu.remove(domino)

print('Le joueur J' + str(joueur.numero) + ' a joué son plus grand domino ') i = 1

while not self.fin():

print('Dominos joués : ' + str(self.chaine)) joueur = self.joueur[ordre[i%n]]

if self.peutJouer(joueur):

domino = joueur.joue()

while not self.test(domino): domino = joueur.joue() joueur.jeu.remove(domino)

self.ajoute(domino) else:

print('Le joueur J' + str(joueur.numero) + ' ne peut pas jouer') i+= 1

self.score()

a) Le code principal du jeu est

if __name__=='__main__': main()

Écrire le code de la fonction

main

pour qu’elle permette à l’utilisateur de rentrer le nombre de joueurs dans un input et qu’elle exécute la méthode

jouer

.

b) Quelle ligne de code faudrait-il ajouter au début de la méthode

jouer

pour afficher les jeux de tous les joueurs ?

c) Préciser l’utilité de la variable

ordre

définie ligne

3

. d) Expliquer la ligne

13

.

e) Expliquer la ligne

16

et notamment pourquoi la boucle n’est pas infinie.

f) Expliquer la ligne

17

.

g) On donne le code de la méthode

ajoute

ci-dessous. Par quoi faut-il remplacer les variables booléennes

b1

,

b2

,

b3

,

b4

,

b5

et

b6

et les instructions

i1

,

i2

,

i3

et

i4

pour que le programme fonctionne ?

def ajoute(self, domino):

possibilite = []

if b1: possibilite.append(0) if b2: possibilite.append(1) if b3: possibilite.append(2) if b4: possibilite.append(3)

if len(possibilite)==1 or b5 or b6:

if possibilite[0] == 0:

self.chaine.insert(0, str(domino.n2) + ':' + str(domino.n1)) if possibilite[0] == 1:

self.chaine.insert(0, str(domino.n1) + ':' + str(domino.n2)) if possibilite[0] == 2:

self.chaine.append(str(domino.n1) + ':' + str(domino.n2)) if possibilite[0] == 3:

self.chaine.append(str(domino.n2) + ':' + str(domino.n1)) else:

place = input('Placer le domino à gauche (g) ou à droite (d) ? ') while place not in ['g', 'd']:

place = input('Placer le domino à gauche (g) ou à droite (d) ? ') if possibilite[0]==0 and place=='g': i1

if possibilite[0]==0 and place=='d': i2 if possibilite[0]==1 and place=='g': i3 if possibilite[0]==1 and place=='d': i4

6. Proposer un code qui permette de revoir la partie une fois qu’elle est terminée.

Références

Documents relatifs

Chaque joueur joue à son tour et l'on constitue ainsi une chaîne dont les parties voisines ont la même valeur.. Les doubles sont

Il est préparé et déclenché par le médecin, sa portée dépend des liens entre les différents éléments de santé. Les maladies chroniques vers la

BOXCAR FUNCTION, BROWN FUNCTION, CAL, CAN- TOR FUNCTION, CARMICHAEL FUNCTION, CAROTID- KUNDALINI FUNCTION, CEILING FUNCTION, CENTER FUNCTION, CENTRAL BETA FUNCTION,

[r]

[r]

Pratiques, ludiques et colorées, elles accompagneront les plus petits dans leur apprentissage aux formes, aux lettres et développeront leur mémoire, leur vocabulaire et leur sens de

Hors du cadre de la classe, aucune reproduction, même partielle, autres que celles prévues à l'article L 122-5 du code de la propriété intellectuelle, ne peut être faite de ce

- Aborder la notion de rotation de façon intuitive. - Prolongement vers des calculs de circonférences. Sur un domino rectangulaire de dimensions 1 unité sur 2 unités, on a marqué