equipments #22

Merged
viud3133 merged 40 commits from equipments into main 2025-10-30 12:09:43 +01:00
5 changed files with 48 additions and 56 deletions
Showing only changes of commit abc209d313 - Show all commits

View File

@@ -19,4 +19,6 @@ public abstract class Attack {
this.energyCost = energyCost; this.energyCost = energyCost;
this.damage = damage; this.damage = damage;
} }
public abstract boolean perform(Character target);
} }

View File

@@ -1,20 +1,17 @@
//Vill inte göra så mycket med den här klassen, då jag vill påverka implementeringen av Player så lite som möjligt import Entity.Position;
public abstract class Character { public abstract class Character {
private static final double DEFAULT_HEALTH = 50d; private static final double DEFAULT_HEALTH = 50d;
private static final double DEFAULT_LEVEL = 1.0; private static final double DEFAULT_ENERGY = 20d;
private static final double DEFAULT_ENERGY = 50d; //Detta borde kanske egentligen beräknas och sättas automatiskt genom en algoritm som tar health och level i beaktskap?? Eller något sådant private static final Position DEFAULT_POSITION = new Position(0,0);
private static final Position DEFAULT_POSITION = new Position(0,0); //Är detta en bra idé?? Mest för att kunna ha defaultkonstruktor
// Borde jag bara sätta allt till default direkt här????
private double health; private double health;
private double level;
private double energy; //Borde kanske beräknas genom en algoritm istället för att kunna sättas i konstruktorn... Så det alltid blir balanserat private double energy; //Borde kanske beräknas genom en algoritm istället för att kunna sättas i konstruktorn... Så det alltid blir balanserat
private Position position; private Position position;
// Hur många varianter på konstruktorn behövs? // Hur många varianter på konstruktorn behövs?
public Character() { public Character() {
this.health = DEFAULT_HEALTH; this.health = DEFAULT_HEALTH;
this.level = DEFAULT_LEVEL;
this.energy = DEFAULT_ENERGY; this.energy = DEFAULT_ENERGY;
this.position = DEFAULT_POSITION; this.position = DEFAULT_POSITION;
} }
@@ -24,22 +21,18 @@ public abstract class Character {
// Just denna variant är bara för testning i min implementation av Monster // Just denna variant är bara för testning i min implementation av Monster
public Character(Position position) { public Character(Position position) {
this.health = DEFAULT_HEALTH; this.health = DEFAULT_HEALTH;
this.level = DEFAULT_LEVEL;
this.energy = DEFAULT_ENERGY; this.energy = DEFAULT_ENERGY;
this.position = position; this.position = position;
} }
public Character(double health, double level, double energy, Position position) { public Character(double health, double energy, Position position) {
this.health = health; this.health = health;
this.level = level;
this.energy = energy; this.energy = energy;
this.position = position; this.position = position;
} }
//Returnerar true om attacken gick igenom, annars false //Returnerar true om attacken gick igenom, annars false
//Tänker att positionen som skickas in är karaktärens egna abstract boolean attack(Character character);
//Kommer antagligen behöva diverse hjälpmetoder i implementeringen då det är många krav som måste uppfyllas för att attacken ska gå igenom
abstract boolean attack(Position position, Character character);
public double getHealth() { public double getHealth() {
return health; return health;

View File

@@ -1,18 +1,30 @@
import Entity.Position; import Entity.Position;
import java.util.*; import java.util.*;
public abstract class Monster extends Character{ public abstract class Monster {
private final List<Biomes> habitat = new ArrayList<>(); private static final double DEFAULT_HEALTH = 50d;
private static final double DEFAULT_ENERGY = 20d;
private static final Position DEFAULT_POSITION = new Position(0,0);
private static final List<Biomes> DEFAULT_HABITAT = Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST);
private double health;
private double energy; //Borde kanske beräknas genom en algoritm istället för att kunna sättas i konstruktorn... Så det alltid blir balanserat
private Position position;
private List<Biomes> habitat;
public Monster() { public Monster() {
habitat.addAll(Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST)); this.health = DEFAULT_HEALTH;
this.energy = DEFAULT_ENERGY;
this.position = DEFAULT_POSITION;
this.habitat.addAll(DEFAULT_HABITAT);
} }
public Monster(Position position) { public Monster(Position position) {
super(position); this-health = DEFAULT_HEALTH;
habitat.addAll(Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST)); this.energy = DEFAULT_ENERGY;
this.position = position;
this.habitat.addAll(DEFAULT_HABITAT);
} }
public Monster(double health, double level, double energy, Position position) { public Monster(double health, double level, double energy, Position position) {

View File

@@ -1,50 +1,35 @@
import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.*;
import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Mockito.mock;
import Entity.Player;
public class MonsterTest { public class MonsterTest {
@Test private Shade defaultShade;
void monster_cannot_attack_when_dead() { private Player defaultPlayer = mock(Player.class);
/*
Monster someMonster = new Monster(); @BeforeEach
someMonster.setHealth(-5d); void reset() {
Assert(false, someMonster.attack(someMonster.getPosition(), character)); defaultShade = new Shade(); //Återställer alla värden till default
*/
} }
@Test @Test
void monster_cannot_be_attacked_when_dead() { void monster_cannot_act_after_death() {
/* defaultShade.setHealth(0);
Monster attackingMonster = new Monster(); assertThat(false, anyOf(defaultShade.moveTo(0, 1), defaultShade.attack(Attacks.CHILL, defaultPlayer)));
Monster deadMonster = new Monster();
deadMonster.setHealth(-4d);
Assert(false, attackingMonster.attack(attackingMonster.getPosition(), deadMonster));
*/
} }
@Test @Test
void monster_cannot_attack_character_at_different_position() { void reaching_zero_health_triggers_death() {
/* defaultShade.setHealth(0);
Monster monsterAtOnePosition = new Monster(new Position(0,0)); assertThat(true, is(defaultShade.isAlive()));
Monster monsterAtDifferentPosition = new Monster(new Position(1,1));
Assert(false, monsterAtOnePosition.attack(monsterAtOnePosition.getPosition(), monsterAtDifferentPosition);
*/
} }
@Test @Test
void monster_is_instantiated_correctly_from_default_constructor() { void monster_cannot_regain_health_after_death() {
/* defaultShade.setHealth(0);
AssertAll???? defaultShade.setHealth(10d);
*/ assertThat(defaultShade.getHealth(), equalTo(0));
}
@Test
void monster_is_instantiated_correctly_from_position_only_constructor() {
}
@Test
void monster_is_instantiated_correctly_from_full_constructor() {
} }
} }