Pierre-papier-ciseaux

Le jeu pierre-papier-ciseaux (feuille-caillou-ciseaux) se joue avec les mains.

Description

Les deux joueurs choisissent simultanément l’un des trois coups possibles:

  • pierre bat ciseaux

  • papier bat pierre

  • ciseaux bat papier

Ce jeu est aussi connu sous le nom de chifoumi.
Vous trouvez plus d’info sur Wikipédia.

Exemple online

Allez sur le site chifoumi.io pour avoir une idée du jeu.
Vous (you) allez jouer contre l’ordinateur (bot).

Votre projet

C’est un exemple d’un jeu vidéo où un humain joue contre l’ordinateur.

  • vous continuez jusqu’à une condition de fin

  • vous vérifiez si le choix est permis

  • vous affichez les coups

  • vous décidez qui gagne

  • vous tenez compte du score tout au long de la partie

Ce jeu est simple, mais il vous permet de comprendre le fonctionnement d’un jeu vidéo.

Représentation des coups

À chaque tour il y a 3 coups possibles. Il a différentes manières de représenter ces 3 options. Une façon est d’utiliser des chaînes de caractères.

coups = ['pierre', 'papier', 'ciseaux']

Une autre façon plus efficace est d’utiliser juste des entiers (0, 1, 2).
En commençant par 0, nous pouvons utiliser ces entiers comme indice pour une liste avec les noms des coups.

  • 0 pour pierre

  • 1 pour papier

  • 2 pour ciseaux

coups = [0, 1, 2]

Bien sûr, vous pouvez aussi utiliser des émojis pour rendre l’apparence plus cool.

coups = ['💎', '📜', '✂️']

Input-output

Pour ce jeu, vous utilisez la fonction input() pour demander le choix de l’utilisateur. Vous utilisez la fonction print() pour communiquer avec lui.

Le principe de base est:

x = input('votre choix: ')
print('vous avez choisi', x)
votre choix:  pierre
vous avez choisi pierre

Boucle de jeu

Pour jouer à ce jeu, vous utilisez la boucle while pour répéter les échanges. Une condition de fin sera nécessaire. Une manière fréquemment utilisée pour terminer un jeu est d’appuyer tout simplement sur la touche retour. Dans ce cas input() retourne une chaine vide.

x = ''

La chaine vide est interprétée comme valeur booléenne False.
Essayez différentes valeurs.

bool('')
False
bool('pierre')
True

Donc voici une boucle de jeu. Elle continue jusqu’à ce que vous appuyez sur retour tout seul.

x = input('votre choix:')
while x: 
    x = input('votre choix:')
    
print('game over')
votre choix: papier
votre choix: 
game over

Vérification

Un jeu vérifie si les entrées sont permises. Établissons d’abord une liste des coups qui sont permis.

coups = ['pierre', 'papier', 'ciseaux']

L’opérateur in permet de questionner si un élément fait partie d’une liste. Par exemple.

'papier' in coups
True
'ciso' in coups
False

Nous pouvons maintenant ajouter la vérification.

coups = ['pierre', 'papier', 'ciseaux']
print('choisissez entre:', *coups)

x = input('votre choix:')
while x :
    if x in coups:
        print('ok')
    else:
        print(x, "n'est pas dans", coups)
    x = input('votre choix')
    
print('game over')
choisissez entre: pierre papier ciseaux
votre choix: pierre
ok
votre choix papi
papi n'est pas dans ['pierre', 'papier', 'ciseaux']
votre choix 
game over

Choisir avec des raccourcis

Pour jouer plus facilement, il est préférable d’entrer un seul caractère, plutôt que de taper un mot entier.

Attention : ici, la liste des coups sont les caractères '0', '1' et '2' et non les entiers 0, 1 et 2

coups = ['0', '1', '2']
print('choissisez entre:', *coups)

x = input('votre choix:')
while x :
    if x in coups:
        print('ok')
    else:
        print(x, "n'est pas dans", *coups)
    x = input('votre choix:')
    
print('GAME OVER')
choissisez entre: 0 1 2
votre choix: 2
ok
votre choix: 3
3 n'est pas dans 0 1 2
votre choix: 
GAME OVER

Transformer le choix

Dans le jeu, il est avantageux de transformer les indices (0, 1, 2) en mots.

Attention
La fonction input() retourne un caractère et non pas un nombre.
Il faut le transformer en entier avec la fonction int().
L’instruction x = int(x) transforme le caractère '1' en nombre 1.

coups = ['pierre', 'papier', 'ciseaux']
emoji = ['💎', '📜', '✂️']
print('0=pierre, 1=papier, 2=ciseaux')

x = input('votre choix:')
while x :
    x = int(x)
    print(emoji[x], coups[x])
    x = input('votre choix:')

print('G A M E   O V E R')
0=pierre, 1=papier, 2=ciseaux

Choix aléatoire

Le module random permet de choisir des éléments aléatoires.
La fonction random.randint(0, 2) retourne un entier aléatoire dans l’intervalle [0, 2].

import random

coups = ['💎', '📜', '✂️']
for i in range(5):
    x = random.randint(0, 2)
    print(x, '=', coups[x])
1 = 💎
1 = 💎
2 = ✂️
2 = ✂️
0 = 📜
coups = ['pierre', 'papier', 'ciseaux']

for i in range(5):
    x = random.randint(0, 2)
    print(coups[x])
pierre
pierre
papier
papier
ciseaux

Jouer contre l’ordinateur

Dans ce jeux vous (you) allez jouer contre l’ordinateur (bot). L’ordinateur choisit une des 3 possibilités de façon aléatoire.

coups = ['pierre', 'papier', 'ciseaux']
print('0=pierre, 1=papier, 2=ciseaux')

x = input('votre choix:')
while x :
    you = int(x)
    bot = random.randint(0, 2)
    print(coups[you], 'contre' ,coups[bot])
    x = input('votre choix:')

print('game over')
0=pierre, 1=papier, 2=ciseaux
votre choix: 0
pierre contre papier
votre choix: 1
papier contre ciseaux
votre choix: 
game over

Qui gagne ?

Si les deux coups sont les mêmes, c’est un match nul et c’est facile à détecter.

you = 0
bot = 0
if you == bot: 
    print('match nul')
match nul

Si les deux coups sont différents, c’est plus compliqué

  • pierre (0) est plus fort que ciseaux (2)

  • papier (1) est plus fort que pierre (0)

  • ciseaux (2) est plus fort que papier (1)

Testez avec différents combinaisons.
Modifiez les variables you et bot et testez 3 cas différents.

you = 1
bot = 2
if you == bot :
    print('match nul')
elif you == 0 and bot == 2:
    print('humain gagne')
elif you == 1 and bot == 0:
    print('humain gagne')
elif you == 2 and bot == 1:
    print('humain gagne')
else:
    print('ordi gagne')
ordi gagne

Garder un score

Utilisez des variables pour garder un score. Au début il faut les initialiser.

score_you = 0
score_bot = 0

Pendant le jeu vous allez incrémenter le score si l’un ou l’autre gagne.

score_you = score_you + 1
score_bot = score_bot + 1
score_bot = score_bot + 1

Cette incrémentation peut être simplifié avec l’opérateur +=.

score_you += 1
score_bot += 1
score_bot += 1
print('score =', score_you, ':', score_bot)
score = 2 : 4

Projet

Combinez tous les éléments pour créer un jeu vidéo où

  • vous jouez contre l’ordinateur

  • vous continuez jusqu’à une condition de fin

  • vous vérifiez si le choix est permis

  • vous affichez les coups

  • vous décidez qui gagne à chaque tour

  • vous tenez compte du score

  • vous décidez qui gagne la partie