示例#1
0
        public void GeraDigitosIniciais(SDMatrizModel matriz, int qtdeDigitosIniciais)
        {
            int digGerados = 0;

            if (qtdeDigitosIniciais > 0)
            {
                List <SDCelulaModel> listaAleatoriaCelulas = new List <SDCelulaModel>();

                matriz.Celulas.ForEach(celula =>
                {
                    listaAleatoriaCelulas.Add(new SDCelulaModel(celula));
                });

                listaAleatoriaCelulas.Shuffle();

                do
                {
                    SDCelulaModel cel = listaAleatoriaCelulas.Where(celula => celula.Valor == 0 || celula.Valor == null).First();

                    do
                    {
                        cel.Valor = rng.Next(1, 10);
                    } while (RetornaListaCelulasInvalidas(matriz, cel).Any());

                    matriz.Celulas.Where(celula => celula.Equals(cel)).First().Valor        = cel.Valor;
                    matriz.Celulas.Where(celula => celula.Equals(cel)).First().isCelulaDica = true;

                    AjustaStatusCelula(matriz, cel);

                    digGerados++;
                } while (digGerados < qtdeDigitosIniciais);
            }
        }
示例#2
0
 public void AlteraValorCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada, SDCelulaModel oldCelula)
 {
     using (ISDService sdService = new SDService())
     {
         sdService.AlteraValorCelula(matriz, celulaAlterada, oldCelula);
     }
 }
示例#3
0
 public void ValidaAlteracaoCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada)
 {
     using (ISDService sdService = new SDService())
     {
         sdService.AjustaStatusCelula(matriz, celulaAlterada);
     }
 }
示例#4
0
        private void SDMatrixGrid_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            var celulaEmEdicao = this.Matriz.Celulas.Find(celula => celula.PosicaoLinha == e.RowIndex + 1 &&
                                                          celula.PosicaoColuna == e.ColumnIndex + 1);

            OldCelula = new SDCelulaModel(celulaEmEdicao);
        }
示例#5
0
        private void GeraPrimeirosNoveDigitos(SDMatrizModel matriz, List <SDCelulaModel> listaAleatoriaCelulas)
        {
            for (int i = 1; i <= 9; i++)
            {
                SDCelulaModel cel = listaAleatoriaCelulas.Where(celula => celula.Valor == 0 || celula.Valor == null).First();
                cel.Valor = i;

                matriz.Celulas.Where(celula => celula.Equals(cel)).First().Valor           = cel.Valor;
                matriz.Celulas.Where(celula => celula.Equals(cel)).First().isCelulaInicial = true;
                matriz.Celulas.Where(celula => celula.Equals(cel)).First().PossiveisValores.Add(cel.Valor);
            }
        }
示例#6
0
        private List <int?> RetornaListaValoresBloqueados(SDMatrizModel matriz, SDCelulaModel celulaVerificada)
        {
            List <int?> listaValoresBloqueados = new List <int?>();

            matriz
            .Linhas
            .Find(linha => linha.NumeroSequencial == celulaVerificada.PosicaoLinha)
            .Celulas
            .Where(celula => celula.PosicaoColuna != celulaVerificada.PosicaoColuna &&
                   celula.Valor > 0 && celula.Valor != null)
            .ToList()
            .ForEach(celulaDaLinha =>
            {
                if (!listaValoresBloqueados.Contains(celulaDaLinha.Valor))
                {
                    listaValoresBloqueados.Add(celulaDaLinha.Valor);
                }
            });

            matriz
            .Colunas
            .Find(coluna => coluna.NumeroSequencial == celulaVerificada.PosicaoColuna)
            .Celulas
            .Where(celula => celula.PosicaoLinha != celulaVerificada.PosicaoLinha &&
                   celula.Valor > 0 && celula.Valor != null)
            .ToList()
            .ForEach(celulaDaColuna =>
            {
                if (!listaValoresBloqueados.Contains(celulaDaColuna.Valor))
                {
                    listaValoresBloqueados.Add(celulaDaColuna.Valor);
                }
            });

            matriz
            .Quadrantes
            .Find(quadrante => quadrante.Celulas.Contains(celulaVerificada))
            .Celulas
            .Where(celula => !celula.Equals(celulaVerificada) &&
                   celula.Valor > 0 && celula.Valor != null)
            .ToList()
            .ForEach(celulaDoQuadrante =>
            {
                if (!listaValoresBloqueados.Contains(celulaDoQuadrante.Valor))
                {
                    listaValoresBloqueados.Add(celulaDoQuadrante.Valor);
                }
            });

            return(listaValoresBloqueados);
        }
示例#7
0
        public void ReavaliaCelulasAposAlteracao(SDMatrizModel matriz, SDCelulaModel oldCelula)
        {
            var listaCelulasParaReavaliar = new List <SDCelulaModel>();

            listaCelulasParaReavaliar.AddRange(matriz.Linhas.Find(linha => linha.NumeroSequencial == oldCelula.PosicaoLinha)
                                               .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList());
            listaCelulasParaReavaliar.AddRange(matriz.Colunas.Find(coluna => coluna.NumeroSequencial == oldCelula.PosicaoColuna)
                                               .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList());
            listaCelulasParaReavaliar.AddRange(matriz.Quadrantes.Find(quadrante => quadrante.Celulas.Contains(oldCelula))
                                               .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList());

            foreach (var celulaParaReavaliar in listaCelulasParaReavaliar)
            {
                AjustaStatusCelula(matriz, celulaParaReavaliar);
            }
        }
示例#8
0
        public void AjustaStatusCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada)
        {
            var listaCelulasInvalidas = RetornaListaCelulasInvalidas(matriz, celulaAlterada);

            if (listaCelulasInvalidas.Any())
            {
                celulaAlterada.isCelulaValida = false;
            }
            else
            {
                celulaAlterada.isCelulaValida = true;
            }

            foreach (var celulaInvalida in listaCelulasInvalidas)
            {
                celulaInvalida.isCelulaValida = false;
            }
        }
示例#9
0
        private List <SDCelulaModel> RetornaListaCelulasInvalidas(SDMatrizModel matriz, SDCelulaModel celulaAlterada)
        {
            List <SDCelulaModel> listaCelulasInvalidas = new List <SDCelulaModel>();

            listaCelulasInvalidas.AddRange(matriz.Linhas.
                                           Find(linha => linha.NumeroSequencial == celulaAlterada.PosicaoLinha).
                                           Celulas.Where(celula => celula.PosicaoColuna != celulaAlterada.PosicaoColuna &&
                                                         celula.Valor == celulaAlterada.Valor &&
                                                         (celula.Valor > 0 && celula.Valor != null)).ToList());

            listaCelulasInvalidas.AddRange(matriz.Colunas.
                                           Find(coluna => coluna.NumeroSequencial == celulaAlterada.PosicaoColuna).
                                           Celulas.Where(celula => celula.PosicaoLinha != celulaAlterada.PosicaoLinha &&
                                                         celula.Valor == celulaAlterada.Valor &&
                                                         (celula.Valor > 0 && celula.Valor != null)).ToList());

            listaCelulasInvalidas.AddRange(matriz.Quadrantes.
                                           Find(quadrante => quadrante.Celulas.Contains(celulaAlterada)).
                                           Celulas.Where(celula => celula.PosicaoLinha != celulaAlterada.PosicaoLinha &&
                                                         celula.PosicaoColuna != celulaAlterada.PosicaoColuna &&
                                                         celula.Valor == celulaAlterada.Valor &&
                                                         (celula.Valor > 0 && celula.Valor != null)).ToList());

            return(listaCelulasInvalidas);
        }
示例#10
0
 public void AlteraValorCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada, SDCelulaModel oldCelula)
 {
     AjustaStatusCelula(matriz, celulaAlterada);
     ReavaliaCelulasAposAlteracao(matriz, oldCelula);
 }