Jeu de pierre, feuille, ciseaux (jankenpon)

Soyez le premier à donner votre avis sur cette source.

Vue 33 505 fois - Téléchargée 888 fois

Description

Qui n'as jamais joué au Pierre, Feuille, Ciseau? Inutile donc de rappeler en quoi ça consiste. Amusez-vous !

Source / Exemple :


// Crée avec SharpDevelop (http://www.icsharpcode.net/OpenSource/SD/Default.aspx)
// Mail du programmeur: yanngeffrotin@gmail.com
// [je l'utilise donc je le soutiens avec www.paypal.fr]

/* Algorithme du Jaken (version épurée)

Algo Jaken

Constantes

Variables     
scor, scor2, choix : entiers
texte, choix2 : caractères

DEBUT

Afficher "Jeu de Jaken"
Afficher "Licence publique générale GNU"   
      
scor <- 0
scor2 <- 0
choix <- 0
choix2 <- "pierre"
         
Répéter
    Afficher " "
    Répéter
        Afficher "pierre, papier ou ciseau?"
        Saisir texte
    Jusqu'à texte="pierre" ou texte="papier" ou texte="ciseau"
   
    si texte = "pierre" alors
        choix <- 0
    finsi
    si texte = "papier" alors
        choix <- 1
    finsi
    si texte = "ciseau" alors
        choix <- 2
    finsi

    Afficher " "
    Afficher "joueur1: ", texte       
            
    nb <- aléatoire(2)
            
    si nb = 0 alors
        choix2 <- "pierre"
    finsi
    si nb = 1 alors
        choix2 <- "papier"
    finsi    
    si nb = 2 alors
        choix2 <- "ciseau"
    finsi   
   
    Afficher "joueur2: ", choix2
    Afficher " "
    
    si choix=0 et nb=0 alors
        Afficher "Partie Nulle."
    sinon
        si choix=0 et nb=1 alors
            Afficher "Le papier recouvre la pierre."
            scor2 <- scor2 + 1
        sinon
            si choix=0 et nb=2 alors
                Afficher "La pierre casse les ciseaux."
                scor <- scor + 1
            finsi
        finsi
    finsi
   
    si choix=1 et nb=0 alors
        Afficher "Le papier enveloppe la pierre."
        scor <- scor + 1
    sinon
        si choix=1 et nb=1 alors
            Afficher "Partie Nulle."
        sinon
            si choix=1 et nb=2 alors
                Afficher "Le ciseau coupe le papier."
                scor2 <- scor2 + 1
            finsi
        finsi
    finsi
   
    si choix=2 et nb=0 alors
        Afficher "La pierre casse le ciseau."
        scor2 <- scor2 + 1
    sinon
        si choix=2 et nb=1 alors
            Afficher "Le ciseau coupe le papier."
            scor <- scor + 1   
        sinon
            si choix=2 et nb=2 alors
                Afficher "Partie Nulle."
            finsi
        finsi
    finsi

    Afficher " "
    Afficher "Les scores sont :"
    Afficher "Joueur1 : ", scor
    Afficher "Joueur2 : ", scor2
    Afficher " "
    
    Répéter
        Afficher "Encore une partie?(O/N)"
        Saisir texte
        texte <- agrandir(texte)
    Jusqu'à texte="N" ou texte="O"
               
jusqu'à texte="N"

FIN

  • /
using System; namespace Jaken { class MainClass { public static void Main(string[] args) { Console.WriteLine(" "); //Annonce du début Console.WriteLine("Jeu de Jaken"); // rock scissor paper Console.WriteLine("Licence publique générale GNU"); // http://www.gnu.org/licenses/gpl.html //Constantes et Variables //variable locale non assignée string texte1; string texte2="rien"; bool exit = false; int choix1 = 0; // choix du joueur 1 ( 0, 1, 2 ) int choix2 = 0; // choix du joueur 2 ( 0, 1, 2 ) int nbtour = 1; // Le premier tour commence int Maxtab = 531; // Taille maximal du tableau int[] Tchoix = new int[Maxtab]; int[] Tetat = new int[Maxtab]; //perdu(0), nul(1), gagne(2) //DEBUT do { int scor1 = 0; // Le score du joueur 1 int scor2 = 0; // Le score du joueur 2 Console.WriteLine(" "); Console.WriteLine("----------"); Console.WriteLine("(F) - Mode facile"); Console.WriteLine("(M) - Mode moyen"); Console.WriteLine("(D) - Mode difficile"); Console.WriteLine("(S) - Sortir"); Console.WriteLine("----------"); texte1 = Console.ReadLine(); texte1 = texte1.ToUpper(); Console.WriteLine("----------"); Console.WriteLine(" "); switch (texte1) { case "S": // Sortie break; case "F": // Humain contre Machine Random exit = false; nbtour=1; do //Début de la boucle { Console.WriteLine(" "); Console.WriteLine("--- mode facile, tour n°" + nbtour + " ---"); choix_humain(ref texte2, ref exit); if (texte1 != "quitter") { convert_to_nb(texte2, ref choix1); choix_random(ref choix2); convert_to_string(choix2); gagnants_et_résultats(choix1, choix2, ref scor1, ref scor2, ref Tetat, nbtour); nbtour = nbtour + 1; } } while (exit != true); //Fin de la boucle break; case "M": // Humain contre Méthode Minasi exit = false; nbtour=1; do //Début de la boucle { Console.WriteLine(" "); Console.WriteLine("--- mode moyen, tour n°" + nbtour + " ----"); choix_humain(ref texte2, ref exit); if (texte2 != "quitter") { convert_to_nb(texte2, ref choix1); algorithme_de_Minasi(ref choix2, nbtour, choix1, Tchoix); gagnants_et_résultats(choix1, choix2, ref scor1, ref scor2, ref Tetat, nbtour); nbtour = nbtour + 1; } } while (exit != true); //Fin de la boucle break; case "D": // Humain contre Algo de Shannon int[] Tstat = new int[29]; //27 + 1 vide + 1 nul exit = false; nbtour=1; do //Début de la boucle { Console.WriteLine(" "); Console.WriteLine("--- mode difficile, tour n°" + nbtour + " ---"); choix_humain(ref texte2, ref exit); if (texte2 != "quitter") { convert_to_nb(texte2, ref choix1); algorithme_de_Shannon(ref choix2, nbtour, choix1, Tstat, Tchoix, Tetat); gagnants_et_résultats(choix1, choix2, ref scor1, ref scor2, ref Tetat, nbtour); nbtour = nbtour + 1; } } while (exit != true); //Fin de la boucle break; } } while (texte1 != "S"); //texte1 != "0" && texte1 != "à" //FIN } static void choix_humain(ref string texte2, ref bool exit) { Console.WriteLine(" "); do { Console.WriteLine("pierre, papier, ciseau ou quitter?"); texte2 = Console.ReadLine(); texte2 = texte2.ToLower(); } while (texte2 != "pierre" && texte2 != "papier" && texte2 != "ciseau" && texte2 != "quitter"); if (texte2 == "quitter" ) { exit = true; } } static void convert_to_nb(string texte, ref int choix1) { if (texte == "pierre" ) { choix1 = 0; } if (texte == "papier") { choix1 = 1; } if (texte == "ciseau") { choix1 = 2; } Console.WriteLine(" "); Console.WriteLine("joueur1: " + texte); } static void choix_random(ref int choix2) { Random r = new Random(); //Aléatoire : jeu de hasard pur choix2 = r.Next(2); } static void convert_to_string(int choix2) { string texte2 = "pierre"; // use of unassigned local variable if (choix2 == 0) { texte2 = "pierre"; } if (choix2 == 1) { texte2 = "papier"; } if (choix2 == 2) { texte2 = "ciseau"; } Console.WriteLine("joueur2: " + texte2); } static void algorithme_de_Minasi(ref int choix2, int nbtour, int choix1, int[] Tchoix) { //Algorithme de Minasi : Stocke les coups joués dans un tableau, recherche le meilleur coups int cpt; int Maxproba = 0; int[] Tstat = new int[3]; Tstat[0] = Tstat[1] = Tstat[2] = 0; int nboccurence = 0; Tchoix[nbtour] = choix1; if (nbtour > 2) { for (cpt = 1; cpt <= nbtour - 1; cpt++) { if (Tchoix[cpt] == Tchoix[nbtour - 1]) { nboccurence = nboccurence + 1; if (Tchoix[cpt + 1] == 0) // pierre { Tstat[0] = Tstat[0] + 1; } if (Tchoix[cpt + 1] == 1) //papier { Tstat[1] = Tstat[1] + 1; } if (Tchoix[cpt + 1] == 2) //ciseau { Tstat[2] = Tstat[2] + 1; } } } } else { choix_random(ref choix2); } if (Tstat[0] > Tstat[1]) // Recherche du maximum { if (Tstat[0] > Tstat[2]) { Maxproba = 0; } } else { if (Tstat[1] > Tstat[2]) { Maxproba = 1; } else { Maxproba = 2; } } Maxproba = Maxproba + 1; // choix Minasi = choix adversaire + 1 if (nbtour > 2) {choix2 = Maxproba ;} // Choix du joueur 2 if (choix2 == 3) {choix2 = 0;} // Le 3 redevient 0 //Affichage du choix du joueur 2 convert_to_string(choix2); } static void algorithme_de_Shannon(ref int choix2, int nbtour, int choix, int[] Tstat, int[] Tchoix, int[] Tetat) { //Algorithme de Shannon : Affecte dans un arbre des probabilités, l'apparition des coups et l'état des parties, séléction du plus probable int i = 0; int Maxstat = 0; int Maxstatcontenu = 0; int j, k, l ; Tchoix[nbtour] = choix; if (nbtour > 2) { // 3*3*3=27 possibilités par tour for (j=0;j<=2;j++) { for (k=0;k<=2;k++) { for (l=0;l<=2;l++) { i = i + 1 ; if (Tetat[nbtour - 2] == j && Tchoix[nbtour - 1] == k && Tetat[nbtour - 1] == l) { Tstat[i] = Tstat[i] + 1; } Console.WriteLine("Stat n°"+i+" : "+ Tstat[i]+ " (tour "+(nbtour-2)+"="+j+", choix tour-1="+k+", etat précédent="+l+")"); //affiche l'arbre } } } for (i = 1; i <= 27; i++) // Recherche du maximum { //Console.WriteLine("Maxstat["+ (i-1) +"] : " + Tstat[i]); //Console.WriteLine("Maxstatcontenu : " + Maxstatcontenu); if (Tstat[i] > Maxstatcontenu) { Maxstat = i; Maxstatcontenu = Tstat[i]; } } // choix Shannon = choix adversaire le plus probable + 1 if (Maxstat == 1 || Maxstat == 2 || Maxstat == 3 || Maxstat == 10 || Maxstat == 11 || Maxstat == 12 || Maxstat == 19 || Maxstat == 20 || Maxstat == 21) {choix2 = 1;} if (Maxstat == 4 || Maxstat == 5 || Maxstat == 6 || Maxstat == 13 || Maxstat == 14 || Maxstat == 15 || Maxstat == 22 || Maxstat == 23 || Maxstat == 24) {choix2 = 2;} if (Maxstat == 7 || Maxstat == 8 || Maxstat == 9 || Maxstat == 16 || Maxstat == 17 || Maxstat == 18 || Maxstat == 25 || Maxstat == 26 || Maxstat == 27) {choix2 = 0;} convert_to_string(choix2); } else { choix_random(ref choix2); convert_to_string(choix2); } } static void gagnants_et_résultats(int choix1, int choix2, ref int scor1, ref int scor2, ref int[] Tetat, int nbtour) { // Détermination des gagnants et affichage des résultats Console.WriteLine(" "); if (choix1 == 0 && choix2 == 0) { Console.WriteLine("Partie Nulle."); Tetat[nbtour] = 1; //"nul" } else { if (choix1 == 0 && choix2 == 1) { Console.WriteLine("Le papier recouvre la pierre."); scor2 = scor2 + 1; Tetat[nbtour] = 0; //"perdu" } else { if (choix1 == 0 && choix2 == 2) { Console.WriteLine("La pierre casse les ciseaux."); scor1 = scor1 + 1; Tetat[nbtour] = 2; //"gagne" } } } if (choix1 == 1 && choix2 == 0) { Console.WriteLine("Le papier enveloppe la pierre."); scor1 = scor1 + 1; Tetat[nbtour] = 2; } else { if (choix1 == 1 && choix2 == 1) { Console.WriteLine("Partie Nulle."); Tetat[nbtour] = 1; } else { if (choix1 == 1 && choix2 == 2) { Console.WriteLine("Le ciseau coupe le papier."); scor2 = scor2 + 1; Tetat[nbtour] = 0; } } } if (choix1 == 2 && choix2 == 0) { Console.WriteLine("La pierre casse le ciseau."); scor2 = scor2 + 1; Tetat[nbtour] = 0; } else { if (choix1 == 2 && choix2 == 1) { Console.WriteLine("Le ciseau coupe le papier."); scor1 = scor1 + 1; Tetat[nbtour] = 2; } else { if (choix1 == 2 && choix2 == 2) { Console.WriteLine("Partie Nulle."); Tetat[nbtour] = 1; } } } //Affichage des résultats Console.WriteLine(" "); Console.WriteLine("Les scores sont :"); Console.WriteLine("Joueur1 : " + scor1); Console.WriteLine("Joueur2 : " + scor2); } } }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

abcdos
Messages postés
2
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
9 janvier 2006
-
merci mais je trouve beaucoup de fautes dans votre jeu a trois : pierre et papier et ciseau
je vous en prie de bien vouloir les corriger
abcdoss@yahoo.fr
cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
43 -
Salut,
J'ai essayé 2min ton jeu et j'ai aussi trouvé pas mal de bugs :

Le 1er, c'est qu'on ne peut pas changer de niveau (pourquoi? apparement, le code gère les niveaux, mais l'interface graphique ne laisse pas l'option).

Le 2ème, c'est que les algorithmes ne sont apparemment pas au point : En mode difficile, si je joue toujours ciseaux à la suite, je gagne tout le temps (sauf le premier coup (il joue toujours feuille)).

Y'en a surement encore d'autre, mais pour 2min d'essai, c'est déjà pas mal!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.