Introducción a la Programación Help

T5A2: La lógica del juego

Objetivo

El objetivo de esta actividad es implementar la lógica básica del juego de aventura numérica, enfocándonos en la función playLevel(). En esta etapa, el jugador podrá enfrentar un nivel del juego, donde se le presentará un reto numérico simple y se actualizará su energía según su respuesta.

Instrucciones

Para efectos de esta actividad en adelante, haremos uso de las siguientes variables globales:

static String playerName; // Nombre del jugador static int playerEnergy; // Energía del jugador static String[] challenges; // Arreglo de retos numéricos static String[] answers; // Arreglo de respuestas correctas static int currentLevel; // Nivel actual del jugador

Así mismo, usaremos la siguiente clase para gestionar las ventas emergentes:

import javax.swing.*; public class InputHelper { public static String getStringInput(String message, String title) { String input; do { input = showInputDialog(title, message); if (input == null || input.trim().isEmpty()) { showErrorDialog(title, message); } } while (input == null || input.trim().isEmpty()); return input; } public static int getIntInput(String message, String title) { String input; do { input = showInputDialog(title, message); } while (!input.matches("-?\\d+")); return Integer.parseInt(input); } public static String getSelectedOption(String message, String title, String[] options) { String input; do { input = (String) JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); } while (input == null); return input; } public static boolean getConfirmation(String message, String title) { int result = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION); return result == JOptionPane.YES_OPTION; } public static double getDoubleInput(String message, String title) { String input; do { input = showInputDialog(title, message); } while (!input.matches("-?\\d+(\\.\\d+)?")); return Double.parseDouble(input); } public static String showInputDialog(String message, String title) { return JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE); } public static void showErrorDialog(String message, String title) { JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE); } public static void showInfoDialog(String message, String title) { JOptionPane.showMessageDialog(null, message, title, JOptionPane.INFORMATION_MESSAGE); } public static void showWarningDialog(String message, String title) { JOptionPane.showMessageDialog(null, message, title, JOptionPane.WARNING_MESSAGE); } }

Implementación de playLevel()

Implementa la función playLevel() para manejar la lógica del nivel del juego. Esta función debe:

  1. Presentar el reto numérico actual al jugador utilizando una ventana emergente.

    • Podemos obtener un número aleatorio para seleccionar un reto del arreglo challenges y su respuesta correspondiente del arreglo answers, mediante el siguiente código:

      int challengeIndex = (int) (Math.random() * challenges.length); String currentChallenge = challenges[challengeIndex]; String correctAnswer = answers[challengeIndex];
  2. Solicitar la respuesta del jugador utilizando una ventana emergente.

  3. Verificar si la respuesta es correcta comparándola con la respuesta almacenada en el arreglo answers.

  4. Actualizar la energía del jugador:

    • Si la respuesta es correcta, aumentar la energía del jugador en 10 puntos.

    • Si la respuesta es incorrecta, disminuir la energía del jugador en 15 puntos.

  5. Mostrar un mensaje al jugador indicando si su respuesta fue correcta o incorrecta, junto con su energía actual.

  6. Incrementar el nivel actual del jugador.

Aquí tienes un ejemplo de cómo podría verse la función playLevel():

public static void playLevel() { // Seleccionar un reto aleatorio int challengeIndex = (int) (Math.random() * challenges.length); String currentChallenge = challenges[challengeIndex]; String correctAnswer = answers[challengeIndex]; // Solicitar la respuesta del jugador String playerResponse = InputHelper.getStringInput(currentChallenge, "Reto Numérico"); // Verificar la respuesta y actualizar la energía if (playerResponse.equalsIgnoreCase(correctAnswer)) { playerEnergy += 10; String message = "¡Correcto! Has ganado 10 puntos de energía.\nEnergía actual: " + playerEnergy; InputHelper.showInfoDialog(message, "Respuesta Correcta"); } else { playerEnergy -= 15; String message = "Incorrecto. La respuesta correcta era: " + correctAnswer + "\nHas perdido 15 puntos de energía.\nEnergía actual: " + playerEnergy; InputHelper.showWarningDialog(message, "Respuesta Incorrecta"); } // Incrementar el nivel actual currentLevel++; }

Pruebas

Después de implementar la función playLevel(), realiza las siguientes pruebas:

  1. Asegúrate de que al llamar a playLevel(), se presente un reto numérico al jugador.

  2. Verifica que la energía del jugador se actualice correctamente según su respuesta.

  3. Comprueba que los mensajes mostrados al jugador sean claros y correctos.

Entrega

En un solo documento PDF, incluye lo siguiente:

  1. Portada con los siguientes datos:

    • Nombre del curso

    • Nombre del proyecto

    • Nombre de los integrantes del equipo

  2. Código fuente completo de la clase AventuraNumerica con la implementación de la función playLevel() y la clase InputHelper.

  3. Capturas de pantalla mostrando la ejecución del juego, incluyendo:

    • La presentación del reto numérico.

    • La respuesta del jugador.

    • El mensaje de resultado y la energía actual.

  4. Breve explicación de cómo funciona la función playLevel() y las decisiones tomadas en su implementación.

Criterios de Evaluación

Criterio

Descripción

Puntos

Funcionalidad

La función playLevel() cumple con todos los requisitos.

40%

Actualización de energía

La energía del jugador se actualiza correctamente según las respuestas.

30%

Mensajes al jugador

Los mensajes mostrados son claros y correctos.

20%

Calidad del código

Código limpio, bien comentado y organizado.

10%

Total

100%

Last modified: 17 November 2025