Projet : Jeu Pierre-Papier-Ciseaux

🔥 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 et printf pour interagir avec l’utilisateur.
  • L’utilisation de la fonction rand() et/ou srand() (bibliothèque <stdlib.h>) pour générer un choix aléatoire.
  • Optionnel : les boucles (while ou for) pour rejouer plusieurs manches.

Structure du jeu :

Le programme doit :

  1. Afficher un menu d’accueil, indiquant les choix possibles (1 pour Pierre, 2 pour Papier, 3 pour Ciseaux).
  2. Permettre à l’utilisateur de saisir son choix via scanf.
  3. Générer un choix aléatoire pour l’ordinateur.
  4. Comparer les deux choix et annoncer le résultat (victoire, défaite ou égalité).
  5. 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 utiliser time(NULL) avec srand().
  • 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 et scoreOrdi 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 ! 🚀