Forums Développement Multimédia

Aller au contenu

[as2] Pathfinding pour un MAHJONG CONNECT

CODE DETENTE

1 réponse à ce sujet

#1 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 21 January 2015 - 15:04 PM

Bonjour,

Alors pour faire suite à ce sujet : http://forums.mediab...85#entry1166085

(D'ailleurs merci à Jano et a Monsieur Spi pour leur aide jusqu'à présent !)

J'ai créé un prototype de Mahjong connect simplifié de 25 cases chacune ayant un chiffre entre 1 et 9...

Pour l'instant grace à ce code (en AS2) les 25 cases sont crées, rangées dans un tableau et nous pouvons en sélectionner deux :


monTableau = []; // ok
nombreObjets = 25; // ok
ligne = 1;
compteLignes = 0;
choix1 = 0;
choix2 = 0;
poud = 0;

for (i = 0; i < nombreObjets; i++)
{
                spawn = attachMovie('caze', "caze"+i, i); // créer l'objet
                monTableau.push(spawn); // puis le placer dans le tableau
         
                compteLignes++; // incrémentation directe
                if (compteLignes == 6)
                {
                                ligne++; // incrémentation directe
                                compteLignes = 1;
                }
                spawn._x = (50 * (i + 1)) - (250 * (ligne - 1));
                spawn._y = 50 * ligne;
                numHasard = Math.round(Math.random() * 8 + 1);
                spawn.nbr.text = numHasard;
 
}

select.onEnterFrame = kelcase;
//select est une sorte de curseur invisible de la même taille qu'une case qui se déplace de 50 en 50
function kelcase() {
this.onRelease = selectionner;
if(_xmouse>50 && _xmouse<300 && _ymouse>50 && _ymouse<300){
if(_xmouse>select._x+50){select._x+=50}
if(_xmouse<select._x){select._x-=50}
if(_ymouse<select._y){select._y-=50}
if(_ymouse>select._y+50){select._y+=50}
}
}

function selectionner()
{
poud+=1;//"poud" c'est pour définir si c'est le Premier choix OU le Deuxieme
if(poud==1){
  choix1 = ((this._x/50)+((this._y-50)/50)*5);
  choix2 = "X";
  txt1.text = "choix 1 = case "+choix1+" qui a pour num "+(monTableau[choix1-1].nbr.text)+" et pour index "+(choix1-1);
  monTableau[choix1-1].base.gotoAndStop(2);
  }
if(poud==2){
  choix2 = ((this._x/50)+((this._y-50)/50)*5);
  txt2.text = "choix 2 = case "+choix2+" qui a pour num "+(monTableau[choix2-1].nbr.text)+" et pour index "+(choix2-1);
  monTableau[choix2-1].base.gotoAndStop(2);
  }
if(poud==3){
  monTableau[choix1-1].base.gotoAndStop(1);
  monTableau[choix2-1].base.gotoAndStop(1);choix1 = ((this._x/50)+((this._y-50)/50)*5);
  poud=1;
  choix2 = "X";
  txt1.text = "choix 1 = case "+choix1+" qui a pour num "+(monTableau[choix1-1].nbr.text)+" et pour index "+(choix1-1);
  txt2.text ="";
  monTableau[choix1-1].base.gotoAndStop(2);}
}
 

Ce qui donne ça :
Image IPB
Maintenant mon soucis c'est que je dois déterminer si il y à un chemin qui peut relier les deux cases sélectionnées...
Image IPB
Dans ce cas il y à un chemin mais il demanderais 4 mouvements et le mahjong connect limite à 3 mouvements maximum...
Image IPB
2 mouvements = OK

Image IPB
3 mouvements = OK !

Voilà quelques exemples de chemins (sauf que dans le mien il y aura une gravité donc pas de case flotante)
Image IPB

Mon soucis maintenant : Le nombre de mouvement n'est pas encore ma priorité, j'aimerais savoir définir si un chemin libre (sans case) existe entre deux cases choisie, faut il checker tout les chemins et surtout comment le faire dynamiquement car dans ce prototype il n'y à que 25 cases mais dans le final il y en aura + de 100...

Je ne sait pas si il faut carrément fouiller du coté du pathfinding A* mais je pense qu'il y a plus simple ?
Et du coup il faut quand même penser que ce code devra pouvoir comprendre la logique des 3 mouvements maximum...

Merci beaucoup pour vôtre aide, je suis complètement perdu !

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 21 January 2015 - 16:04 PM

Salut,

Un peu de lecture :

http://fr.wikipedia....erche_de_chemin
http://forums.mediab...lgorithme_astar
http://forums.mediab..._astar_pratique

Un exercice :
http://forums.mediab...orm/jeux/pacman



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP