Exemple #1
0
        private double Heuristica(Terreno terreno)
        {
            var heuristica = Math.Abs(_inicio.x - terreno.x) + Math.Abs(_inicio.y - terreno.y);

            if (terreno.tipo == TipoTerreno.BaseInimiga)
            {
                var baseInimiga = (BaseInimiga)terreno;
                return(heuristica + baseInimiga.dificuldade / 1.3);
            }
            return(heuristica);
        }
Exemple #2
0
        void DesenhaCaminho(PaintEventArgs e)
        {
            Func <int, int> f = d => d * _tamanhoDoQuadrado;

            if (_caminho != null && _caminho.Count > 1)
            {
                for (int i = 0; i < _caminho.Count; i++)
                {
                    Terreno o = _caminho[i];
                    e.Graphics.FillRectangle
                    (
                        new SolidBrush(Color.FromArgb(128, Color.BlueViolet)),
                        f(o.x),
                        f(o.y),
                        _tamanhoDoQuadrado,
                        _tamanhoDoQuadrado
                    );
                }
            }
        }
Exemple #3
0
        private void RodaPrograma()
        {
            var grafo = CriaGrafoDoMapa();

            _inicio = grafo.PegarVertices().Single(node => node.tipo == TipoTerreno.Inicial);
            var fim = grafo.PegarVertices().Single(node => node.tipo == TipoTerreno.Final);

            CheckForIllegalCrossThreadCalls = false;
            Task.Run(() =>
            {
                _stopWatch = new Stopwatch();
                _stopWatch.Start();
                grafo.AEstrela(_inicio, fim, Heuristica, (caminho, pontuacao) => {
                    _caminho           = caminho;
                    _pontuacaoAEstrela = pontuacao;
                    Refresh();
                    Thread.Sleep(8);
                });
                //Refresh();
                RodaGa();
            });
        }