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; } } }
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); }
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); }