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);
}
}
}
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.