Ejercicio 1 Septiembre 11, 2008
Posted by beceoca in 1.trackback
César Juárez Megías
ENUNCIADO EJERCICIO 1
El problema consiste en crear clases que representan cada una a un personaje de un juego de rol y una interfaz
Clase personaje:
Es una clase que recoge todas las características comunes de todos los tipos de personaje existentes.
Debe programarse de forma que no se puedan crear instancias de ella.
- Información que deberá guardar como mínimo:
· Vida del personaje.
· Fuerza.
· Inteligencia.
· Astucia.
· Vigor inicial: Esta característica tendrá en todo momento el mismo valor para todos los personajes
Si alguno de los personajes cambia su vigor, el nuevo valor cambiará para todos.
- Métodos:
· Constructores varios: deben inicializar la información del personaje, y tomar nota del objeto que los llamó, a fin poder llamarlo más tarde.
· Métodos de acceso a la información: deberán notificar al método “personajeCambiado(Personaje)” del objeto que creo el personaje cada cambio que se produzca en la información del personaje.
· Un método “imprimir()” sin implementar.
Clase Guerrero: Guardará la misma información y tendrá los mismos métodos que Personaje, añadiendo además:
- Información:
· Habilidad.
· Puntería.
· Una variable que lleve la cuenta de cuantos guerreros hay creados en cada momento.
- Métodos:
· Un método para imprimir por pantalla toda la información del personaje.
Clase Maga: Guardará la misma información y tendrá los mismos métodos que Personaje, y además añadirá:
- Información:
· Magia.
· Poder de la luz.
· Una variable que lleve la cuenta de cuantas magas hay en cada momento.
- Métodos:
· Un método para imprimir por pantalla toda la información del personaje.
· Esta clase deberá además implementar la interfaz “Hechicero”.
Interfaz Hechicero:
- Métodos:
· Doblar magia.
· Doblar poder de la luz.
Clase de prueba: El método “main” de esta clase de prueba dará un valor inicial al vigor de los personajes, después procederá a crear una maga. Debe incluir también un método personajeCambiado(Personaje), que simplemente imprima por pantalla las características del personaje cambiado.
NOTA: en el ejercicio resuelto he puesto que tiene que haber algún método parecido o igual que el getSource() para saber quien ha llamado a un método, por lo tanto se debería poner en el enunciado dicho método ya que no es común y no tiene porqué conocerse (por lo menos desde mi punto de vista)
CLASES EJERCICIO 1
(para hacer la lectura más fácil he puesto los comentarios en color verde)
Clase Personaje
//Ponemos la clase como abstract para no poder instanciarla
public abstract class Personaje{
//Definimos los atributos
private int vida;
private int fuerza;
private int inteligencia;
private int astucia;
private static int vigorInicial;
//constuctor
public Personaje(int vida, int fuerza, int inteligencia, int astucia, int vigorInicial){
this.vida = vida;
this.fuerza = fuerza;
this.inteligencia = inteligencia;
this.astucia = astucia;
this.vigorInicial = vigorInicial;
}
//metodos get…
public int getVida(){
return vida;}
public int getFuerza(){
return fuerza;}
public int getInteligencia(){
return inteligencia;}
public int getAstucia(){
return astucia;}
public int getVigorInicial(){
return vigorInicial;}
//Métodos set… para saber quién ha llamado a este método usaríamos algún método ya creado parecido a getSource(), que nos devolviera el objeto que ha llamado al método
public void setVida(int a){
a = vida;
personajeCambiado(metodo tipo getsource);}
public void setFuerza(int a){
a = fuerza;
personajeCambiado(metodo tipo getsource);}
public void setInteligencia(int a){
a = inteligencia;
personajeCambiado(metodo tipo getsource);}
public void setAstucia(int a){
a = astucia;
personajeCambiado(metodo tipo getsource);}
public void setVigorInicial(int a){
a = vigorInicial;
personajeCambiado(metodo tipo getsource);}
public abstract void imprimir(){}
}
Clase Guerrero
//Esta clase hereda de personaje
public class Guerrero extends Personaje{
//Definimos los atributos necesarios
private int habilidad;
private int punteria;
private static int guerrerosCreados = 0;
//Constructor
public Guerrero(int vida, int fuerza, int inteligencia, int astucia, int vigorInicial, int habilidad, int punteria){
super(vida, fuerza, inteligencia, astucia, vigorInicial);
this.habilidad = habilidad;
this.punteria= punteria;
guerrerosCreados++;
}
//Nos ahorraríamos bastante código si el método imprimir de la clase Personaje estuviera ya implementado, ya que los valores comunes no nos haría falta ponerlo y se pondría solo super.imprimir();
public void imprimir(){
System.out.println(“Vida: “+getVida()+” Fuerza: “+getFuerza()+” Inteligencia: “+getInteligencia()+” Astucia: “+getAstucia()+” Vigor inicial: “+getVigorInicial()+” Habilidad: “+getHabilidad()+” Punteria: “+getPunteria()+” Numero de guerreros creados: “+getGuerrerosCreados);}
//Metodos get… al heredarlos de la clase personaje ponemos super.get…()
public int getVida(){
super.getVida();}
public int getFuerza(){
getFuerza();}
public int getInteligencia(){
getInteligencia();}
public int getAStucia(){
super.getVida();}
public int getVigorInicial(){
super.getVigorInicial();}
//Los tres métodos get… nuevos son:
public int getHabilidad(){
return(habilidad);}
public int getPunteria(){
return(punteria);}
public int getGuerrerosCreados(){
return(guerrerosCreados);}
//Metodos set… al heredarlos de la clase personaje ponemos super.set…()
public int setVida(int a){
super.setVida(a);}
public int setFuerza(int a){
super.setFuerza(a);}
public int setInteligencia(int a){
super.setInteligencia(a);}
public int setAstucia(int a){
super.setVida(a);}
public int setVigorInicial(int a){
super.setVigorInicial(a);}
//Los dos métodos set… nuevos son:
public int setHabilidad(int a){
a = habilidad;}
public int setPunteria(int a){
a = punteria;}}//Fin de la clase Guerrero
Interfaz Hechicero
public interface Hechicero{
public void doblaMagia();
public void doblaPoderLuz();
}
Clase Maga
//Esta clase hereda de la clase Personaje
public class Maga extends Personaje implements Hechicero{
//Definimos los atributos necesarios
private int magia;
private int poderLuz;
private static magasCreadas = 0;
//Constructor
public Maga (int vida, int fuerza, int inteligencia, int astucia, int vigorInicial, int magia,int poderLuz){
super(vida, fuerza, inteligencia, astucia, vigorInicial);
this.magia = magia;
this.poderLuz = poderLuz;
magasCreadas++;
}
//Nos ahorraríamos bastante código si el método imprimir de la clase Personaje estuviera ya implementado, ya que los valores comunes no nos haría falta ponerlo y se pondría solo super.imprimir();
public void imprimir(){
System.out.println(“Vida: “+getVida()+” Fuerza: “+getFuerza()+” Inteligencia: “+getInteligencia()+” Astucia: “+getAstucia()+” Vigor inicial: “+getVigorInicial()+” Magia: “+getMagia()+” Poder de la luz”+getPoderLuz()+” Numero de magas creadas: “+getMagasCreadas);}
//Métodos de la interfaz hechicero, no hace falta pasarles ningun parametro, ya que lo tienen en esta misma clase
public void doblaMagia(){
magia = magia*2;}
public void doblaPoderLuz(){
poderLuz = poderLuz*2;}
//Metodos get… al heredarlos de la clase personaje ponemos super.get…()
public int getVida(){
super.getVida();}
public int getFuerza(){
getFuerza();}
public int getInteligencia(){
getInteligencia();}
public int getAstucia(){
super.getVida();}
public int getVigorInicial(){
super.getVigorInicial();}
//Los tres métodos get…nuevos son:
public int getMagia(){
return(magia);}
public int getPoderLuz(){
return(poderLuz);}
public int getMagasCreadas(){
return(magasCreadas);}
//Metodos set… al heredarlos de la clase personaje ponemos super.set…()
public int setVida(int a){
super.setVida(a);}
public int setFuerza(int a){
super.setFuerza(a);}
public int setInteligencia(int a){
super.setInteligencia(a);}
public int setAstucia(int a){
super.setVida(a);}
public int setVigorInicial(int a){
super.setVigorInicial(a);}
//Los dos métodos set nuevos son:
public int setMagia(int a){
a = magia;}
public int setPoderLuz(int a){
a = poderLuz;}}//fin de la clase Maga
Clase Prueba
public class Prueba{
//Método personajeCambiado, se le pasa como parámetro el objeto al que se ha hecho el cambio, y por lo tanto imprimimos los nuevos datos de ese objeto
public void personajeCambiado(Personaje p){
System.out.println(“Un personaje ha sido cambiado, los nuevos valores son: “);
p.imprimir();
}
//Main, damos valor inicial al vigor (de la clase personaje) y creamos un objeto tipo Maga
public static void main (String [] args){
Personaje.setVigorInicial=0;
Maga maga1= new Maga(100, 100, 100, 100, 100, 100, 100);
}}
CONCEPTOS USADOS EN EL EJERCICIO 1
Los conceptos que se tocan en este ejercicio son los siguientes:
- Herencia, con todo lo que ello supone, incluido sobreescritura de métodos en las clases que heredan
- Modificadores de acceso
- Interfaces
Comentarios»
No comments yet — be the first.