Aller au contenu

Changer le type des joueurs⚓︎

Exercice 7

Nous allons maintenant rajouter la possibilité de choisir le type de chaque joueur. Le type peut être humain ou ordinateur. Pour cela nous utiliserons un paramètre types qui sera un texte de deux caractères parmi "h", pour un humain, et "o" pour l'ordinateur. Ainsi "hh" correspondra au jeu entre deux humains et "oh" correspondra à l'ordinateur en joueur 1 et à un humain en joueur 2. Les combinaisons "ho" et "oo" sont aussi possibles

Compléter le code de la fonction manche_mixte qui prend en paramètres un entier nb_allumettes et une chaîne de caractères types et qui permet de jouer une manche avec nb_allumettes entre deux joueurs représentés par types.

Indice : pour changer de joueur

On peut remarquer que \(3-1=2\) et \(3-2=1\)...

Indice : pour savoir quel est le type du joueur

À chaque tour de jeu, il faut donc déterminer s'il faut utiliser demander ou demander_ordi. Vous pouvez regarder la valeur de types[joueur-1] pour connaître le type de joueur.

Le code à compléter
def manche_mixte(nb_allumettes, types):
    joueur = 2
    while ...:
        joueur = ...  # On change de joueur
        if ...:
            choix = demander_ordi(nb_allumettes)
            print("L'ordinateur prend", choix, "allumette(s)")
        else:
            print("Au tour du joueur", joueur)
            choix = demander_joueur(nb_allumettes)
        nb_allumettes = ...
    if ...:
        print("Le joueur a battu l'ordinateur.")
    else:
        print("L'ordinateur a gagné.")
    return joueur
Exemples d'utilisation
>>> manche_mixte(7, "oo")
Le joueur 1 (ordinateur) prend 3 allumette(s)
Le joueur 2 (ordinateur) prend 3 allumette(s)
Le joueur 1 (ordinateur) prend 1 allumette(s)
Le joueur 1 a gagné.
1
>>> manche_mixte(7, "oh")
Le joueur 1 (ordinateur) prend 3 allumette(s)
Au tour du joueur 2
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 1
Le joueur 1 (ordinateur) prend 3 allumette(s)
Le joueur 1 a gagné.
1
Exercice 8

Compléter le code de la fonction partie_mixte qui prend en paramètres un entier nb_manches, un entier nb_allumettes et une chaîne de caractères types, et qui permet de jouer une partie de nb_manches manches avec nb_allumettes allumettes entre deux joueurs correspondant à types.

Par rapport aux exercices précédents, la fonction doit arrêter la partie dès qu'un joueur est certain de gagner la partie. Par exemple si un joueur gagne les 2 premuères manches sur 3, il n'est pas nécessaire de jouer la 3e manche.

Le code à compléter
def partie_mixte(nb_manches, nb_allumettes, types):
    score1 = 0
    score2 = 0
    while ...:
        gagnant = manche_mixte(nb_allumettes, types)
        if gagnant == ...:
            score1 = ...
        else:
            score2 = ...
        print()
    if ...:
        gagnant = 1
        score_gagnant = ...
        score_perdant = ...
    elif ...:
        gagnant = 2
        score_gagnant = ...
        score_perdant = ...
    else:
        gagnant = 0  # il y a égalité
    if ...:
        if ...:
            print("Le joueur", ..., "(humain) a gagné la partie", ..., "à", ...)
        else:
            print("Le joueur", ..., "(ordinateur) a gagné la partie", ..., "à", ...)
    else:
        print("Match nul", ..., "Ă ", ...)
Exemples d'utilisation
>>> partie_mixte(3, 3, "hh")
Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 3
Le joueur 1 a gagné.

Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 3
Le joueur 1 a gagné.

Le joueur 1 (humain) a gagné la partie 2 à 0

>>> partie_mixte(3, 3, "hh")
Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 1
Au tour du joueur 2
Il reste 2 allumette(s)
Combien d'allumettes voulez-vous ? 2
Le joueur 2 a gagné.

Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 3
Le joueur 1 a gagné.

Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 2
Au tour du joueur 2
Il reste 1 allumette(s)
Combien d'allumettes voulez-vous ? 1
Le joueur 2 a gagné.

Le joueur 2 (humain) a gagné la partie 2 à 1
Exercice 9 (facultatif)

On peut remarquer que le joueur 1 commence chacune des manches, ce qui peut lui donner un certain avantage.

Écrire une nouvelle fonction manche_mixte2 similaire à manche_mixte sauf qu'elle prend en plus un paramètre joueur permettant de déterminer le joueur qui commence. Attention, il faut se rappeler que le joueur change au début de chaque tour.

Écrire une nouvelle fonction partie_mixte2 similaire à partie_mixte sauf que le joueur commençant chaque manche peut changer selon une des règles suivantes (ou une autre que vous avez inventée) :

  • Le perdant de la manche prĂ©cĂ©dente commence.
  • Le premier joueur est tirĂ© au hasard.
  • Les joueurs commencent les manches Ă  tour de rĂ´le.