jump to navigation

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.