static void Main(string[] args) { #region Limitando Tamanho do console Console.Title = "JOGO GOURMET MÁRIO"; Console.WindowWidth = 50; Console.WindowHeight = 15; DeleteMenu(GetSystemMenu(GetConsoleWindow(), false), SC_MINIMIZE, MF_BYCOMMAND); DeleteMenu(GetSystemMenu(GetConsoleWindow(), false), SC_MAXIMIZE, MF_BYCOMMAND); DeleteMenu(GetSystemMenu(GetConsoleWindow(), false), SC_SIZE, MF_BYCOMMAND); #endregion string nomePrato; string tipoPrato; Prato PratoAux; #region INICIALIZANDO A LISTA DE PRATOS COM O PRIMEIRO PRATO E CARACTERISTICA List <Prato> crcstP = new List <Prato>(); crcstP.Add(new Prato { tipo = "MASSA", prato = "LASANHA" }); crcstP.Add(new Prato { tipo = "", prato = "BOLO DE CHOCOLATE" }); #endregion while (true) { FuncoesAuxiliares.WriteReadConsole("Pense em um prato que gosta!!!", false, false); foreach (Prato item in crcstP) { if (item.tipo.Trim().Equals("")) { if (item.percorrePratos(1)) { break; } else { PratoAux = new Prato(); PratoAux.tipo = item.tipo; PratoAux.prato = item.prato; nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, item.prato.ToUpper().Trim()), true, false); crcstP.RemoveAt(crcstP.Count - 1); crcstP.Add(new Prato { prato = nomePrato, tipo = tipoPrato }); crcstP.Add(new Prato { prato = PratoAux.prato, tipo = PratoAux.tipo }); break; } } else { if (item.percorrePratos(0)) { break; } } } } }
public bool percorrePratos(int pratoOuTipo) { #region Caso a primeira pergunta seja por Tipo de Prato if (pratoOuTipo == 0) { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", tipo.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { //Verifica se o Prato atual tem Pratos em sua lista... if (pratos != null && pratos.Count > 0) { foreach (Prato item in pratos) { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", item.tipo.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { /*caso o a lista de pratos, contenha o tipo de prato que pensou ele percorre a lista interna executando a recursividade no objeto... * caso contrário, ele indagará se o prato imaginado é o corrente... */ if (item.pratos != null && item.pratos.Count > 0) { if (item.percorrePratos(2)) { return(true); } } else if (item.percorrePratos(1)) { return(true); } else { nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, item.prato.ToUpper().Trim()), true, false); if (item.pratos != null && item.pratos.Count > 0) { item.pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } else { item.pratos = new List <Prato>(); item.pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } return(true); } } } entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", this.prato.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { FuncoesAuxiliares.WriteReadConsole("Acertei de novo!", false, false); } else { nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, this.prato.ToUpper().Trim()), true, false); if (pratos != null && pratos.Count > 0) { pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } else { pratos = new List <Prato>(); pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } } return(true); } //Senão, ele pergunta se o prato que você pensou é o corrente... caso não seja, ele solicitará novamente que indique o prato imaginado para a lista de pratos, do prato corrente... else { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", this.prato.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { FuncoesAuxiliares.WriteReadConsole("Acertei de novo!", false, false); } else { nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, this.prato.ToUpper().Trim()), true, false); pratos = new List <Prato>(); pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } return(true); } } } #endregion #region Caso a primeira pergunta seja por Nome do Prato else if (pratoOuTipo == 1) { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", this.prato.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { FuncoesAuxiliares.WriteReadConsole("Acertei de novo!", false, false); return(true); } else { if (pratos != null && pratos.Count > 0) { foreach (Prato item in pratos) { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", item.tipo.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { if (item.percorrePratos(1)) { return(true); } } } } return(false); } } #endregion #region Caso a primeira pergunta seja por Tipo de Prato e o prato em questão tenha SubPratos na sua lista else { foreach (Prato item in pratos) { entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", item.tipo.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { if (item.pratos != null && item.pratos.Count > 0) { if (item.percorrePratos(2)) { return(true); } } else if (item.percorrePratos(1)) { return(true); } else { nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, item.prato.ToUpper().Trim()), true, false); if (item.pratos != null && item.pratos.Count > 0) { item.pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } else { item.pratos = new List <Prato>(); item.pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } return(true); } } } entrada = FuncoesAuxiliares.WriteReadConsole(string.Format("O prato que você pensou... \nÉ {0}? (S/N): ", this.prato.ToUpper().Trim()), true, true); if (entrada.Trim().Equals("S")) { FuncoesAuxiliares.WriteReadConsole("Acertei de novo!", false, false); } else { nomePrato = FuncoesAuxiliares.WriteReadConsole("Qual prato você pensou? ", true, false); tipoPrato = FuncoesAuxiliares.WriteReadConsole(string.Format("Complete.... \n\n{0} é ____,\n mas {1} não. : ", nomePrato, this.prato.ToUpper().Trim()), true, false); if (pratos != null && pratos.Count > 0) { pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } else { pratos = new List <Prato>(); pratos.Add(new Prato { tipo = tipoPrato, prato = nomePrato }); } } return(true); } #endregion return(false); }