nbRest=15;
$this->affiche("");
$this->choix();
}
//fonction permettant de récupérer les valeurs passées par le formulaire
function init($nbPris,$nbAllumettes)
{
$this->nbRest=($nbAllumettes-$nbPris);
//exécution de la fonction joueOrdi()
$this->joueOrdi();
}
//fonction affichant les allumettes restantes (précédé éventuellement du message indiquant ce qu'a fait l'ordinateur)
function affiche($mesg)
{
//si un message est passé en paramètre
if (isset($mesg))
{
//affichage du message
echo "$mesg
";
}
//affichage d'un tableau avec une allumette dans chaque cellule
echo "";
//pour chaque allumette, affichage d'une cellule
for ($i=0;$i<$this->nbRest;$i++)
{
echo " | ";
}
//fermeture de la ligne et du tableau
echo "
";
}
//fonction affichant le select à l'humain pour que celui-ci choisisse 1, 2 ou 3 allumettes
function choix()
{
//on teste la variable nbRest
switch ($this->nbRest)
{
//s'il n'y a plus d'allumettes (l'humain a gagné)
case "0":
//exécution de la fonction finPartie()
$this->finPartie("humain");
break;
//s'il ne reste qu'une allumette (l'humain a perdu)
case "1":
//exécution de la fonction finPartie()
$this->finPartie("ordi");
break;
//s'il ne reste que deux allumettes
case "2":
//affichage du select contenant comme choix uniquement 1 ou 2
echo "";
break;
//s'il reste au moins 3 allumettes
default:
//affichage du select
echo "";
break;
}
}
//fonction calculant et retournant le nombre "idéal" d'allumettes à prendre (s'il existe)
//pour l'ordinateur
function calculeNb()
{
//calcul du reste de la division du nombre d'allumettes restant par 4
//pour connaitre le nombre d'allumettes que doit prendre l'ordinateur
//pour essayer de gagner
$rest=$this->nbRest%4;
//on teste le reste de la division
switch($rest)
{
//si le reste est égal à 0 (cas où il reste 4, 8 ou 12 allumettes)
case "0":
//l'ordinateur prend 3 allumettes
$choix=3;
break;
//si le reste est égal à 1 (cas où il reste 5, 9 ou 13 allumettes)
case "1":
//si l'humain joue bien, l'ordinateur a perdu, donc l'ordinateur prend
//ce qu'il veut
srand((double)microtime()*1000000);
$choix=rand(1,3);
break;
//si le reste est égal à 2 (cas où il reste 6, 10 ou 14 allumettes)
case "2":
//l'ordinateur prend 1 allumette
$choix=1;
break;
//si le reste est égal à 3 (cas où il reste 7, 11 ou 15 allumettes)
case "3":
//l'ordinateur prend 2 allumettes
$choix=2;
break;
}
//renvoie du choix de l'ordinateur
return($choix);
}
//fonction faisant jouer l'ordinateur
function joueOrdi()
{
//on teste la variable nbRest
switch ($this->nbRest)
{
//s'il ne reste plus qu'une allumette
case "1":
//l'ordinateur prend cette dernière allumette et a perdu
$choixOrdi=1;
break;
//s'il reste 2 allumettes
case "2":
//l'ordinateur (qui n'est quand même pas totalement idiot,
//quel que soit le niveau de difficulté) prend 1 allumette et a gagné
$choixOrdi=1;
break;
//s'il reste 3 allumettes
case "3":
//l'ordinateur prend 2 allumettes et a gagné
$choixOrdi=2;
break;
//tous les autres cas
default:
//le nombre a choisir est calculé par la fonction calculeNb()
$choixOrdi=$this->calculeNb();
break;
}
//on diminue le nombre restant d'allumettes du nombre qu'a choisi l'ordinateur
$this->nbRest-=$choixOrdi;
//éxécution de la fonction affiche() (on passe un message en paramètre indiquant
//le nombre d'allumettes qu'a pris l'ordinateur)
$this->affiche("L'ordinateur a pris $choixOrdi allumette(s)");
//exécution de la fonction choix() qui va permettre à l'humain de jouer
//ou va terminer la partie si l'ordinateur a perdu
$this->choix();
}
function finPartie($vainqueur)
{
echo "Fin de la partie
";
if ($vainqueur=="humain")
{
echo "Vous avez gagné !
";
}
else
{
echo "Vous avez perdu.
";
}
echo "Cliquez ici pour rejouer.
";
}
}
//si la partie n'est pas encore commencée, c'est-à-dire si nbAllumettes n'existe pas
if (!isset($nbAllumettes))
{
//création d'une nouvelle partie
$partie1=new partie;
$partie1->start();
$rest=$partie1->nbRest;
session_register("rest");
}
//si la partie est déjà commencée, c'est-à-dire si nbAllumettes existe
else
{
//on continue la partie en instanciant la classe "partie" (la précédente n'existe en effet plus)
//et en lançant la fonction "init()"
$partie1=new partie;
$partie1->init($nbPris,$nbAllumettes);
}
?>