예제 #1
0
        private void InicializarCelulas()
        {
            Campo = new Celula[_linhas, _colunas];

            for (var linha = 0; linha < _linhas; linha++)
                for (var coluna = 0; coluna < _colunas; coluna++)
                    Campo[linha, coluna] = new Celula();
        }
예제 #2
0
 private void AdicionaCelularAdjacentes(List <Celula> fila, Celula atual)
 {
     for (int celulaI = -1; celulaI <= 1; celulaI++)
     {
         for (int celulaJ = -1; celulaJ <= 1; celulaJ++)
         {
             if (EhPosicaoValida(atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ))
             {
                 if (!this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ].EstaAberto)
                 {
                     this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ].EstaAberto = true;
                     fila.Add(this.celulas[atual.PosicaoI + celulaI, atual.PosicaoJ + celulaJ]);
                 }
             }
         }
     }
 }
예제 #3
0
        public bool DescobriuTodasAsBombas()
        {
            int casasSemBombaAbertas = 0;

            for (int i = 0; i < this.celulas.GetLength(0); i++)
            {
                for (int j = 0; j < this.celulas.GetLength(1); j++)
                {
                    Celula atual = this.celulas[i, j];

                    if (atual.EstaAberto)
                    {
                        casasSemBombaAbertas++;
                    }
                }
            }

            return(casasSemBombaAbertas == (this.celulas.GetLength(0) * this.celulas.GetLength(1)) - this.numeroDeBombas);
        }
예제 #4
0
        // Implementado usando busca em largura (BFS)
        public void AbrirCasasVazias(int i, int j)
        {
            List <Celula> fila     = new List <Celula>();
            int           ponteiro = 0;

            fila.Add(this.celulas[i, j]);
            this.celulas[i, j].EstaAberto = true;

            while (ponteiro < fila.Count)
            {
                Celula atual = fila[ponteiro];
                ponteiro++;

                if (atual.BombasAdjacentes == 0)
                {
                    AdicionaCelularAdjacentes(fila, atual);
                }
            }
        }