示例#1
0
        public void Voltar(PilhaLista <Movimentos> pilha, ref int linhaAtual, ref int colunaAtual, DataGridView dgv) //caso nao seja possível avançar, volta para a posição anterior
        {
            Movimentos mov = pilha.OTopo();

            linhaAtual  = mov.Linha;
            colunaAtual = mov.Coluna;
        }
示例#2
0
 public void Avançar(PilhaLista <Movimentos> pilha, int proximaLinha, int proximaColuna, ref int linhaAtual, ref int colunaAtual, ref bool seMoveu, DataGridView dgv)
 // passa para a próxima posição possível e marca com um "X" as posições que ja foram passadas
 {
     seMoveu = true;
     matriz[proximaLinha, proximaColuna] = 'X';
     linhaAtual  = proximaLinha;
     colunaAtual = proximaColuna;
     pilha.Empilhar(new Movimentos(linhaAtual, colunaAtual));
 }
示例#3
0
        public void PilhaMovimentos(DataGridView dgv) //método principal da classe. Testa todos os movimentos e chama os demais métodos quando necessário.
        {
            var pilha = new PilhaLista <Movimentos>();

            pilha.Empilhar(new Movimentos(1, 1));

            int linhaAtual  = 1,
                colunaAtual = 1;

            bool temCaminhoPossivel = true;

            int[] movLinhas  = { -1, -1, 0, 1, 1, 1, 0, -1 };
            int[] movColunas = { 0, 1, 1, 1, 0, -1, -1, -1 };

            while (temCaminhoPossivel)
            {
                bool seMoveu = false;
                for (int i = 0; i < movLinhas.Length; i++)
                {
                    int proximaLinha  = linhaAtual + movLinhas[i];
                    int proximaColuna = colunaAtual + movColunas[i];

                    if (PosicaoEstaVazia(proximaLinha, proximaColuna))
                    {
                        Avançar(pilha, proximaLinha, proximaColuna, ref linhaAtual, ref colunaAtual, ref seMoveu, dgv);
                    }
                    else
                    if (chegou(proximaLinha, proximaColuna))
                    {
                        pilha.Empilhar(new Movimentos(proximaLinha, proximaColuna));
                        caminhosEncontrados.Add(pilha.Clone());
                        pilha.Desempilhar();
                    }
                }

                if (seMoveu == false)
                {
                    pilha.Desempilhar();
                    if (pilha.EstaVazia)
                    {
                        temCaminhoPossivel = false;
                    }
                    else
                    {
                        Voltar(pilha, ref linhaAtual, ref colunaAtual, dgv);
                    }
                }
            }
        }
示例#4
0
        public void MostrarMovimentos(DataGridView dgv) //mostra a lista de pilhas de caminhos no dataGridView da direita
        {
            ajustarDgv(dgv);
            int linhaDgv = 0;

            foreach (PilhaLista <Movimentos> caminho in caminhosEncontrados)
            {
                PilhaLista <Movimentos> caminhoClonado = caminho.Clone();
                int t = caminhoClonado.Tamanho;
                for (int i = t - 1; i >= 0; i--)
                {
                    Movimentos mov = caminhoClonado.Desempilhar();
                    dgv.Rows[linhaDgv].Cells[i].Value = mov.Linha + " " + mov.Coluna;
                }
                linhaDgv++;
            }
        }
示例#5
0
        private void dgvCaminhos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            for (int linha = 0; linha < dgvLabirinto.RowCount; linha++)
            {
                for (int coluna = 0; coluna < dgvLabirinto.ColumnCount; coluna++)
                {
                    dgvLabirinto.Rows[linha].Cells[coluna].Style.BackColor = Color.White;
                }
            }

            PilhaLista <Caminho> pilhaOriginal      = osCaminhos[dgvCaminhos.CurrentCell.RowIndex];
            PilhaLista <Caminho> pilhaCaminhosClone = pilhaOriginal.Clone();

            while (!pilhaCaminhosClone.EstaVazia)
            {
                Caminho caminhoSelecionado = pilhaCaminhosClone.Desempilhar();

                dgvLabirinto.Rows[caminhoSelecionado.Linha].Cells[caminhoSelecionado.Coluna].Style.BackColor = Color.LightBlue;
            }
        }