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 | |
Initial commit
Diffstat (limited to 'sem_5/HLIN510_Web/tp2')
| -rw-r--r-- | sem_5/HLIN510_Web/tp2/Mastermind.php | 74 | ||||
| -rw-r--r-- | sem_5/HLIN510_Web/tp2/Rapport_TER_2019.pdf | bin | 0 -> 193816 bytes | |||
| -rw-r--r-- | sem_5/HLIN510_Web/tp2/master.php | 93 |
3 files changed, 167 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")); +?> diff --git a/sem_5/HLIN510_Web/tp2/Rapport_TER_2019.pdf b/sem_5/HLIN510_Web/tp2/Rapport_TER_2019.pdf Binary files differnew file mode 100644 index 0000000..c20b4ca --- /dev/null +++ b/sem_5/HLIN510_Web/tp2/Rapport_TER_2019.pdf diff --git a/sem_5/HLIN510_Web/tp2/master.php b/sem_5/HLIN510_Web/tp2/master.php new file mode 100644 index 0000000..58f8e26 --- /dev/null +++ b/sem_5/HLIN510_Web/tp2/master.php @@ -0,0 +1,93 @@ +<?php +//include "Mastermind.php"; // PLUS NÉCESSAIRE AVEC AUTOLOAD ! +function __autoload($classname){ // avant le session_start ! + include './' . $classname . '.php'; +} +session_start(); +if (isset($_POST['nouveau'])){ // SI nouvelle partie + $_SESSION=array(); +} +ini_set('display_errors', 1); error_reporting(E_ALL); +?> +<!doctype html> +<html lang="fr"> +<head> +<meta charset="utf-8" /> +<title>Site de jeu : Mastermind</title> +</head> +<body> +<h1 align="center">Mastermind</h1> +<form method="post"> +<p>Veuillez saisir successivement des combinaisons de + +<?php +$i=1; +if(isset($_SESSION['jeu'])){ // restauration objet Mastermind + $jeu=$_SESSION['jeu']; + // print_r($jeu); // DEBUG + $taille=$jeu->getTaille(); +}else { // début de partie + if(!empty($_GET['taille'])){ + $taille=(int)$_GET['taille']; + }else{ + $taille=4; + } + $jeu=new Mastermind($taille); + $_SESSION['jeu']=$jeu; +} +echo $taille; +?> chiffres jusqu'à la victoire ! +</p> +<table> + <tr> + <th align="left" valign="middle">Numéro</th> + <th align="left" valign="middle">Proposition</th> + <th align="left" valign="middle">Bien placé(s)</th> + <th align="left" valign="middle">Mal placé(s)</th> + </tr> +<?php + foreach($jeu->getEssais() as $code=>$res){ + echo "<tr><td>$i</td><td>".$code."</td><td>".$res['bon']. + "</td><td>".$res['mal']."</td></tr>\n"; + $i++; + } +if (!empty($_POST['prop'])){ // une proposition + $r=$jeu->test($_POST['prop']); // résultat + + if ($r===false){ // proposition invalide + echo "<tr><td>Incorrect</td><td>".$_POST['prop']. + "</td><td></td><td></td></tr>\n"; + }else { // valide ! + echo "<tr><td>$i</td><td>".$_POST['prop']."</td><td>".$r["bon"]. + "</td><td>".$r["mal"]."</td></tr>\n"; + $_SESSION['jeu']=$jeu; + $i++; + } + if ($r===false || $r["bon"]!=$taille){ // tq pas gagné ! + echo "<tr><td>$i</td><td>"; + echo "<input type='text' name='prop' autofocus size='".$jeu->getTaille(). + "'</td><td></td><td></td></tr>\n"; +?> + </table> + <input type="submit" value="OK"> +<?php + }else{ // GAGNE +?> + <tr><td></td><td>GAGNE !</td><td></td></tr> + </table> +<?php + } +}else{ // pas de proposition + echo "<tr><td>$i</td><td>"; + echo "<input type='text' name='prop' autofocus size='".$jeu->getTaille(). + "'</td><td></td><td></td></tr>\n"; +?> + </table> + <input type="submit" value="OK"> +<?php +} +?> + <input type="submit" name="nouveau" value="Nouvelle Partie"> + </form> + </body> +</html> |
