Aller au contenu

Le jeu contre l'ordinateur⚓︎

Jouer une manche⚓︎

Stratégie optimale

Il existe une stratégie optimale pour ce jeu. Si les deux joueurs savent jouer parfaitement, ils savent qui va gagner la partie avant même de commencer.

Selon le nombre d'allumettes restantes, il est possible de déterminer si le joueur dont c'est le tour est en position gagnante ou perdante. S'il est en position gagnante, alors il peut déterminer combien d'allumettes prendre pour mettre l'autre joueur en position perdante. Au contraire, un joueur en position perdante, quoi qu'il fasse, va laisser l'autre joueur en position gagnante.

Pour déterminer ces positions, il faut partir du début. S'il n'y a pas d'allumettes, le joueur a perdu. S'il y en a une, deux ou trois, il est en position gagnante, puisqu'il peut toutes les prendre.

Exercice 3

Répondre sur la feuille.

Exercice 4

Compléter la fonction demander_ordi qui prend en paramètre nb_allumettes et qui permet à l'ordinateur de choisir le bon nombre d'allumettes s'il est en position gagnante. En position perdante, il choisit au hasard le nombre à prendre.

Choisir un entier au hasard

La fonction randint, définie dans le module random, prend deux entiers a et b en paramètres et renvoie un entier pris au hasard entre a et b inclus.

Ainsi randint(1, 3) va renvoyer aléatoirement 1, 2 ou 3.

Le code à compléter
def demander_ordi(nb_allumettes):
    if nb_allumettes%4 == ...:
        return randint(1, 3)
    else:
        return ...
Exemple d'utilisation
>>> demander_ordi(13)
1
>>> demander_ordi(14)
2
>>> demander_ordi(4) # il va répondre au hasard
1 
>>> demander_ordi(4) # il va répondre au hasard
3 
Exercice 5

Répondre sur la feuille puis compléter le code de la fonction manche_ordi qui prend en paramètre un entier nb_allumettes et qui permet de jouer une manche contre l'ordinateur avec nb_allumettes allumettes au départ.

Le code à compléter
def manche_ordi(nb_allumettes):
    joueur = 2
    while ...:
        if joueur == 1:
            joueur = ...
            choix = demander_ordi(nb_allumettes)
            print("L'ordinateur prend", choix, "allumette(s)")
        else:
            joueur = ...
            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 (1)
  1. Cette ligne servira plus tard.
Exemple d'utilisation
>>> manche_ordi(15)
Au tour du joueur 1
Il reste 15 allumette(s)
Combien d'allumettes voulez-vous ? 3
L'ordinateur prend 3 allumette(s)
Au tour du joueur 1
Il reste 9 allumette(s)
Combien d'allumettes voulez-vous ? 2
L'ordinateur prend 3 allumette(s)
Au tour du joueur 1
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 1
L'ordinateur prend 3 allumette(s)
L'ordinateur a gagné.

Jouer une partie de plusieurs manches⚓︎

Jouer plusieurs manches

Nous allons maintenant rajouter la possibilité de jouer plusieurs manches et celui qui en gagne le plus remportera la partie.

La partie s'arrête lorsque les nb_manches manches on été jouées. Le joueur ayant gagné le plus de manches est alors désigné vainqueur. S'ils ont tous les deux gagné le même nombre de manches, il y a égalité.

Toutes les manches seront jouées même si un des joueurs n'a plus aucune chance de remporter la partie.

Exercice 6

Répondre sur la feuille puis décommenter les lignes return joueur à la fin des fonctions manche et manche_ordi.

Compléter le code de la fonction partie qui prend en paramètres deux entiers nb_manches et nb_allumettes, et qui permet de faire nb_manches manches avec nb_allumettes chacune.

Le code à compléter
def partie(nb_manches, nb_allumettes):
score1 = 0
score2 = 0
while ...:
    gagnant = manche(nb_allumettes)  # ou manche_ordi(nb_allumettes)
    if gagnant == ...:
        score1 = ...
    else:
        score2 = ...
if ...:
    print("Le joueur 1 est le grand vainqueur.")
elif ...:
    print("Le joueur 2 est le grand vainqueur.")
else:
    print("Il y a égalité.")
  1. Cette ligne servira plus tard.
Exemple d'utilisation
>>> partie(3, 5)  # 3 parties avec 5 allumettes
Au tour du joueur 1
Il reste 5 allumette(s)
Combien d'allumettes voulez-vous ? 3
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 5 allumette(s)
Combien d'allumettes voulez-vous ? 1
Au tour du joueur 2
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 3
Au tour du joueur 1
Il reste 1 allumette(s)
Combien d'allumettes voulez-vous ? 1
Le joueur 1 a gagné.

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

Le joueur 2 est le grand vainqueur.