IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Déterminer qui a gagné au jeu de hex


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut Déterminer qui a gagné au jeu de hex
    Bonjour.
    J'ai codé un jeu de Hex. Il fonctionne!!! C'est même assez simple finalement a faire.
    Le problème c'est que je ne sais pas comment faire en sorte d'afficher qui a gagné ou perdu c'est embêtant.

    Je stock dans un tableau les couleurs des cases et leur positions:
    1_1: x y et color
    1_2: …
    Le premier chiffre de la clé étant la ligne et le second la colone. Donc la case tout a en bas droite c'est 9_9 et tout en bas a gauche 1_9…

    J'y réfléchis depuis un petit moment et je n'ai pas de solution surtout que si vous connaissez ce jeu on peut partir dans toute les directions c'est donc pas facile.

    Dans un premier temps, je pensais vérifier les bord pour déterminer si déjà un joueurs a posé un pions au debut et a la fin, car si il y en a pas il ne peut pas avoir gagné.
    Ensuite je pensais faire une fonction qui bouclerais sur la première ligne pour recup le chaque pions du joueur posé et lancé ma fonction qui descendrait sur la grille.

    Voila ce que j'ai fait pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    	function test() {
     
    		for (var i=1;i<=NombreBloc;i++) {
    			log(pions);
    			// log(pions[i + "_1"]);
     
    			key = i + "_1";
    			data = pions[i + "_1"];
    			if(data['couleur'] == joueur_couleur['joueur_1'])
    				{
    					text = "test: " + key + " " + data['couleur'];
    					// log(data);
    					if(key == "1_1")
    						{
    							log(text + " - On est tout a gauche");
    						}
    					else if((key >= "1_1") && (key <= "8_1"))
    						{
    							log(text + " - On est pas sur les bord");
    						}
    					else if(key == "9_1")
    						{
    							log(text + " - On est tout a droite");
    						}
    					else
    						{
    						}
    				}
    			else
    				{
    				}
    		}
    		log("-----");
    	}
    mais j'ai peur de partir dans une boucle infinie, comment faire ?

    Exemple de chemin du joueur blanc:
    Nom : HEX_1.jpg
Affichages : 1062
Taille : 89,6 Ko

    Vu qu'il peut partir dans toute les directions, je vois pas trop comment faire.

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 099
    Par défaut
    Bonjour !

    Comme il s’agit d’un problème relativement classique, je ne vais pas te donner une solution toute faite, mais plutôt des indices et des pistes.

    Pour commencer, tu auras probablement besoin d’une fonction qui, pour un pion donné, te renvoie les 6 pions qui sont dans son voisinage.
    Pour faire ça, tu dois d’abord trouver un moyen de dire si deux pions sont voisins ou non. Étant donné deux pions A et B, il faut donc utiliser les positions xA, yA, xB et yB, et trouver les conditions que ces positions doivent remplir pour que les pions soient voisins. Il faudra probablement mettre des +1 ou des -1 quelque part.

    Ensuite tu as un concept de « chaîne de voisins » qu’il faut que tu arrives à mettre en œuvre. Personnellement j’utiliserais une file (structure FIFO, First In = First Out).

    Pour mettre en œuvre une file en JavaScript, on utilise Array avec un couple de méthodes : l’une pour insérer, l’autre pour retirer. Par exemple le couple push / shift :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var queue = [];
    queue.push(3);
    queue.push(24);
    queue.push(7);
     
    // à ce moment la file contient [ 3, 24, 7 ]
     
    queue.shift(); // renvoie 3
     
    // la file contient [ 24, 7 ]
     
    queue.push(150);
     
    // la file contient [ 24, 7, 150 ]
    Alternativement il y a le couple unshift / pop qui fait circuler le contenu de la file dans l’autre sens. C’est selon ta préférence.

    Le principe est le suivant :
    1. je commence par retirer les marqueurs « pion traité » de tous les pions du plateau ;
    2. je choisis une couleur et un des deux bords de cette couleur ;
    3. je prends tous les pions de la couleur attendue qui se trouvent sur ce bord, et je les mets dans la file.
    4. Ensuite, je retire un pion de la file et :
      1. je vérifie si le pion se trouve sur l’autre bord. Si c’est le cas, victoire !
      2. Sinon, pour chaque voisin du pion donné, si ce voisin n’a pas été marqué comme traité, et s’il a la couleur attendue, je l’ajoute à la file.
      3. Je marque le pion comme traité.
    5. je recommence tant qu’il y a des pions dans la file.


    Le fait de regarder tous les voisins à chaque fois nous permet de vérifier toutes les directions que peut prendre le chemin. L’ajout du marqueur « pion traité » nous assure que le script ne va pas partir en boucle infinie.

    C’est une forme simple d’algorithme de recherche de chemin.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Une autre formulation, peut-être? Imaginons que les cases soient métalliques :
    - La première rangée de cases, celles du haut, sont reliées au 5 V.
    - La dernière rangée de cases, celles du bas, sont reliées au 0 V.
    - Les autres cases sont, au début, à un potentiel indéterminé.
    Le courant électrique peut-il passer?
    Passons en revue chaque case, rangée après rangée, en commençant par le haut. Si une case métallique est à proximité d'une case au potentiel 5 V, alors son potentiel est de 5 V.
    On passe en revue plusieurs fois l'ensemble des cases jusqu'à ce qu'aucun changement de potentiel ne soit constaté.

  4. #4
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Je demande rien de tout prêt juste une façon de faire, bref juste une idée.

    J'ai fait une méthode qui retourne tous les pions autour du pions posé comme dit plus haut.


    Je pensais que ma méthode était parfaite: quand je pose un pion, je regarde si il touche un pion de la même couleur et ainsi de suite... et a la fin je regarde si ça touche les bords. Mais je n'avais pas pensé a un truck: je testais en reliant les cases, mais on peut jouer en faisant plusieurs chemin et les relié plus tard et donc la chaine serait rompu et ça je ne sais pas comment le tester!!!

    Donc je n'ai pas avancé plus loin.

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 099
    Par défaut
    Je ne sais pas si j’ai bien compris ce que tu veux dire, mais si tu as un « début de chemin » associé à chaque pion, alors il faut gérer le cas où un nouveau pion est posé près d’un ou plusieurs autres pions qui font déja partie d’un chemin. Et dans le cas où ça relie deux chemins différents, alors il faut « fusionner » ces deux chemins, en notant d’une façon ou d’une autre le fait qu’ils sont équivalents.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    En gros j'ai un tableau qui contient chaque case: les positions et le statut de la case...
    Quand je touche une case je regarde autour si il y en a une de la même couleur et donc qu'elle se touche.
    Donc je pensais qu'il me restait plus qua voir si je touchais les bord mais ça me garantie pas que la chaine soit entière et donc sans coupure!

    Il faudrait peut être que je boucle sur toute les cases de la même couleur et que je vois si j'arrive de l'autre côté ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/03/2012, 20h38
  2. Développement d'un jeu en Hex
    Par Z4ng3tsu dans le forum Langage
    Réponses: 9
    Dernier message: 08/12/2011, 15h41
  3. Qui calcule dans un jeu multi joueur ?
    Par Davidbrcz dans le forum Réseau et multijoueurs
    Réponses: 16
    Dernier message: 18/08/2010, 09h37
  4. Char qui est en fait de l'hex..
    Par joseph20480 dans le forum C
    Réponses: 3
    Dernier message: 10/06/2010, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo