コード例 #1
0
        public void setTarget(int xStart, int yStart, int xEnd, int yEnd)
        {
            utilizados = new List <Tile>();
            emEspera   = new LinkedList <Tile>();
            start      = tilemap[xStart][yStart];
            Tile endTile;

            try {
                endTile = tilemap[xEnd][yEnd];
            } catch (Exception e) {
                endTile = null;
            }
            if (endTile == null)
            {
                endTile = start;
            }
            start.pai       = null;
            start.egasto    = 0;
            start.distancia = start.calculaDistancia(endTile);
            emEspera.AddFirst(start);
            melhorcaminho      = start;
            alvo               = endTile;
            concluido          = false;
            caminhoInexistente = false;
        }
コード例 #2
0
 public void setTarget(Tile startTile, Tile endTile)//usar quando tem os Tiles ou quando não é um mapa quadrado
 {
     utilizados          = new List <Tile>();
     emEspera            = new LinkedList <Tile>();
     startTile.pai       = null;
     startTile.egasto    = 0;
     startTile.distancia = startTile.calculaDistancia(endTile);
     emEspera.AddFirst(startTile);
     melhorcaminho      = startTile;
     alvo               = endTile;
     concluido          = false;
     caminhoInexistente = false;
 }
コード例 #3
0
        //usa linked list e deixa lista ordenada para agilizar procura do melhor caminho
        private void organizaEadiciona(Tile pai)
        {
            List <Tile>           naoOrganizados = pai.visinhos;
            bool                  notInserted;//escolhido.getEgasto()+1, (int)(Point.distance(escolhido.getX(),escolhido.getY()-1, xAlvo,yAlvo)
            LinkedListNode <Tile> node;
            Tile                  aOrganizar;

            for (int i = 0; i < naoOrganizados.Count; i++)
            {
                notInserted = true;
                aOrganizar  = naoOrganizados[i];
                if (!utilizados.Contains(aOrganizar) && !emEspera.Contains(aOrganizar))
                {
                    aOrganizar.pai = pai;
                    if (rndN != 1)
                    {
                        aOrganizar.egasto = pai.egasto + rnd.Next(rndN);
                    }
                    else
                    {
                        aOrganizar.egasto = pai.egasto + 1;
                    }
                    aOrganizar.distancia = alvo.calculaDistancia(aOrganizar);
                    node = emEspera.First;
                    while (node != null)
                    {
                        if (aOrganizar.distancia + aOrganizar.egasto < node.Value.distancia + node.Value.egasto)
                        {
                            notInserted = false;
                            emEspera.AddBefore(node, aOrganizar);
                            break;
                        }
                        node = node.Next;
                    }
                    ;
                    if (notInserted)
                    {
                        emEspera.AddLast(aOrganizar);
                    }
                }
            }
        }
コード例 #4
0
 //usar quando tem os Tiles ou quando não é um mapa quadrado
 public void setTarget(Tile startTile, Tile endTile)
 {
     utilizados = new List<Tile>();
     emEspera = new LinkedList<Tile>();
     startTile.pai = null;
     startTile.egasto = 0;
     startTile.distancia = startTile.calculaDistancia(endTile);
     emEspera.AddFirst(startTile);
     melhorcaminho = startTile;
     alvo = endTile;
     concluido = false;
     caminhoInexistente = false;
 }
コード例 #5
0
 public void setTarget(int xStart, int yStart, int xEnd, int yEnd)
 {
     utilizados = new List<Tile>();
     emEspera = new LinkedList<Tile>();
     start = tilemap[xStart][yStart];
     Tile endTile;
     try {
         endTile = tilemap[xEnd][yEnd];
     } catch (Exception e) {
         endTile = null;
     }
     if (endTile == null) {
         endTile = start;
     }
     start.pai = null;
     start.egasto = 0;
     start.distancia = start.calculaDistancia(endTile);
     emEspera.AddFirst(start);
     melhorcaminho = start;
     alvo = endTile;
     concluido = false;
     caminhoInexistente = false;
 }