This commit is contained in:
250406
2026-05-18 11:44:04 +01:00
parent 7e0b0a808a
commit 2c725ef3d7

View File

@@ -108,17 +108,13 @@ public class Experientia {
} }
} }
} }
public void menu() throws IOException { public void menu() throws IOException {
while (true) { while (true) {
System.out.println("\n--------------------"); System.out.println("\n--------------------");
System.out.println(nomeJogador + " Nv " + nivelJogador); System.out.println(nomeJogador + " Nv " + nivelJogador);
System.out.println("HP: " + vidaAtual + "/" + vidaMax); System.out.println("HP: " + vidaAtual + "/" + vidaMax);
System.out.println("Ouro: " + ouro); System.out.println("Ouro: " + ouro);
System.out.println("--------------------"); System.out.println("--------------------");
System.out.println("1-Procurar inimigos"); System.out.println("1-Procurar inimigos");
System.out.println("2-Loja"); System.out.println("2-Loja");
System.out.println("3-Inventário"); System.out.println("3-Inventário");
@@ -127,7 +123,6 @@ public class Experientia {
System.out.println("6-Salvar"); System.out.println("6-Salvar");
System.out.println("7-Carregar"); System.out.println("7-Carregar");
int op = scanner.nextInt(); int op = scanner.nextInt();
switch (op) { switch (op) {
case 1 -> case 1 ->
ProcurarInimigos(); ProcurarInimigos();
@@ -143,173 +138,114 @@ public class Experientia {
salvarJogo(); salvarJogo();
case 7 -> case 7 ->
carregarJogo(); carregarJogo();
} }
} }
} }
public void ProcurarInimigos() { public void ProcurarInimigos() {
refreshLojaRestantes = 3; refreshLojaRestantes = 3;
int nivelInimigo = rand.nextInt(5) + nivelJogador; int nivelInimigo = rand.nextInt(5) + nivelJogador;
int vidaInimigo = 60 + nivelInimigo * 20; int vidaInimigo = 60 + nivelInimigo * 20;
int ataqueInimigo = 8 + nivelInimigo * 4; int ataqueInimigo = 8 + nivelInimigo * 4;
int defesaInimigo = nivelInimigo * 2; int defesaInimigo = nivelInimigo * 2;
boolean boss = rand.nextInt(100) < 15; boolean boss = rand.nextInt(100) < 15;
if (boss) { if (boss) {
System.out.println("BOSS APARECEU"); System.out.println("BOSS APARECEU");
vidaInimigo *= 3; vidaInimigo *= 3;
ataqueInimigo *= 2; ataqueInimigo *= 2;
} }
if (nivelInimigo > nivelJogador) { if (nivelInimigo > nivelJogador) {
System.out.println("PERIGO: inimigo mais forte que tu"); System.out.println("PERIGO: inimigo mais forte que tu");
} }
while (vidaAtual > 0 && vidaInimigo > 0) { while (vidaAtual > 0 && vidaInimigo > 0) {
System.out.println("\nHP: " + vidaAtual + "/" + vidaMax); System.out.println("\nHP: " + vidaAtual + "/" + vidaMax);
System.out.println("Inimigo HP: " + vidaInimigo); System.out.println("Inimigo HP: " + vidaInimigo);
System.out.println("1-Atacar 2-Fugir"); System.out.println("1-Atacar 2-Fugir");
int op = scanner.nextInt(); int op = scanner.nextInt();
if (op == 1) { if (op == 1) {
int dano = Math.max( int dano = Math.max(
1, 1,
ataqueBase + bonusAtaque + rand.nextInt(5) - defesaInimigo ataqueBase + bonusAtaque + rand.nextInt(5) - defesaInimigo
); );
boolean critico = rand.nextInt(100) < 20; boolean critico = rand.nextInt(100) < 20;
if (critico) { if (critico) {
dano *= 2; dano *= 2;
System.out.println("CRÍTICO!"); System.out.println("CRÍTICO!");
} }
vidaInimigo -= dano; vidaInimigo -= dano;
int danoRecebido = Math.max( int danoRecebido = Math.max(
1, 1,
ataqueInimigo - (defesaBase + bonusDefesa) ataqueInimigo - (defesaBase + bonusDefesa)
); );
vidaAtual -= danoRecebido; vidaAtual -= danoRecebido;
} else { } else {
if (rand.nextInt(100) < 60) { if (rand.nextInt(100) < 60) {
System.out.println("Fugiste"); System.out.println("Fugiste");
return; return;
}
} else { else {
System.out.println("Falhaste fuga"); System.out.println("Falhaste fuga");
vidaAtual -= 5; vidaAtual -= 5;
} }
} }
} }
if (vidaAtual <= 0) { if (vidaAtual <= 0) {
GameOver(); GameOver();
return; return;
} }
System.out.println("Vitória!"); System.out.println("Vitória!");
xpJogador += 20 + nivelInimigo * 5; xpJogador += 20 + nivelInimigo * 5;
ouro += 15 + nivelInimigo * 5; ouro += 15 + nivelInimigo * 5;
if (boss) { if (boss) {
xpJogador += 50; xpJogador += 50;
ouro += 50; ouro += 50;
} }
pontosStatus += 2; pontosStatus += 2;
if (rand.nextInt(100) < 45) { if (rand.nextInt(100) < 45) {
Item drop = gerarItem(); Item drop = gerarItem();
System.out.println("\nDROP:"); System.out.println("\nDROP:");
System.out.println(drop); System.out.println(drop);
adicionarItem(drop); adicionarItem(drop);
} }
if (rand.nextInt(1000) == 0) { if (rand.nextInt(1000) == 0) {
Item unico = gerarItemUnico(); Item unico = gerarItemUnico();
System.out.println("\nITEM ÚNICO ENCONTRADO!"); System.out.println("\nITEM ÚNICO ENCONTRADO!");
System.out.println(unico); System.out.println(unico);
adicionarItem(unico); adicionarItem(unico);
} }
levelUp(); levelUp();
} }
public void Loja() { public void Loja() {
gerarLoja(); gerarLoja();
while (true) { while (true) {
System.out.println("\nLOJA"); System.out.println("\nLOJA");
System.out.println("Ouro: " + ouro); System.out.println("Ouro: " + ouro);
System.out.println("Refresh restantes: " + refreshLojaRestantes); System.out.println("Refresh restantes: " + refreshLojaRestantes);
for (int i = 0; i < loja.length; i++) { for (int i = 0; i < loja.length; i++) {
System.out.println(i + "-" + loja[i]); System.out.println(i + "-" + loja[i]);
} }
System.out.println("n-refresh -1-sair"); System.out.println("n-refresh -1-sair");
String input = scanner.next(); String input = scanner.next();
if (input.equals("-1")) { if (input.equals("-1")) {
return; return;
} }
if (input.equals("n")) { if (input.equals("n")) {
if (refreshLojaRestantes > 0) { if (refreshLojaRestantes > 0) {
refreshLojaRestantes--; refreshLojaRestantes--;
gerarLoja(); gerarLoja();
System.out.println("Loja atualizada"); System.out.println("Loja atualizada");
} else { } else {
System.out.println("Sem refreshes"); System.out.println("Sem refreshes");
} }
continue; continue;
} }
int op = Integer.parseInt(input); int op = Integer.parseInt(input);
if (op >= 0 && op < loja.length) { if (op >= 0 && op < loja.length) {
Item item = loja[op]; Item item = loja[op];
if (ouro >= item.preco || admin) { if (ouro >= item.preco || admin) {
if (!admin) { if (!admin) {
ouro -= item.preco; ouro -= item.preco;
} }
adicionarItem(item); adicionarItem(item);
System.out.println("Compraste " + item.nome); System.out.println("Compraste " + item.nome);
} else { } else {
System.out.println("Sem ouro"); System.out.println("Sem ouro");
@@ -317,161 +253,114 @@ public class Experientia {
} }
} }
} }
public void Inventario() { public void Inventario() {
while (true) { while (true) {
System.out.println("\n===== INVENTÁRIO ====="); System.out.println("\n===== INVENTÁRIO =====");
if (itensCount == 0) { if (itensCount == 0) {
System.out.println("Inventário vazio"); System.out.println("Inventário vazio");
} }
for (int i = 0; i < itensCount; i++) { for (int i = 0; i < itensCount; i++) {
System.out.println(i + " - " + inventario[i]); System.out.println(i + " - " + inventario[i]);
} }
System.out.println("\n1-Usar"); System.out.println("\n1-Usar");
System.out.println("2-Equipar"); System.out.println("2-Equipar");
System.out.println("3-Remover"); System.out.println("3-Remover");
System.out.println("-1-Sair"); System.out.println("-1-Sair");
int op = scanner.nextInt(); int op = scanner.nextInt();
if (op == -1) { if (op == -1) {
return; return;
} }
System.out.print("ID Item: "); System.out.print("ID Item: ");
int id = scanner.nextInt(); int id = scanner.nextInt();
if (id < 0 || id >= itensCount) { if (id < 0 || id >= itensCount) {
System.out.println("Item inválido"); System.out.println("Item inválido");
continue; continue;
} }
Item item = inventario[id]; Item item = inventario[id];
if (op == 1) { if (op == 1) {
if (item.tipo.equals("consumivel")) { if (item.tipo.equals("consumivel")) {
vidaAtual = Math.min( vidaAtual = Math.min(
vidaMax, vidaMax,
vidaAtual + item.valor vidaAtual + item.valor
); );
System.out.println( System.out.println(
"Curaste " + item.valor + " HP" "Curaste " + item.valor + " HP"
); );
removerItem(id); removerItem(id);
} else { } else {
System.out.println("Não podes usar isso"); System.out.println("Não podes usar isso");
} }
} else if (op == 2) { } else if (op == 2) {
if (item.tipo.equals("arma")) { if (item.tipo.equals("arma")) {
bonusAtaque = item.valor; bonusAtaque = item.valor;
System.out.println( System.out.println(
item.nome + " equipada" item.nome + " equipada"
); );
} else if (item.tipo.equals("armadura")) { } else if (item.tipo.equals("armadura")) {
bonusDefesa = item.valor; bonusDefesa = item.valor;
System.out.println( System.out.println(
item.nome + " equipada" item.nome + " equipada"
); );
} else { } else {
System.out.println("Não equipável"); System.out.println("Não equipável");
} }
} else if (op == 3) { } else if (op == 3) {
System.out.println( System.out.println(
item.nome + " removido" item.nome + " removido"
); );
removerItem(id); removerItem(id);
} }
} }
} }
public void levelUp() { public void levelUp() {
int need = nivelJogador * 50; int need = nivelJogador * 50;
while (xpJogador >= need) { while (xpJogador >= need) {
xpJogador -= need; xpJogador -= need;
nivelJogador++; nivelJogador++;
vidaMax += 20; vidaMax += 20;
ataqueBase += 2; ataqueBase += 2;
defesaBase += 1; defesaBase += 1;
pontosStatus += 3; pontosStatus += 3;
System.out.println("Subiste nível " + nivelJogador); System.out.println("Subiste nível " + nivelJogador);
need = nivelJogador * 50; need = nivelJogador * 50;
} }
} }
public void Status() { public void Status() {
while (true) { while (true) {
System.out.println("\nSTATUS"); System.out.println("\nSTATUS");
System.out.println("1-Aumentar Ataque"); System.out.println("1-Aumentar Ataque");
System.out.println("2-Aumentar Defesa"); System.out.println("2-Aumentar Defesa");
System.out.println("3-Aumentar Vida Máx"); System.out.println("3-Aumentar Vida Máx");
System.out.println("-1-Sair"); System.out.println("-1-Sair");
System.out.println("\nAtaque: " + (ataqueBase + bonusAtaque)); System.out.println("\nAtaque: " + (ataqueBase + bonusAtaque));
System.out.println("Defesa: " + (defesaBase + bonusDefesa)); System.out.println("Defesa: " + (defesaBase + bonusDefesa));
System.out.println("Vida Max: " + vidaMax); System.out.println("Vida Max: " + vidaMax);
System.out.println("Pontos disponíveis: " + pontosStatus); System.out.println("Pontos disponíveis: " + pontosStatus);
int op = scanner.nextInt(); int op = scanner.nextInt();
if (op == -1) { if (op == -1) {
return; return;
} }
if (pontosStatus <= 0) { if (pontosStatus <= 0) {
System.out.println("Sem pontos disponíveis"); System.out.println("Sem pontos disponíveis");
continue; continue;
} }
switch (op) { switch (op) {
case 1 -> { case 1 -> {
ataqueBase++; ataqueBase++;
pontosStatus--; pontosStatus--;
System.out.println("Ataque aumentado"); System.out.println("Ataque aumentado");
} }
case 2 -> { case 2 -> {
defesaBase++; defesaBase++;
pontosStatus--; pontosStatus--;
System.out.println("Defesa aumentada"); System.out.println("Defesa aumentada");
} }
case 3 -> { case 3 -> {
vidaMax += 10; vidaMax += 10;
vidaAtual += 10; vidaAtual += 10;
pontosStatus--; pontosStatus--;
System.out.println("Vida aumentada"); System.out.println("Vida aumentada");
} }
default -> default ->
System.out.println("Opção inválida"); System.out.println("Opção inválida");
} }
@@ -504,7 +393,6 @@ public class Experientia {
inventario[itensCount++] = i; inventario[itensCount++] = i;
return; return;
} }
if (itensCount < inventario.length) { if (itensCount < inventario.length) {
inventario[itensCount++] = i; inventario[itensCount++] = i;
} else { } else {
@@ -525,53 +413,36 @@ public class Experientia {
} }
} }
public void gerarLoja() { public void gerarLoja() {
for (int i = 0; i < loja.length; i++) { for (int i = 0; i < loja.length; i++) {
loja[i] = gerarItem(); loja[i] = gerarItem();
} }
} }
public Item gerarItem() { public Item gerarItem() {
int t = rand.nextInt(3); int t = rand.nextInt(3);
int r = rand.nextInt(100); int r = rand.nextInt(100);
String raridade; String raridade;
int multiplicadorValor; int multiplicadorValor;
int multiplicadorPreco; int multiplicadorPreco;
if (r < 60) { if (r < 60) {
raridade = "Comum"; raridade = "Comum";
multiplicadorValor = 1; multiplicadorValor = 1;
multiplicadorPreco = 1; multiplicadorPreco = 1;
} else if (r < 85) { } else if (r < 85) {
raridade = "Raro"; raridade = "Raro";
multiplicadorValor = 3; multiplicadorValor = 3;
multiplicadorPreco = 2; multiplicadorPreco = 2;
} else if (r < 97) { } else if (r < 97) {
raridade = "Épico"; raridade = "Épico";
multiplicadorValor = 5; multiplicadorValor = 5;
multiplicadorPreco = 3; multiplicadorPreco = 3;
} else { } else {
raridade = "Lendário"; raridade = "Lendário";
multiplicadorValor = 8; multiplicadorValor = 8;
multiplicadorPreco = 5; multiplicadorPreco = 5;
} }
if (t == 0) { if (t == 0) {
int cura = 30 * multiplicadorValor; int cura = 30 * multiplicadorValor;
int preco = 10 * multiplicadorPreco; int preco = 10 * multiplicadorPreco;
return new Item( return new Item(
"Poção", "Poção",
"consumivel", "consumivel",
@@ -580,12 +451,9 @@ public class Experientia {
raridade raridade
); );
} }
if (t == 1) { if (t == 1) {
int dano = (5 + nivelJogador) * multiplicadorValor; int dano = (5 + nivelJogador) * multiplicadorValor;
int preco = 40 * multiplicadorPreco; int preco = 40 * multiplicadorPreco;
return new Item( return new Item(
"Espada", "Espada",
"arma", "arma",
@@ -594,10 +462,8 @@ public class Experientia {
raridade raridade
); );
} }
int defesa = (5 + nivelJogador) * multiplicadorValor; int defesa = (5 + nivelJogador) * multiplicadorValor;
int preco = 40 * multiplicadorPreco; int preco = 40 * multiplicadorPreco;
return new Item( return new Item(
"Armadura", "Armadura",
"armadura", "armadura",
@@ -606,9 +472,7 @@ public class Experientia {
raridade raridade
); );
} }
class Item { class Item {
String nome; String nome;
String tipo; String tipo;
int valor; int valor;
@@ -622,64 +486,46 @@ public class Experientia {
preco = p; preco = p;
raridade = r; raridade = r;
} }
public String toString() { public String toString() {
return nome + " [" + raridade + "] +" + valor + " (" + tipo + ") - " + preco + " ouro"; return nome + " [" + raridade + "] +" + valor + " (" + tipo + ") - " + preco + " ouro";
} }
} }
public void resetJogo() { public void resetJogo() {
nivelJogador = 1; nivelJogador = 1;
xpJogador = 0; xpJogador = 0;
ouro = 0; ouro = 0;
bonusAtaque = 0; bonusAtaque = 0;
bonusDefesa = 0; bonusDefesa = 0;
pontosStatus = 0; pontosStatus = 0;
itensCount = 0; itensCount = 0;
refreshLojaRestantes = 3; refreshLojaRestantes = 3;
vidaMax = 100; vidaMax = 100;
ataqueBase = 10; ataqueBase = 10;
defesaBase = 5; defesaBase = 5;
switch (classe) { switch (classe) {
case "Guerreiro" -> { case "Guerreiro" -> {
ataqueBase += 2; ataqueBase += 2;
defesaBase += 3; defesaBase += 3;
} }
case "Mago" -> { case "Mago" -> {
ataqueBase += 5; ataqueBase += 10;
} }
case "Paladino" -> { case "Paladino" -> {
defesaBase += 4; defesaBase += 4;
vidaMax += 20; vidaMax += 20;
} }
case "Assassino" -> { case "Assassino" -> {
ataqueBase += 3; ataqueBase += 3;
} }
case "Arqueiro" -> { case "Arqueiro" -> {
ataqueBase += 2; ataqueBase += 2;
} }
} }
vidaAtual = vidaMax; vidaAtual = vidaMax;
} }
public Item gerarItemUnico() { public Item gerarItemUnico() {
int t = rand.nextInt(2); int t = rand.nextInt(2);
if (t == 0) { if (t == 0) {
return new Item( return new Item(
"Excalibur", "Excalibur",
"arma", "arma",
@@ -688,7 +534,6 @@ public class Experientia {
"Único" "Único"
); );
} }
return new Item( return new Item(
"Armadura Divina", "Armadura Divina",
"armadura", "armadura",
@@ -697,35 +542,23 @@ public class Experientia {
"Único" "Único"
); );
} }
public void salvarJogo() throws IOException { public void salvarJogo() throws IOException {
try (PrintWriter writer = new PrintWriter(new FileWriter(nomeJogador + ".txt"))) { try (PrintWriter writer = new PrintWriter(new FileWriter(nomeJogador + ".txt"))) {
writer.println(nomeJogador); writer.println(nomeJogador);
writer.println(classe); writer.println(classe);
writer.println(nivelJogador); writer.println(nivelJogador);
writer.println(xpJogador); writer.println(xpJogador);
writer.println(ouro); writer.println(ouro);
writer.println(vidaMax); writer.println(vidaMax);
writer.println(vidaAtual); writer.println(vidaAtual);
writer.println(ataqueBase); writer.println(ataqueBase);
writer.println(defesaBase); writer.println(defesaBase);
writer.println(bonusAtaque); writer.println(bonusAtaque);
writer.println(bonusDefesa); writer.println(bonusDefesa);
writer.println(pontosStatus); writer.println(pontosStatus);
writer.println(itensCount); writer.println(itensCount);
for (int i = 0; i < itensCount; i++) { for (int i = 0; i < itensCount; i++) {
Item it = inventario[i]; Item it = inventario[i];
writer.println( writer.println(
it.nome + ";" it.nome + ";"
+ it.tipo + ";" + it.tipo + ";"
@@ -734,11 +567,9 @@ public class Experientia {
+ it.raridade + it.raridade
); );
} }
System.out.println("Jogo guardado!"); System.out.println("Jogo guardado!");
} }
} }
public void carregarJogo() { public void carregarJogo() {
System.out.print("Nome do jogador: "); System.out.print("Nome do jogador: ");
String nome = scanner.next(); String nome = scanner.next();