J'ai reçu ce noël une jolie cible de fléchette (non électronique) .
J'aime jouer au 501 avec mes amis, seulement a chaque coup calculer manuellement la somme des point puis la soustraire aux capital .... ( ca va deux parties, après ...
C'est pourquoi j'ai développé une interface en HTML-CSS-JAVASCRIPT-PHP , me permettant de jouer de 1 à 6 joueurs, d'afficher l'historique de chaque joueurs pour la partie en cours et surtout de faire le calcul cité ci dessus .
Tout fonctionne impeccable !!!
Alors pourquoi ce message .... Simplement car comme tout développeur , j'aime paufiner et améliorer mes projets .
C'est pourquoi j'ai eu l'idée d'afficher au joueur avant qu'il ne joue un zone conseil avec les coup à jouer pour gagner la partie le meme tour .
Ex : Il reste au joueur un capital de 113 Points . je lui affiche :
- Un triple 19 ( 57 pts )
- Un Double 18 ( 36 pts )
- Un Simple 20 ( 20 pts )
for($x = 1 ; $x <= 20;$x = $x +1 ){for($y = 2; $y <= 40; $y = $y + 2){for($z = 3; $z <= 60;$z = $z + 3 ){if($x + $y + $z == $tot){$a = $x ;$b = $y ;$c = $z ;}}}}
Et voici cet algorithme utiliser dans le script :
$max_pts = $_POST['max_pts'];
$tot = $max_pts ;
// Simple + Double
if($tot > 0 and $tot < 6){
for($x = 0 ; $x <= 5;$x = $x +1 ){for($y = 2; $y <= 4; $y = $y + 2){if($x + $y == $tot){$a = $x ;$b = $y ;}}}
if(isset($a) and $b){
if($a > 0){$helper .= '<li>Un Simple '.$a ;}
$helper .= '<li>Un Double '.($b/2) ;
}
}
// Simple + Double + Triple
elseif($tot >= 6 and $tot <= 120){
for($x = 1 ; $x <= 20;$x = $x +1 ){for($y = 2; $y <= 40; $y = $y + 2){for($z = 3; $z <= 60;$z = $z + 3 ){if($x + $y + $z == $tot){$a = $x ;$b = $y ;$c = $z ;}}}}
if($a and $b and $c){
$helper .= '<li>Un Triple '.($c/3) ;
$helper .= '<li>Un Double '.($b/2) ;
$helper .= '<li>Un Simple '.$a ;
}
}
// Double + Double + Triple
elseif($tot > 120 and $tot <= 140){
for($x = 2 ; $x <= 40;$x = $x +2 ){for($y = 2; $y <= 40; $y = $y + 2){for($z = 3; $z <= 60;$z = $z + 3 ){if($x + $y + $z == $tot){$a = $x ;$b = $y ;$c = $z ;}}}}
if($a and $b and $c){
$helper .= '<li>Un Triple '.($c/3) ;
$helper .= '<li>Un Double '.($b/2) ;
$helper .= '<li>Un Double '.($a/2) ;
}
}
// Triple + Triple + Triple
elseif($tot > 140 and $tot <= 180){
for($x = 3 ; $x <= 60;$x = $x +3 ){for($y = 3; $y <= 60; $y = $y + 3){for($z = 3; $z <= 60;$z = $z + 3 ){if($x + $y + $z == $tot){$a = $x ;$b = $y ;$c = $z ;}}}}
if($a and $b and $c){
$helper .= '<li>Un Triple '.($c/3) ;
$helper .= '<li>Un Triple '.($b/3) ;
$helper .= '<li>Un Triple '.($a/3) ;
}
}
Comme vous pouvez le constater j'ai ajouter des vérifications de hauteur de $tot afin d'ajuster l'algorithme .Pour information, j'ai remplis x pages A4 de formules, calculs, tableaux,etc afin de pondre un algorithme efficace, j'ai clairement galéré là dessus .
Au final la seule solution qui fonctionne à tous les coups ( de 2 à 180 ), c'est en imbriquant 3 boucles ( c'est pas terrible pour les ressources ) .
Si vous trouvez des améliorations à cet algorithme, ou trouvez une meilleur méthode, n'hésitez pas !
A oui pour les curieux : Darts ( By Raphael.A) <-- Mon Application de fléchettes ( nécessite une cible et des fléchettes
A bientot