// 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); } } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter