Tetrano - Un jeu de société en ligne

Tetrano - jeu en ligneLa société TalentCachet m'a récemment contacté pour adapter l'un des jeux de société qu'il distribue en une version en ligne.   Objectifs: un mode 1 joueur (contre l'ordinateur, donc), et un mode 2 joueurs, conçu pour permettre aux internautes de jouer entre eux.   Un premier choix a dû s'effectuer au niveau du choix des technologies à utiliser pour réaliser ce jeu en ligne. Il eut été plus "ordinaire" de choisir du flash pour réaliser ce jeu, mais ne maîtrisant pas suffisamment ce langage pour le proposer à un client, j'ai orienté mon choix vers du html/jquery (jquery étant une libraire javascript bien pratique).       Ayant découvert, récemment, grâce à Julien Roussel, professeur à l'IESA Multimédia , que l'on pouvait stocker des objets en session (sous réserve de déclarer les classes avant l'initialisation de la session), j'ai donc appliqué cette trouvaille au système "Tetrano".   Il m'a fallu concevoir un système "adaptable" à des évolutions futures : le tetrano se présente en effet comme un plateau de 4 lignes, 4 colonnes, avec 4 jetons de taille différente. Le développement devait donc fonctionner également avec une ligne/colonne de plus et / ou une taille de jeton supplémentaire.   Cette considération est contraignante, notamment au niveau du calcul des conditions de victoire : je ne pouvais donc pas utiliser dans le code toutes les possibilités de combinaisons gagnantes, mais plutôt le calcul des combinaisons gagnantes. Concrètement, plutôt que de spécifier : si j'ai un jeton de telle taille sur la colonne 1, 2, 3, et 4 sur la ligne 1, j'ai plutôt codé :   for($i=0;$i<$this->lignes,$i++){ $scores=array(); for($j=0;$j<$this->colonnes;$j++){ for($k=0;$k<=$this->tailles_possibles;$k++){ if($case[$i.':'.$j]->degres['degres_'.$k]) $scores['degres_'.$k]++; } }   foreach($scores as $score){ if($score>= $this->tailles_possibles)$victoire=true; } }     Rien d'excessivement compliqué. Néanmoins, d'autres combinaisons permettent la victoire. Dans les plus "simples" à coder, on note les gains de jetons de même taille alignés en ligne, en colonne, ou en diagonale, ou encore un jeton de chaque taille sur un même taille. Dans les plus "vicelardes" (comprenez "hard à coder"), on a également les lignes, colonnes et diagonales, contenant 1 jeton de chaque taille organisés par taille croissante et décroissante.   Hm. Mal de tête en perspective ^^     Après le codage des conditions de victoire, il m'a fallu réfléchir à la manière dont l'ordinateur devait calculer son prochain coup. Lorsqu'aucune directive n'est prévue (concrètement: aucun risque de victoire de l'utilisateur), l'ordinateur joue au hasard. Lorsque le joueur place combinaison correspondant à " victoire - 1" (c'est à dire: nombre de tailles de jetons disponibles - 1 ), alors on prépare le coup suivant (l'occasion de faire tout plein de nouveaux foreach et for ;) ).   Au final, le seul moyen de battre l'ordinateur est de le placer dans une situation où 2 actions seraient nécessaires pour bloquer la victoire de l'utilisateur (vous savez, comme au morpion ou au puissance 4).     Je suis donc plutôt satisfait du résultat, compte tenu du fait que le Tetrano en ligne est devenu un bon jeu de réflexion qui vous musclera les neurones ;-)     Je vous invite à l'essayer ici : http://talentcachet.fr/tetrano/ , et, bien entendu, à me faire part de vos remarques...