Guía visual de código Java

RPG Console
Simulator

Una explicación completa y visual del código Java que crea un simulador de rol por consola. Haz clic en cada sección para expandirla.

9 secciones Java Bucles & Switch Arreglos OOP básico
1
Importaciones y clase principal
import java.util.Random; import java.util.Scanner; public class rpg { public static void main(String[] args) { // Todo el programa vive aquí } }

Antes de escribir el juego, Java necesita "traer herramientas" del sistema. Las dos líneas de import hacen exactamente eso:

Scanner → leer lo que escribe el usuario Random → generar números al azar

La clase rpg es el contenedor del programa, y el método main es el punto de entrada: Java siempre empieza a ejecutar desde ahí.

Como decir "necesito un teclado y un dado" antes de jugar un juego de mesa.
2
Variables del juego

Aquí se declaran todas las "cajas" donde se guardan los datos del juego. Cada variable tiene un tipo y un nombre.

vida
Puntos de vida del héroe
fuerza
Daño que hace el héroe
nombre
Nombre del personaje (texto)
clase
Mago, Guerrero, etc.
vidaEnemigo
Vida aleatoria (50–60)
fuerzaEnemigo
Fuerza aleatoria (10–30)
inventario
Lista fija de 4 objetos
activo
¿El juego sigue corriendo?
int vida = 0; String nombre = ""; int vidaEnemigo = Random.nextInt(50, 60); // aleatorio String[] inventario = {"Poción", "Hierro", "Pergamino", "Llave Antigua"}; boolean activo = true;
Piénsalo como una ficha de personaje en D&D: cada espacio tiene un nombre y un valor que puede cambiar durante el juego.
3
El bucle principal — do...while
do { // mostrar menú, leer opción, ejecutar acción int opcion = scan.nextInt(); switch (opcion) { case 1 -> { /* crear personaje */ } case 6 -> { activo = false; } } } while (activo);

Este bloque es el corazón del juego. Se repite indefinidamente hasta que activo sea false. La diferencia entre do...while y while normal es que el do...while siempre ejecuta el cuerpo al menos una vez antes de verificar la condición.

Dentro del bucle, el switch actúa como un semáforo que dirige el flujo según el número que el jugador escribió.

Es como un menú de cajero automático: siempre vuelve al menú principal hasta que presionas "Salir".
4
Opción 1 — Crear personaje

El jugador escribe su nombre y elige una clase. Cada clase tiene estadísticas distintas de vida y fuerza. Un do...while interno repite la pregunta si el jugador elige un número inválido.

Mago
vida: 50
fuerza: 100
Guerrero
vida: 100
fuerza: 50
Arquero
vida: 75
fuerza: 75
Asesino
vida: 60
fuerza: 90
Paladín
vida: 120
fuerza: 40
boolean rolValido = false; do { // pedir al usuario que elija clase switch (rol) { case 1 -> { clase = "Mago"; vida = 50; fuerza = 100; rolValido = true; } // ... más casos default -> { System.out.println("Opción no válida."); } } } while (!rolValido);
Como elegir tu clase al crear un personaje en Pokémon o Dark Souls: cada opción define tu estilo de juego.
5
Opción 2 — Entrenar

Un menú secundario donde el jugador puede mejorar su personaje. Usa un while que repite hasta que el jugador elige 0 (salir del entrenamiento).

while (entrenamiento != 0) { // mostrar opciones de entrenamiento entrenamiento = scan.nextInt(); if (entrenamiento == 1) { fuerza += 5; // fuerza = fuerza + 5 } else if (entrenamiento == 2) { vida += 10; // vida = vida + 10 } }
  • Elige opción 1 → fuerza sube +5
  • Elige opción 2 → vida sube +10
  • Elige 0 → termina el entrenamiento y vuelve al menú

El operador += es un atajo: fuerza += 5 significa lo mismo que fuerza = fuerza + 5.

Como el gimnasio en Pokémon: entras, subes stats cuantas veces quieras, y cuando estás listo, sales de nuevo al mundo.
6
Opción 3 — Batalla

Se usa un bucle for que simula hasta 5 turnos de combate. En cada turno ambos personajes se golpean simultáneamente.

for (turno = 1; turno <= 5; turno++) { // Mostrar stats de ambos vida -= fuerzaEnemigo; // el enemigo golpea al héroe vidaEnemigo -= fuerza; // el héroe golpea al enemigo if (vida <= 0) { System.out.println("ERAI Compare"); break; // sale del for antes del turno 5 } else if (vidaEnemigo <= 0) { System.out.println("GANASTE Prro"); break; } }
  • Se muestran los stats de héroe y enemigo
  • El enemigo descuenta su fuerza de la vida del héroe
  • El héroe descuenta su fuerza de la vida del enemigo
  • Si alguno llega a 0 o menos, se usa break para salir del combate
  • Si nadie murió en 5 turnos, el combate termina empatado

El break es como una salida de emergencia del bucle: cuando se cumple la condición, se salta al código que viene después del for.

Como un juego de cartas donde ambos jugadores se golpean al mismo tiempo cada ronda, hasta que uno cae o se acaban los turnos.
7
Opción 4 — Inventario
String[] inventario = {"Poción", "Hierro", "Pergamino", "Llave Antigua"}; // Para mostrarlo: for (String item : inventario) { System.out.println("- " + item); }

El inventario es un arreglo (array) de textos: una lista fija de 4 objetos que no cambia durante el juego. Se define al inicio con llaves { }.

El for-each (el for con :) es una forma simple de recorrer toda la lista uno por uno sin necesitar índices numéricos.

inventario[0] = "Poción" inventario[1] = "Hierro" inventario[2] = "Pergamino" inventario[3] = "Llave Antigua"
Como un inventario en papel: el bucle es la mano que va señalando cada ítem de arriba a abajo e imprimiéndolo.
8
Opción 5 — Estado del personaje

Muestra nombre, clase y fuerza, y según la cantidad de vida restante imprime un mensaje diferente. Usa una cadena de if / else if / else:

if (vida >= 80) { System.out.println("Estás en excelente estado"); } else if (vida >= 50) { System.out.println("Buen estado, pero ten cuidado"); } else if (vida >= 20) { System.out.println("Estás herido, busca una poción"); } else { System.out.println("Gravemente herido, entrena por favor"); }

Java evalúa las condiciones de arriba a abajo y ejecuta solo el primer bloque cuya condición sea verdadera.

vida ≥ 80 → excelente estado vida ≥ 50 → buen estado vida ≥ 20 → herido vida < 20 → gravemente herido
Como la barra de salud en un videojuego que cambia de color de verde a rojo según cuánto te queda.
9
Opción 6 — Salir
case 6 -> { System.out.println("Saliendo del juego..."); activo = false; }

La opción más simple del programa. Solo cambia la variable activo a false. Eso hace que cuando el do...while principal revise su condición al final del ciclo, encuentre que es falsa y detenga todo.

El interruptor de apagado: cuando lo bajas, toda la máquina se detiene. Sin él, el juego correría para siempre.
Código completo — rpg.java

El código fuente completo con sintaxis coloreada. Usa el botón COPIAR para copiarlo al portapapeles.

package ejercicios; import java.util.Random; import java.util.Scanner; public class rpg { public static void main(String[] args) { // scanner Scanner scan = new Scanner(System.in); // se llama random para crear vida y fuerza aleatoria al enemigo Random Random = new Random(); // variables int vida = 0; String nombre = ""; int rol; int fuerza = 0; String clase = ""; int entrenamiento = 1; int vidaEnemigo = Random.nextInt(50, 60); int fuerzaEnemigo = Random.nextInt(10, 30); int turno; String[] inventario = {"Poción", "Hierro", "Pergamino", "Llave Antigua"}; boolean activo = true; do { System.out.println("RPG Console Simulator"); System.out.println("1. Crear Personaje"); System.out.println("2. Entrenar"); System.out.println("3. Batalla"); System.out.println("4. Inventario"); System.out.println("5. Estado del personaje"); System.out.println("6. Salir"); int opcion = scan.nextInt(); scan.nextLine(); switch (opcion) { case 1 -> { System.out.println("Ingrese el nombre del heroe: "); nombre = scan.nextLine(); boolean rolValido = false; do { System.out.println("Ingrese el rol del heroe: "); System.out.println("1. Mago"); System.out.println("2. Guerrero"); System.out.println("3. Arquero"); System.out.println("4. Asesino"); System.out.println("5. Paladin"); rol = scan.nextInt(); switch (rol) { case 1 -> { clase = "Mago"; vida = 50; fuerza = 100; rolValido = true; System.out.println("Has creado un " + clase + " llamado " + nombre); } case 2 -> { clase = "Guerrero"; vida = 100; fuerza = 50; rolValido = true; System.out.println("Has creado un " + clase + " llamado " + nombre); } case 3 -> { clase = "Arquero"; vida = 75; fuerza = 75; rolValido = true; System.out.println("Has creado un " + clase + " llamado " + nombre); } case 4 -> { clase = "Asesino"; vida = 60; fuerza = 90; rolValido = true; System.out.println("Has creado un " + clase + " llamado " + nombre); } case 5 -> { clase = "Paladin"; vida = 120; fuerza = 40; rolValido = true; System.out.println("Has creado un " + clase + " llamado " + nombre); } default -> { System.out.println("Opción no válida. Elige nuevamente."); } } } while (!rolValido); } case 2 -> { while (entrenamiento != 0) { System.out.println("\n--- ENTRENAMIENTO ---"); System.out.println("1. +5 fuerza"); System.out.println("2. +10 vida"); System.out.println("0. Terminar"); entrenamiento = scan.nextInt(); if (entrenamiento == 1) { fuerza += 5; System.out.println("Fuerza aumentada."); } else if (entrenamiento == 2) { vida += 10; System.out.println("Vida aumentada."); } else if (entrenamiento != 0) { System.out.println("Opción inválida."); } System.out.println("Vida: " + vida + " | Fuerza: " + fuerza); } } case 3 -> { System.out.println("Batalla, espero que sobrevivas xdd"); for (turno = 1; turno <= 5; turno++) { System.out.println("Héroe — Vida: " + vida + " | Fuerza: " + fuerza); System.out.println("Enemigo — Vida: " + vidaEnemigo + " | Fuerza: " + fuerzaEnemigo); vida -= fuerzaEnemigo; vidaEnemigo -= fuerza; if (vida <= 0) { System.out.println("ERAI Compare"); break; } else if (vidaEnemigo <= 0) { System.out.println("GANASTE Prro"); break; } else { System.out.println("El combate continúa..."); } } } case 4 -> { System.out.println("\nINVENTARIO:"); for (String item : inventario) { System.out.println("- " + item); } } case 5 -> { System.out.println("Tu nombre es: " + nombre); System.out.println("Tu clase es: " + clase); if (vida >= 80) { System.out.println("Vida: " + vida + ". Estás en excelente estado."); } else if (vida >= 50) { System.out.println("Vida: " + vida + ". Estás en buen estado."); } else if (vida >= 20) { System.out.println("Vida: " + vida + ". Estás herido."); } else { System.out.println("Estás gravemente herido."); } System.out.println("Tu fuerza es: " + fuerza); } case 6 -> { System.out.println("Saliendo del juego..."); activo = false; } } } while (activo); } }