Example #1
0
    static void Main(string[] args)
    {
        //Console.WriteLine("Hello");
        //Queue<int> queue = new Queue<int>();

        //queue.Enqueue(0);
        //queue.Enqueue(1);
        //queue.Enqueue(2);
        //queue.Enqueue(3);
        ////Console.WriteLine("Q: " + queue.Dequeue());
        ////Console.WriteLine("Q: " + queue.Dequeue());
        ////Console.WriteLine("Q: " + queue.Dequeue());
        ////Console.WriteLine("Q: " + queue.Last<int>());
        //Console.ReadLine();

        GameData game = GameData.Instance = new GameData();
        AI       ai   = new AI_V2();

        GameExecution.InitGameAndZoneInfo(game, DateTime.Now.Ticks);

        while (true)
        {
            GameExecution.InitTurnInfoAndCallStartUpdate(game, DateTime.Now.Ticks);
        }
    }
Example #2
0
    static void Main(string[] args)
    {
        GameData game = GameData.Instance = new GameData();
        AI       ai   = new AI_V2();

        GameExecution.InitGameAndZoneInfo(game, DateTime.Now.Ticks);

        while (true)
        {
            GameExecution.InitTurnInfoAndCallStartUpdate(game, DateTime.Now.Ticks);
        }
    }
    /// <summary>
    /// Faz a movimentação seguindo o melhor caminho.
    /// Algoritmo utilizado é o AStar
    /// </summary>
    /// <param name="hitPosition"></param>
    private void MovePath(Vector3 hitPosition)
    {
        this.moveByPath = true;
        Nodo nodeOrigin = this.GetComponent<Nodo>();
        nodeOrigin.ListaAdj.Clear();

        List<GameObject> nodesDestino = new List<GameObject>(GameObject.FindGameObjectsWithTag("NodoDestino"));

        nodesDestino.ForEach(linq => { GameObject.Destroy(linq); });

        Instantiate(this.nodoDestino, hitPosition, Quaternion.identity);
        this.nodoDestino.transform.position = hitPosition;

        List<GameObject> nodesAdj = new List<GameObject>(GameObject.FindGameObjectsWithTag("Nodo"));

        if (nodesAdj.Count > 0) {
            nodesAdj.ForEach(linq => {
                linq.GetComponent<Nodo>().ListaAdj.Remove(this.nodoDestino);
                linq.GetComponent<Nodo>().adjacentes = linq.GetComponent<Nodo>().ListaAdj.ToArray();
            });

            List<GameObject> tst = nodesAdj.Where(l => l.GetComponent<Nodo>().adjacentes.Contains(nodoDestino)).ToList();
            // TODO: Verificar fazer adjacencia por um determinado Raio de circunferência.
            List<GameObject> originAdj = nodesAdj.Where(linq => Vector3.Distance(nodeOrigin.transform.position, linq.transform.position) < nodeDistance).ToList();

            foreach (GameObject n in originAdj) {
                nodeOrigin.ListaAdj = new List<Nodo>();
                Nodo node = n.GetComponent<Nodo>();
                nodeOrigin.ListaAdj.Add(node);
            }
            nodeOrigin.adjacentes = nodeOrigin.ListaAdj.ToArray();

            nodesAdj.ForEach(linq => {
                Nodo node = linq.GetComponent<Nodo>();

                node.G = Vector3.Distance(this.transform.position, linq.transform.position) + Vector3.Distance(linq.transform.position, hitPosition);
                node.H = Vector3.Distance(linq.transform.position, hitPosition);
            });
            List<GameObject> adj = nodesAdj.Where(linq => Vector3.Distance(hitPosition, linq.transform.position) < nodeDistance).ToList();
            foreach (GameObject item in adj) {
                Nodo node = item.GetComponent<Nodo>();
                node.ListaAdj.Add(this.nodoDestino);
                node.adjacentes = node.ListaAdj.ToArray();
            }
        }

        GameExecution exc = new GameExecution();
        exc.criaNodos(nodeOrigin, this.nodoDestino);

        pathNodes = exc.buscaAStar(nodeOrigin, this.nodoDestino);

        pathNodes.Remove(this.GetComponent<Nodo>());
    }