diff options
| author | Gaspard Coulet <gaspard.coulet@mines-ales.org> | 2021-04-28 23:05:53 +0200 |
|---|---|---|
| committer | Gaspard Coulet <gaspard.coulet@mines-ales.org> | 2021-04-28 23:05:53 +0200 |
| commit | 9fe033ea88c2f705ec18c232873d056e0c229d72 (patch) | |
| tree | 0647dc8c51610c7336c88c04de2068ea14b21e17 /sem_5/HLIN510_Web/tp2/Mastermind.php | |
Initial commit
Diffstat (limited to 'sem_5/HLIN510_Web/tp2/Mastermind.php')
| -rw-r--r-- | sem_5/HLIN510_Web/tp2/Mastermind.php | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/sem_5/HLIN510_Web/tp2/Mastermind.php b/sem_5/HLIN510_Web/tp2/Mastermind.php new file mode 100644 index 0000000..548af3a --- /dev/null +++ b/sem_5/HLIN510_Web/tp2/Mastermind.php @@ -0,0 +1,74 @@ +<?php +interface iMastermind { + public function __construct($taille=4); + public function test($code); + public function getEssais(); + public function getTaille(); +} + +/** classe dont une instance est un jeu de mastermind */ +class Mastermind implements iMastermind { + /** code à découvrir chaine de car compris entre 0 et 9 */ + protected $code=""; + + /** liste des essais */ + protected $lessai=array(); + + /** constructeur par défaut : génération d'un code aléatoire de taille + * chiffres différents + */ + public function __construct($taille=4){ + for($i=0;$i<$taille;$i++){ + $c=rand(0,9); // nouveau chiffre + $this->code.="$c"; + } + } + /** teste la validité d'une chaîne code et retourne un booléen : + * - que des chiffres ; + * - de même taille que $this->code + */ + public function valide($code){ + if(!is_string($code) || strlen($code)!=strlen($this->code) + || !ctype_digit($code)){ + return false; + } + return true; + } + /** teste une chaîne de caractères par rapport au code et retourne un + * tableau de 2 entiers : ( nb de chiffres bien placés, nb de chiffres mal + * placés ou false si invalide + */ + public function test($code){ + if(!$this->valide($code)) + return false; + $res=array("bon"=>0, "mal"=>0); + $tampon=$this->code; + for($i=0;$i<strlen($code);$i++){ // boucle des biens placés + if($tampon[$i]==$code[$i]){ + $tampon[$i]='Y'; // afin de ne plus le prendre en compte + $res["bon"]++; + } + } // fin de la boucle des biens placés + for($i=0;$i<strlen($code);$i++){ // boucle des mals placés + $pos = strpos($tampon,$code[$i]); + if (!($pos === false)) { + $res["mal"]++; + $tampon[$pos]='Y'; + } + } // fin de boucle des mals placés + $this->lessai[$code]=$res; + return $res; + } + + /** retourne la taille du code */ + public function getTaille () { + return strlen($this->code); + } + public function getEssais () { + return $this->lessai; + } +} +// $m=new Mastermind(); //pour tester +// print_r($m); +// print_r($m->test("1234")); +?> |
