Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiagox/8a287126c6c7039e19cf8cb938738aea to your computer and use it in GitHub Desktop.
Save tiagox/8a287126c6c7039e19cf8cb938738aea to your computer and use it in GitHub Desktop.

Ejercicio de repaso para el primer parcial.

public class Arquero extends Unidad {
int flechas;
public Arquero() {
super();
this.flechas = 20;
this.salud = 50;
}
@Override
public boolean puedeAtacar(Unidad unidad) {
/*
* B. Los arqueros pueden atacar a una distancia de entre 2 y 5 respecto de su
* enemigo, y si tienen suficientes flechas. Infringen un daño de 5 puntos, y
* comienzan con 50 de salud.
*/
return estaVivo() && this.flechas > 0 && numeroEntre(this.posicion.distanciaCon(unidad.posicion), 2, 5);
}
private boolean numeroEntre(double numero, double limiteInferior, double limiteSuperior) {
return numero >= limiteInferior && numero <= limiteSuperior;
}
@Override
public int obtenerDaño() {
return 5;
}
@Override
public void despuesDeAtacar() {
this.flechas--;
}
}
public class Posicion {
private double x, y;
public double distanciaCon(Posicion posicion) {
return Math.sqrt(Math.pow(this.x - posicion.x, 2) + Math.pow(this.y - posicion.y, 2));
}
}
public class Soldado extends Unidad {
/*
* A. Los soldados pueden atacar cuerpo a cuerpo a otras unidades si tienen
* suficiente energía. Infringen un daño de 10 puntos, y comienzan con 200 de
* salud. B. Los arqueros pueden atacar a una distancia de entre 2 y 5 respecto
* de su enemigo, y si tienen suficientes flechas. Infringen un daño de 5
* puntos, y comienzan con 50 de salud. C. Los lanceros pueden atacar a una
* distancia de 1 a 3, sin condición. Infringen un daño de 25 puntos, y
* comienzan con 150 de salud. D. Los caballeros pueden atacar a una distancia
* de 1 a 2, siempre que su caballo no se haya puesto rebelde. Infringe un daño
* de 50 puntos y comienza con 200 de salud. Un caballo se pone rebelde luego de
* 3 ataques. Ninguna unidad muerta pueda atacar, por supuesto.
*/
int energia = 100;
public Soldado() {
super();
this.salud = 200;
}
@Override
public boolean puedeAtacar(Unidad unidad) {
return estaVivo() && energia > 0;
}
@Override
public int obtenerDaño() {
return 10;
}
@Override
public void despuesDeAtacar() {
this.energia -= 10;
}
}
public abstract class Unidad {
protected Posicion posicion;
protected int salud;
public abstract boolean puedeAtacar(Unidad unidad);
public abstract int obtenerDaño();
public abstract void despuesDeAtacar();
public final void atacar(Unidad unidad) {
if (puedeAtacar(unidad)) {
unidad.recibirAtaque(obtenerDaño());
}
despuesDeAtacar();
}
private void recibirAtaque(int daño) {
this.salud = Math.max(0, this.salud - daño);
}
protected boolean estaVivo() {
return this.salud > 0;
}
}
@Mechin28
Copy link

Mechin28 commented Aug 4, 2021

Hola, alguien tiene el main de este ejercicio?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment