예제 #1
0
        public void InserirPosicao(string Valor, int Posicao)
        {
            Elemento Novo    = new Elemento();
            Lista    ListAux = new Lista();

            Novo.Cor = Valor;

            if (Posicao == Tamanho + 1)             //Utiliza o TAD para inserir no final
            {
                this.InserirFinal(Valor);
            }
            else if (Posicao == 1)
            {
                this.InserirInicio(Valor);          //Utiliza o TAD para inserir no início
            }
            else if (Inicio == null)                //Se não houver elementos na lista, início e fim se tornam "Novo"
            {
                Inicio = Novo;
                Fim    = Novo;

                Novo.Prox = null;
                Novo.Ant  = null;
                Tamanho++;
            }                                       //Caso a posicão seja intermediária na lista.
            else
            {
                int cont = Tamanho + 1;
                Aux = Fim;                           //Percorre a lista original, do Fim até o Início
                while (Aux != null)
                {
                    if (cont == Posicao)             //Quando encontrar a posição que o usuário solicitou para a inserção, insere-se na lista auxiliar
                    {                                //destá forma, a lista auxiliar terá um elemento a mais, do que a lista original, na posição desejada.
                        ListAux.InserirInicio(Novo.Cor);
                        Tamanho++;
                    }
                    ListAux.InserirInicio(Aux.Cor);
                    Aux = Aux.Ant;
                    cont--;
                }
                this.EsvaziarLista();                          //Esvazia a lista original
                ListAux.Aux = ListAux.Fim;                     //Percorre a lista auxiliar de Fim até Início
                while (ListAux.Aux != null)                    //Preenche a lista original com todos os elementos da lista auxiliar, inclusive o inserido pelo usuário.
                {
                    this.InserirInicio(ListAux.Aux.Cor);
                    ListAux.Aux = ListAux.Aux.Ant;
                }
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            Random x = new Random();
            int    Posicao;
            string cor = "";
            int    op  = 0;

            do
            {
                Lista MinhaLista = new Lista();     // Instância da classe
                while (MinhaLista.Tamanho != 8)     //Gerar os 8 primeiros elementos.
                {
                    cor = GeraCor(x);
                    MinhaLista.InserirInicio(cor);
                    MinhaLista.VerificarPontos();
                }

                do
                {
                    MinhaLista.VerificarPontos();       //Verifica se existem 3 ou mais elementos em sequência

                    MinhaLista.MostraListaINIFIM();
                    cor = GeraCor(x);                   //Gera uma cor aleatória

                    Console.Write("\nPróxima cor: ");

                    ConsoleUtils.ChangeConsoleColor(cor);

                    Console.WriteLine(cor);

                    ConsoleUtils.ChangeConsoleColor();

                    Console.Write("Posição para inserir: ");
                    Posicao = int.Parse(Console.ReadLine());    //Usuário escolhe onde será inserida

                    if (Posicao > MinhaLista.Tamanho)
                    {
                        Posicao = MinhaLista.Tamanho + 1;
                    }
                    MinhaLista.InserirPosicao(cor, Posicao);     //Executa a inserção

                    MinhaLista.MostraListaINIFIM();
                } while (MinhaLista.Tamanho <= 20);
                Console.Clear();

                Console.WriteLine("Elementos na lista: " + MinhaLista.Tamanho);
                Console.WriteLine("Pontuação: " + MinhaLista.Pontuacao);
                Console.WriteLine("\nVocê perdeu!!");
                Console.WriteLine("Deseja jogar novamente ?");
                Console.WriteLine("[1] - Sim\n[2] - Não");
                op = int.Parse(Console.ReadLine());
            } while (op != 2);
        }
예제 #3
0
        public bool VerificaIntermedios()
        {
            Lista ListaAux = new Lista();                               //Lista auxiliar para receber apenas o elementos desejados.
            int   cont = 1, cont2 = 1;
            int   PosiInicial     = 1;
            bool  primeiraEntrada = false;

            Aux = Inicio;

            if (Aux.Prox == null)
            {
                return(false);
            }

            while (Aux != null)
            {
                if (Aux.Prox != null)
                {
                    if (Aux.Cor != Aux.Prox.Cor && cont >= 3)            //Verifica se o próximo elemento é diferente do atual, caso seja true, verifica se o contador
                    {                                                    // de elementos é maior ou igual a 3, caso seja temos o tamanho da sequencia e podemos sair do loop
                        break;
                    }
                    if (Aux.Cor == Aux.Prox.Cor)                        //Caso o proximo elemento tenha a mesma cor do atual.
                    {
                        if (primeiraEntrada == false)                   //Caso seja a primeira vez que isso ocorre, salva a posição inicial da sequência de elementos.
                        {
                            PosiInicial     = cont2;
                            primeiraEntrada = true;                     //Torna a variável bool em true, para não altera a posicao inicial da sequência.
                        }
                        cont++;                                         //Incrementa a quantidade de elementos da mesma cor em sequência.
                    }
                    else
                    {
                        primeiraEntrada = false;                        //Torna a variável bool em false, para caso encontre-se uma sequencia de elementos de cor igual
                        cont            = 1;                            //salve a posição do primeiro elemento
                    }
                }
                Aux = Aux.Prox;
                cont2++;                                                //contador para contar cada posição da lista.
            }

            if (cont >= 3)                                              //Caso haja 3 ou mais elementos em sequência.
            {
                cont2 = Tamanho;
                Aux   = Fim;
                while (Aux != null)
                {
                    if (cont2 < PosiInicial || cont2 > PosiInicial + (cont - 1))        //Verifica se a posicão atual é diferente dos elementos em sequência.
                    {
                        ListaAux.InserirInicio(Aux.Cor);                                //Caso seja insere o elemento na lista auxiliar.
                    }
                    Aux = Aux.Ant;
                    cont2--;
                }
                this.EsvaziarLista();                                   //Esvazia a lista original.
                ListaAux.Aux = ListaAux.Fim;
                while (ListaAux.Aux != null)                            //Passa todos os elementos da lista auxiliar para a lista original.
                {
                    this.InserirInicio(ListaAux.Aux.Cor);
                    ListaAux.Aux = ListaAux.Aux.Ant;
                }

                if (cont == 3)                                          //Calcula a pontuação
                {
                    Pontuacao += 2;
                }
                else if (cont > 3)
                {
                    Pontuacao += 3;
                }
                Aux = null;
                return(true);                                            //Retorna true, para não se realizar as outras verificações.
            }
            Aux = null;
            return(false);
        }