🔥 Projet (level 9) : Pierre - Papier - Ciseaux 🪨📄✂🚀
Objectif :
Créer un mini-jeu en C où l’utilisateur affronte l’ordinateur dans une partie de Pierre-Papier-Ciseaux.
Concepts révisés :
- Les conditions (
if/else
). - L’usage de
scanf
etprintf
pour interagir avec l’utilisateur. - L’utilisation de la fonction
rand()
et/ousrand()
(bibliothèque<stdlib.h>
) pour générer un choix aléatoire. - Optionnel : les boucles (
while
oufor
) pour rejouer plusieurs manches.
Structure du jeu :
Le programme doit :
- Afficher un menu d’accueil, indiquant les choix possibles (1 pour Pierre, 2 pour Papier, 3 pour Ciseaux).
- Permettre à l’utilisateur de saisir son choix via
scanf
. - Générer un choix aléatoire pour l’ordinateur.
- Comparer les deux choix et annoncer le résultat (victoire, défaite ou égalité).
- Proposer (facultatif) de rejouer plusieurs fois.
Activité 1 : Mise en place du squelette du code 🤝
Exercice : Commencez par écrire un programme minimal qui :
- Inclut les bibliothèques
<stdio.h>
et<stdlib.h>
. - Affiche un message de bienvenue.
- Attend la saisie d’un nombre entier.
// Activité 1 : Squelette du programme
#include
#include
int main() {
int choixUtilisateur;
printf("=== Bienvenue dans Pierre-Papier-Ciseaux ===\n");
printf("Choisissez 1 (Pierre), 2 (Papier), 3 (Ciseaux) : ");
scanf("%d", &choixUtilisateur);
printf("Vous avez choisi : %d\n", choixUtilisateur);
return 0;
}
Indices :
- Indice 1 : Assure-toi d’inclure
<stdio.h>
et<stdlib.h>
en haut du fichier. - Indice 2 : Utilise
printf
pour afficher des instructions à l’utilisateur. - Indice 3 : Utilise
scanf("%d", &variable);
pour lire un entier.
Activité 2 : Générer le choix de l’ordinateur 🧮
Exercice : Modifiez le code pour que l’ordinateur génère un choix aléatoire : 1, 2 ou 3.
// Activité 2 : Choix aléatoire de l'ordinateur
#include
#include
#include
int main() {
int choixUtilisateur;
int choixOrdi;
// Initialiser le générateur aléatoire
srand(time(NULL));
printf("=== Pierre-Papier-Ciseaux ===\n");
printf("Choisissez 1 (Pierre), 2 (Papier), 3 (Ciseaux) : ");
scanf("%d", &choixUtilisateur);
// Génère un nombre entre 1 et 3
choixOrdi = ... ;
printf("Vous avez choisi : %d\n", choixUtilisateur);
printf("L'ordinateur a choisi : %d\n", ...);
return 0;
}
Indices :
- Indice 1 : Pense à inclure
<time.h>
pour pouvoir utilisertime(NULL)
avecsrand()
. - Indice 2 :
rand() % 3 + 1
génère des nombres entre 1 et 3. - Indice 3 : Vérifie que
printf
affiche bien le choix de l’ordinateur pour tester si tout fonctionne.
Activité 3 : Comparer les choix et afficher le résultat 🖋️
Exercice : Comparez les choix de l’utilisateur et de l’ordinateur. Affichez qui gagne.
// Activité 3 : Déterminer le gagnant
#include
#include
#include
int main() {
int choixUtilisateur;
int choixOrdi;
srand(time(NULL));
printf("=== Pierre-Papier-Ciseaux ===\n");
printf("Choisissez 1 (Pierre), 2 (Papier), 3 (Ciseaux) : ");
scanf("%d", & ... );
choixOrdi = ... ;
printf("Vous avez choisi : %d\n", choixUtilisateur);
printf("L'ordinateur a choisi : %d\n", choixOrdi);
// Compare les choix
if (choixUtilisateur == choixOrdi) {
printf("Égalité !\n");
}
else if ((choixUtilisateur == 1 && choixOrdi == 3) ||
(choixUtilisateur == 2 && choixOrdi == 1) ||
(choixUtilisateur == 3 && choixOrdi == 2)) {
printf("Vous gagnez !\n");
}
else {
printf("L'ordinateur gagne !\n");
}
return 0;
}
Indices :
- Indice 1 : Pour rappel : Pierre(1) bat Ciseaux(3), Ciseaux(3) bat Papier(2), Papier(2) bat Pierre(1).
- Indice 2 : Regroupe les conditions de victoire avec des opérateurs logiques
&&
ou||
. - Indice 3 : Teste toutes les possibilités (ex. 1 vs 3, 2 vs 1, etc.) pour vérifier si les résultats s’affichent correctement.
Activité 4 : Ajouter une boucle pour rejouer 🧊 (Optionnel)
Exercice : Proposez à l’utilisateur de rejouer plusieurs fois et de compter le nombre de victoires de chacun.
// Activité 4 : Rejouer plusieurs manches
#include
#include
#include
int main() {
int choixUtilisateur, choixOrdi;
int scoreUtilisateur = 0, scoreOrdi = 0;
char rejouer = 'o';
srand(time(NULL));
while (rejouer == 'o' || rejouer == 'O') {
printf("=== Pierre-Papier-Ciseaux ===\n");
printf("Choisissez 1 (Pierre), 2 (Papier), 3 (Ciseaux) : ");
scanf("%d", &choixUtilisateur);
choixOrdi = ... ;
// Comparaison
if (choixUtilisateur == choixOrdi) {
printf("Égalité !\n");
}
else if ((choixUtilisateur == 1 && choixOrdi == 3) ||
(choixUtilisateur == 2 && choixOrdi == 1) ||
(choixUtilisateur == 3 && choixOrdi == 2)) {
printf("Vous gagnez cette manche !\n");
scoreUtilisateur++;
}
else {
printf("L'ordinateur gagne cette manche !\n");
scoreOrdi++;
}
printf("Score : Vous %d - Ordi %d\n", ... , ...);
// Propose de rejouer
printf("Voulez-vous rejouer ? (o/n) ");
scanf(" %c", &rejouer); // espace avant %c pour ignorer le retour chariot
}
printf("Partie terminée ! Score final : Vous %d - Ordi %d\n", scoreUtilisateur, scoreOrdi);
return 0;
}
Indices :
- Indice 1 : Déclare deux variables
scoreUtilisateur
etscoreOrdi
pour compter les points. - Indice 2 : Après chaque manche, incrémente le score du vainqueur.
- Indice 3 : Utilise un
char
(par ex.rejouer
) pour demander à l’utilisateur de rejouer (o/n
).
BRAVO, tu viens de terminer ton premier "vrai" mini-projet en C ! 🎉
Tu as combiné :
- Des conditions avec
if/else
. - L’interaction avec l’utilisateur (
scanf
,printf
). - La génération de nombres aléatoires (
rand()
) pour simuler l’ordinateur. - Une boucle (
while
) pour rejouer plusieurs manches (optionnel).
Continue à peaufiner ce programme (par exemple, en affichant "Pierre" au lieu de "1", etc.) et amuse-toi bien avec la programmation ! 🚀