diff --git a/Modulo2/DML.sql b/Modulo2/DML.sql index 0a5be0e..f89f26b 100644 --- a/Modulo2/DML.sql +++ b/Modulo2/DML.sql @@ -121,7 +121,14 @@ INSERT INTO InstItem(idInstItem, IdItem, Sala, IdInventario) VALUES (10, 3, 1, NULL), (11, 23, 1, NULL), (12, 2, NULL, 1), -(13, 6, NULL, 1); +(13, 6, NULL, 1), + +(14, 19, NULL, 1), +(15, 20, NULL, 1), +(16, 21, NULL, 1), +(17, 22, NULL, 1), +(18, 23, NULL, 1), +(19, 24, NULL, 1); INSERT INTO Itens (IdMissao, IdItem) VALUES (1, 2), diff --git a/src/main.js b/src/main.js index 54c09ec..d662ad8 100644 --- a/src/main.js +++ b/src/main.js @@ -62,168 +62,196 @@ async function primeiraTela() { await segundaTela(); async function segundaTela() { - if (r == 1) { + try { const infoJogador = await api.client.query('SELECT nomePersonagem, estado, vidaAtual, xp FROM PC'); if (infoJogador.rows.length > 0) { const jogador = infoJogador.rows[0]; + console.clear(); console.log(`Seu nome é: ${jogador.nomepersonagem}, Estado: ${jogador.estado}\nVida Atual: ${jogador.vidaatual}, Experiência: ${jogador.xp}`); } - // Obtém a região atual do jogador e as salas disponíveis const regiaoAtual = await api.client.query(` SELECT r.nomeRegiao, r.descricaoRegiao FROM Regiao r JOIN Sala s ON s.idRegiao = r.idRegiao JOIN PC p ON p.sala = s.idSala - `); + `); if (regiaoAtual.rows.length > 0) { const regiao = regiaoAtual.rows[0]; console.log(`\nVocê está na região: ${regiao.nomeregiao}`); console.log(`Descrição: ${regiao.descricaoregiao}\n`); - const salasDaReg = await api.client.query(` - SELECT idSala FROM Sala WHERE idRegiao = 1; - `); + const salasDaReg = await api.client.query('SELECT idSala FROM Sala WHERE idRegiao = 1'); if (salasDaReg.rows.length > 0) { console.log("Salas disponíveis nesta região:"); salasDaReg.rows.forEach((sala, index) => { console.log(`${index + 1}. Sala ${sala.idsala}`); }); - console.log("\nC. Craft - Ver receitas disponíveis"); + console.log("\nC. Craft - Ver receitas disponíveis\nI. Inventário"); - // VAI DA PROBLEMA SE TIVER MAIS Q 2 SALAS RS - // while (!['V', 'v'].includes(escolhaReceita) && (isNaN(escolhaReceita) || escolhaReceita < 1 || escolhaReceita > receitas.rows.length)); - let escolhaSalaOuCraft; - escolhaSalaOuCraft = askAndReturn("\nPressione 'C' para Craft: "); + let escolhaOp; + do { + escolhaOp = askAndReturn("\nEscolha a opção desejada: "); - if (escolhaSalaOuCraft.toLowerCase() === 'c') { - await mostrarReceitas(); - async function mostrarReceitas() { - console.log("\nReceitas de Crafting disponíveis:\n"); + if (escolhaOp.toLowerCase() === 'i') { + console.log("Seu inventário atual é:"); + await api.mostrarInventario(); + } else if (escolhaOp.toLowerCase() === 'c') { + await mostrarReceitas(); + } else if (!isNaN(escolhaOp) && escolhaOp >= 1 && escolhaOp <= salasDaReg.rows.length) { + const salaEscolhida = salasDaReg.rows[parseInt(escolhaOp) - 1]; + console.log(`Você escolheu a Sala: ${salaEscolhida.idsala}`); + + await moverParaSala(salaEscolhida.idsala); + + break; // Sai do loop quando uma sala válida é escolhida //necessário?? + } else { + console.log("Escolha inválida, tente novamente."); + } + } while (true); // Continua pedindo a escolha até que o usuário decida + } else { + console.log("Nenhuma sala disponível nesta região."); + } + } + } catch (error) { + console.error("Erro ao executar o início do jogo:", error.message || error); + } finally { + console.log("Fechando a conexão com o banco de dados..."); + console.log("Banco desconectado com sucesso!"); + await api.updateSala(1); + process.exit(); + } + } - const receitas = await api.client.query('SELECT * FROM Receita'); + // Função para mostrar receitas + async function mostrarReceitas() { + console.log("\nReceitas de Crafting disponíveis:\n"); - if (receitas.rows.length > 0) { - receitas.rows.forEach((receita, index) => { - console.log(`${index + 1}. Receita: ${receita.nomereceita}, Descrição: ${receita.descricaoreceita}, Ingredientes: ${receita.juncao}`); - }); + const receitas = await api.client.query('SELECT * FROM Receita'); - let escolhaReceita; - do { - escolhaReceita = askAndReturn("\nEscolha o número da receita para realizá-la ou pressione 'V' para voltar: "); + if (receitas.rows.length > 0) { + receitas.rows.forEach((receita, index) => { + console.log(`${index + 1}. Receita: ${receita.nomereceita}, Descrição: ${receita.descricaoreceita}, Ingredientes: ${receita.juncao}`); + }); - if (escolhaReceita.toLowerCase() === 'v') { - console.log("\n\n"); - return segundaTela(); // Sai da função mostrarReceitas e volta ao menu principal - } + let escolhaReceita; + do { + escolhaReceita = askAndReturn("\nEscolha o número da receita para realizá-la ou pressione 'V' para voltar: "); - if (!isNaN(escolhaReceita) && escolhaReceita >= 1 && escolhaReceita <= receitas.rows.length) { - const receitaEscolhida = receitas.rows[parseInt(escolhaReceita) - 1]; - console.log(`Você escolheu a receita: ${receitaEscolhida.nomereceita}`); + if (escolhaReceita.toLowerCase() === 'v') { + console.log("\n\n"); + return segundaTela(); // Sai da função mostrarReceitas e volta ao menu principal + } - await realizarReceita(receitaEscolhida); + if (!isNaN(escolhaReceita) && escolhaReceita >= 1 && escolhaReceita <= receitas.rows.length) { + const receitaEscolhida = receitas.rows[parseInt(escolhaReceita) - 1]; + console.log(`Você escolheu a receita: ${receitaEscolhida.nomereceita}`); - // Após realizar a receita, continua no loop para permitir escolha de outra receita - } else { - console.log("Escolha inválida, tente novamente."); - } - } while (true); // Continua pedindo a escolha até que o usuário decida voltar - } else { - console.log("Nenhuma receita de crafting disponível."); - } - } + await realizarReceita(receitaEscolhida); - async function realizarReceita(receita) { - try { - console.log(`Realizando a receita: ${receita.nomereceita}`); - - // Aqui vai a lógica para verificar ingredientes, atualizar inventário, etc. - // Exemplo: - /*const possuiIngredientes = await api.verificarIngredientes(receita.iditem); Função que verifica se o jogador tem os ingredientes - if (possuiIngredientes) { - await api.craftarItem(receita); //Função que realiza o crafting - console.log(`Receita ${receita.nomereceita} realizada com sucesso!`); - } else { - console.log("Você não possui todos os ingredientes necessários para esta receita."); - }*/ - } catch (error) { - console.error("Erro ao realizar a receita:", error.message || error); - } - } - } - - - // Atualiza a sala do jogador para a escolhida - var sala = await api.getSalaAtual(); - //await sleep(5); - //console.clear(); - - if (sala == 1) { - await api.mostrarNPCsDaSala(sala); - await api.evento(sala); - const DialogoInicio = 1; - const DialogoFim = 6; - await api.mostrarDialogo(DialogoInicio, DialogoFim); - await api.mostrarItensDaSala(sala); - - let choose = askAndReturn("Você encontrou alguns itens na sala. Deseja pegá-los\nS/N\n"); - if (choose.toLowerCase() == 's') { - await api.adicionarItemAoInventario(1, 1, 18); - await api.adicionarItemAoInventario(2, 1, 18); - await api.adicionarItemAoInventario(3, 1, 18); - await api.adicionarItemAoInventario(4, 1, 18); - await api.adicionarItemAoInventario(5, 1, 18); - await api.adicionarItemAoInventario(6, 1, 12); - await api.adicionarItemAoInventario(7, 1, 12); - await api.adicionarItemAoInventario(8, 1, 17); - await api.adicionarItemAoInventario(9, 1, 17); - await api.updateCapacidadeInventario(1); - - console.log("\nItens adicionados ao inventário com sucesso!\n"); - } - let escolha = askAndReturn("Deseja ver seu inventário?\nS/N\n"); - if (escolha.toLowerCase() == 's') { - console.log("Seu inventário atual é:"); - await api.mostrarInventario(); - } - console.log("\n\nVocê irá agora para sala 2, aguarde..."); - await api.updateSala(sala + 1); - await sleep(5); - console.clear(); - } - sala = await api.getSalaAtual(); - if (sala == 2) { - await api.mostrarNPCsDaSala(sala); - const DialogoInicio = 7; - const DialogoFim = 8; - await api.mostrarDialogo(DialogoInicio, DialogoFim); - await api.objetivoExploracao(sala); - - const mis = askAndReturn("\nVocê aceita essa missão?\nS/N\n"); - if (mis.toLowerCase() == 's') { - console.log("Missão aceita!"); - - await api.mostrarInimigoNPC(sala); - console.log("Proteja Ellie e Tess!"); - await api.mostrarArmas(); + } else { + console.log("Escolha inválida, tente novamente."); + } + } while (true); // Continua pedindo a escolha até que o usuário decida voltar + } else { + console.log("Nenhuma receita de crafting disponível."); + } + } + // Função para realizar a receita + async function realizarReceita(receita) { + try { + console.log(`Realizando a receita: ${receita.nomereceita}`); + + // Implementar lógica de crafting aqui + // Exemplo: + /* + const possuiIngredientes = await api.verificarIngredientes(receita.iditem); + if (possuiIngredientes) { + await api.craftarItem(receita); + console.log(`Receita ${receita.nomereceita} realizada com sucesso!`); + } else { + console.log("Você não possui todos os ingredientes necessários para esta receita."); + } + */ + } catch (error) { + console.error("Erro ao realizar a receita:", error.message || error); + } + } - } + async function moverParaSala(salaEscolhida) { + try { + // Atualiza a sala do jogador no banco de dados + await api.updateSala(salaEscolhida); + + // Obtem a nova sala atual do jogador + let salaAtual = await api.getSalaAtual(); + + if (salaAtual == 1) { + console.log("Você está na Sala 1."); + await api.mostrarNPCsDaSala(salaAtual); + await api.evento(salaAtual); + const DialogoInicio = 1; + const DialogoFim = 6; + await api.mostrarDialogo(DialogoInicio, DialogoFim); + await api.mostrarItensDaSala(salaAtual); + + let choose = askAndReturn("Você encontrou alguns itens na sala. Deseja pegá-los\nS/N\n"); + if (choose.toLowerCase() == 's') { + await api.adicionarItemAoInventario(1, 1, 18); + await api.adicionarItemAoInventario(2, 1, 18); + await api.adicionarItemAoInventario(3, 1, 18); + await api.adicionarItemAoInventario(4, 1, 18); + await api.adicionarItemAoInventario(5, 1, 18); + await api.adicionarItemAoInventario(6, 1, 12); + await api.adicionarItemAoInventario(7, 1, 12); + await api.adicionarItemAoInventario(8, 1, 17); + await api.adicionarItemAoInventario(9, 1, 17); + await api.updateCapacidadeInventario(1); + + console.log("\nItens adicionados ao inventário com sucesso!\n"); + } - //update no xp(ja ta pronto) - //matar inimigo - await api.updateSala(sala + 1); - await sleep(5); - console.clear(); - } - sala = await api.getSalaAtual(); - console.log(sala); + let escolha = askAndReturn("Deseja ver seu inventário?\nS/N\n"); + if (escolha.toLowerCase() == 's') { + console.log("Seu inventário atual é:"); + await api.mostrarInventario(); + } + console.log("\n\nVocê irá agora para sala 2, aguarde..."); + await api.updateSala(salaAtual + 1); + await sleep(5); + console.clear(); + + } else if (salaAtual == 2) { + console.log("Você está na Sala 2."); + await api.mostrarNPCsDaSala(salaAtual); + const DialogoInicio = 7; + const DialogoFim = 8; + await api.mostrarDialogo(DialogoInicio, DialogoFim); + await api.objetivoExploracao(salaAtual); + + const mis = askAndReturn("\nVocê aceita essa missão?\nS/N\n"); + if (mis.toLowerCase() == 's') { + console.log("Missão aceita!"); + await api.mostrarInimigoNPC(salaAtual); + console.log("Proteja Ellie e Tess!"); + await api.mostrarArmas(); } + + await api.updateSala(salaAtual + 1); + await sleep(5); + console.clear(); + + } else { + console.log("Você está em uma sala desconhecida."); } + } catch (error) { + console.error("Erro ao mover para a sala:", error.message || error); } } + } catch (error) { console.error("Erro ao executar o início do jogo:", error.message || error); }