Hola, estoy aprendiendo java y para aprender estaba haciendo un pequeño juego de texto, pero al perder vida y otras variables siempre seguían a su estado inicial. Antes siempre lo dejaba apartado, pero me gustaría seguir. Os adjunto el código a ver si me podéis ayudar. (Uso java con eclipse neo) Las variables son de esta primera clase main.
package main;
import java.io.IOException;
import java.util.Scanner;
public class main {
private static Scanner in;
public int b;
public int a = (int) (Math.random() * 4);
public int vida = 20;
public int pocion = 0;
public int revivir = 0;
public int descansar = 3;
public static int jugador;
public void inicio() {
in = new Scanner ( System.in );
descansar++;
if(vida >20){
System.out.println("Vida ajustada a su máximo (20)");
vida = 20;
}
if(vida <= 0 & revivir == 0){
System.out.println("Te has quedado sin vidas");
principal zona = new principal();
zona.finalizado();
}
if(vida <= 0 & revivir >= 1){
System.out.println("Te has quedado sin vidas");
System.out.println("Has usado un revivir"); revivir--;
vida = 20;
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Runtime.getRuntime().exec("cls");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("");
System.out.println("[CALABOZO]");
System.out.println("");
System.out.println("¿Qué quieres hacer?");
System.out.println("[1]-Andar");
System.out.println("[2]-Descansar");
System.out.println("[3]-Ver inventario");
System.out.println("[4]-Usar un objeto");
jugador = in.nextInt();
if(jugador == 1){
System.out.println("Andando...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
principal zona = new principal();
zona.aleatorio();
}
if(jugador == 2){
if(descansar >= 3){
System.out.println("Descansando...");
descansar = descansar - 3;
System.out.println("¡Has recuperado 3 de vida!");
vida = vida + 3;
principal zona = new principal();
zona.inicio();}
if(descansar < 3){
}
System.out.println("Estás cansado de descansar, tendrás que esperar un poco más");
principal zona = new principal();
zona.inicio();}
if(jugador == 3){
System.out.println("Esta es tu información actual");
System.out.println("Vida: "+vida);
System.out.println("Pociones: "+pocion);
System.out.println("revivir: "+revivir);
System.out.println("Escribe para volver");
jugador = in.nextInt();
principal zona = new principal();
zona.inicio();}
if(jugador == 4){
System.out.println("¿Qué objeto quieres usar?");
System.out.println("[1]-Poción");
System.out.println("[2]-(Proximamente)");
System.out.println("[3]-Volver");
jugador = in.nextInt();
if(jugador == 1){
if(pocion >= 1){
System.out.println("Has usado una poción.");
System.out.println("Recuperas 5 de vida"); vida = vida + 5;
principal zona = new principal();
zona.inicio();
}
else{
System.out.println("No tienes ninguna poción");
principal zona = new principal();
zona.inicio();
}
}
if(jugador == 2){
}
} if(jugador == 3){
principal zona = new principal();
zona.inicio();
}
}
void finalizado() {
System.out.println("-----Juego terminado-----");
System.out.println("¿Quieres volver a jugar?");
System.out.println("[1]-Si");
System.out.println("[2]-No");
jugador = in.nextInt();
if(jugador == 1){
vida = 20;
pocion = 0;
revivir = 0;
principal zona = new principal();
zona.inicio();
}
if(jugador == 2){
System.exit(0);
}
}
public void aleatorio(){
System.out.println(a);
switch(a){
case 0:
System.out.println("Te has encontrado una puerta,¿Cruzar?");
System.out.println("[1]-Si");
System.out.println("[2]-No");
jugador = in.nextInt();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(jugador == 1){
b = (int) (Math.random() * 3);
switch(b){
case 0:
System.out.println("¡Has encontrado un nuevo área! Parece un bosque.");
principal zona = new principal();
zona.bosque();
break;
case 1:
System.out.println("¡Hay un cofre!, vamos a abrirlo.");
b = (int) (Math.random() * 6);
switch(b){
case 0:
System.out.println("¡Has encontrado una poción!");
pocion++;
break;
case 1:
System.out.println("¡Has encontrado una poción!");
pocion++;
break;
case 2:
System.out.println("¡Has encontrado un revivir!");
revivir++;
break;
case 3:
System.out.println("Está vacio...");
principal zona2 = new principal();
zona2.inicio();
break;
case 4:
System.out.println("Tan solo había una manzana podrida");
break;
case 5:
System.out.println("Había una rata, te ha mordido");
System.out.println("Pierdes 1 de vida");
vida--;
System.out.println("Te queda "+ vida+" de vida");
principal zona8 = new principal();
zona8.inicio();
break;
}
break;
case 2:
System.out.println("Solo es una abitación vacia...");
principal zona4 = new principal();
zona4.inicio();
break;
}
}
if(jugador == 2){
principal zona = new principal();
zona.inicio();
}
else{
System.out.println("Respuesta no válida, por lo que lo tomaremos como un no...");
principal zona = new principal();
zona.inicio();
}
break;
case 1:
System.out.println("Tropiezas y te caes, pierdes 2 de vida"); vida = vida - 2;
System.out.println("Te queda "+ vida+" de vida");
principal zona = new principal();
zona.inicio();
break;
case 2:
System.out.println("Encuentras un puente muy viejo,¿Quieres atravesarlo?");
System.out.println("[1]-Si");
System.out.println("[2]-No");
jugador = in.nextInt();
if(jugador == 1){
b = (int) (Math.random() * 2);
switch(b){
case 0:
System.out.println("El puente se rompe y caes, con suerte no estaba muy alto");
System.out.println("Pierdes 5 de vida"); vida = vida - 5;
System.out.println("Te queda "+ vida+" de vida");
principal zona3 = new principal();
zona3.inicio();
break;
case 1:
System.out.println("Al otro lado del puente encuentras una mesa con comida y bebida");
System.out.println("Recuperas toda la vida");
vida = 20;
principal zona2 = new principal();
zona2.inicio();
break;
}
}
if(jugador == 2){
principal zona4 = new principal();
zona4.inicio();
}
else{
System.out.println("Respuesta no válida, por lo que lo tomaremos como un no...");
principal zona4 = new principal();
zona4.inicio();
}
break;
case 3:
System.out.println("No encuentras nada");
principal zona6 = new principal();
zona6.inicio();
break;
}
}
public void bosque() {
}
private void aleatorio2() {
System.out.println("");
System.exit(0);
}
}
Por si os lo preguntáis esta es la clase principal
package main;
public class principal {
public static void main(String[] args) {
main main = new main();
main.inicio();
}
public void inicio() {
main main = new main();
main.inicio();
}
public void finalizado() {
main main = new main();
main.finalizado();
}
public void aleatorio() {
main main = new main();
main.aleatorio();
}
public void bosque() {
// TODO Auto-generated method stub
}
}
La vida nunca baja de 20. Por cierto se que esta muy mal expresado y desordenado el código, lo he intentado hacer lo mejor que podía.
Y si necesitáis algún otro dato podéis pedírmelo y perdón por poner un código tan largo, he estado buscando mucho y no sé donde esta el error, creo que puede ser al llamar de la clase principal a la main.
Gracias de antemano.