1. Introducción
El proyecto consistirá en reproducir combates como el famoso juego “Pokemon”, en el que dos entrenadores, cada uno con 6 pokemons lucharán por turnos hasta que alguno de los dos se agoten o se rinda.

2. Partes

  • Inicio
  • El inicio será una pantalla con:
    Un campo para introducir el nombre del usuario
    Un botón de entrar para entrar en la aplicación
    Un botón de ‘Acerca de’ que mostrará información sobre el autor.
    Un botón de ‘Ayuda’ que abrirá una ayuda
  • Pantalla de manejo de pokemons
  • Se podrán añadir nuevos pokemons, borrar, modificarlos, mostrarlos ordenados o buscar por nombre. Tendrá un botón de jugar para pasar a la siguiente pantalla.
  • Pantalla de elección de pokemons
  • Se escogerán 6 pokemons para cada entrenador de los que hay precargados
  • Pantalla de combate
  • Se mostrará nuestro pokemon y el rival, ambos con su barra de vida y su nombre, además de 4 opciones: Lucha, Pokemon(para elegir otro pokemon) y huida(para huir del combate). En el combate habrá interacción con el usuario.
  • Pantalla final
  • Al acabar la partida, saldrá una pantalla con victoria o con derrota
  • Código
  1. Clase Usuario
  2. Será el usuario o entrenador del juego. Dispondrá de los siguientes campos:
    Alias: Alias del usuario
    Lista de pokemons: Hasta 6 pokemons puede tener
    Fecha de registro: Para conocer cuando se registra y el tiempo que lleva registrado
    Se almacenarán en un archivo

  3. Clase Pokemon
  4. Será la clase padre de los pokemons. Tendrá los siguientes campos:
    Nombre: Nombre del pokemon
    Tipo: Será el tipo que tenga cada pokemon
    Vida: Vida del pokemon entre 300 y 500 Además todos los pokemons se almacenarán en un fichero, y al cargarlos se introducirán en un arrayList para manejarlos

  5. Clase Agua
  6. Clase hija que hereda de Pokemon. Implementa la interfaz Atacable y Defensable
    danoBase: Daño base para cada ataque de tipo agua.
    Defensa: Defensa de cada pokemon dependiendo del tipo del atacante
    Precisión: Precisión de cada ataque del pokemon
    Ataques[4]: Array de ataques de tipo agua. Cada uno tendrá un daño base + número aleatorio entre 30 y 90

  7. Clase Fuego
  8. Clase hija que hereda de Pokemon. Implementa la interfaz Atacable y Defensable
    danoBase: Daño base para cada ataque de tipo Fuego.
    Defensa: Defensa de cada pokemon dependiendo del tipo del atacante
    Precisión: Precisión de cada ataque del pokemon
    Ataques[4]: Array de ataques de tipo fuego. Cada uno tendrá un daño base + número aleatorio entre 30 y 90

  9. Clase Planta
  10. Clase hija que hereda de Pokemon. Implementa la interfaz Atacable y Defensable
    danoBase: Daño base para cada ataque de tipo Planta.
    Defensa: Defensa de cada pokemon dependiendo del tipo del atacante
    Precisión: Precisión de cada ataque del pokemon
    Ataques[4]: Array de ataques de tipo planta. Cada uno tendrá un daño base + número aleatorio entre 30 y 90

  11. Clase Electrico
  12. Clase hija que hereda de Pokemon. Implementa la interfaz Atacable y Defensable
    danoBase: Daño base para cada ataque de tipo eléctrico.
    Defensa: Defensa de cada pokemon dependiendo del tipo del atacante
    Precisión: Precisión de cada ataque del pokemon
    Ataques[4]: Array de ataques de tipo eléctrico. Cada uno tendrá un daño base + número aleatorio entre 30 y 90

  13. Clase Volador
  14. Clase hija que hereda de Pokemon. Implementa la interfaz Atacable y Defensable
    danoBase: Daño base para cada ataque de tipo volador.
    Defensa: Defensa de cada pokemon dependiendo del tipo del atacante
    Precisión: Precisión de cada ataque del pokemon
    Ataques[4]: Array de ataques de tipo volador. Cada uno tendrá un daño base + número aleatorio entre 30 y 90

  15. Enumeración Ataques
  16. /**
     * Ataques de tipo agua
     */
    PISTOLA_AGUA, HIDROBOMBA, RAYO_BURBUJA, SURF, HIDRO_CANON, ACUA_COLA, CASCADA, HIDROPULSO,
    
    /**
     * Ataques de tipo eléctrico
     */
    BOLA_VOLTIO, CHISPA, CHISPAZO, ELECTROCANION, IMPACTRUENO, ONDA_VOLTIO, RAYO, TRUENO,
    
    /**
     * Ataques de tipo fuego
     */
    ASCUAS, GIRO_FUEGO, LANZALLAMAS, LLAMARADA, ONDA_IGNEA, RUEDA_FUEGO, HUMAREDA, PIROTECNIA,
    
    /**
     * Ataques de tipo planta
     */
    HOJA_AFILADA, LATIGAZO, RAYO_SOLAR, FOGONAZO, ENERGIBOLA, CUCHILLA_SOLAR, DANZA_PETALO, HOJA_AGUDA,
    
    /**
     * Ataques de tipo volador
     */
    ACROBATA, AIRE_AFILADO, ATAQUE_AEREO, ATAQUE_ALA, GOLPE_AEREO, PICO_TALADRO, PICOTAZO, TORNADO;
    
  17. Interfaz Atacable
  18. Tendrá getAtaque().
    La clase que lo implemente, tendrá que calcular el daño para cada ataque que tenga, partiendo de un daño base de la propia clase y sumándole un numero aleatorio entre 30 y 90. Por ejemplo si el daño base es 15, se le sumará un aleatorio entre 30 y 90

  19. Interfaz Defensable
  20. Tendrá getDefensa().
    La clase que lo implemente, calculará la defensa según el tipo atacante. Si el tipo del atacante es superior al de nuestro pokemon actual, el daño recibido es doble, mientras que si es al contrario, el daño recibido es la mitad. Si es de un tipo indiferente, se reducirá del daño solo la defensa que tenga nuestro pokemon.

  21. Excepciones
  22. ContrasenaNoValidaException, CorreoNoValidoException, IndiceNoValidoException, PokemonNoExisteException, PokemonYaExisteException, UsuarioNoValidoException, VidaNoValidaException

  23. Expresiones regulares
  24. Para controlar que la dirección de correo, contraseña y nombre de usuario sean válidos.

  25. Fechas
  26. Para calcular cuanto tiempo lleva el usuario registrado en el sistema


NOTA:
Es necesario añadir la librería JavaMail incluida en src/resources/Libraries/mail.jar