Job + Spell merge #9

Merged
erns6604 merged 23 commits from Job into main 2025-10-27 12:18:22 +01:00
5 changed files with 111 additions and 25 deletions
Showing only changes of commit fdf039348e - Show all commits

22
src/main/java/Attack.java Normal file
View File

@@ -0,0 +1,22 @@
public abstract class Attack {
//Namnet och bägge dessa siffror är helt lösryckta
private static final String DEFAULT_NAME = "DEFAULT_NAME";
private static final double DEFAULT_ENERGY_COST = 5d;
private static final double DEFAULT_DAMAGE = 5d;
private String name;
private double energyCost;
private double damage;
public Attack() {
name = DEFAULT_NAME;
energyCost = DEFAULT_ENERGY_COST;
damage = DEFAULT_DAMAGE;
}
public Attack(String name, double energyCost, double damage) {
this.name = name;
this.energyCost = energyCost;
this.damage = damage;
}
}

View File

@@ -1,40 +1,47 @@
//Vill inte göra så mycket med den här klassen, då jag vill påverka implementeringen av Player så lite som möjligt
public abstract class Character {
private static final int DEFAULT_HEALTH = 10;
private static final int DEFAULT_LEVEL = 1;
private static final double DEFAULT_HEALTH = 50d;
private static final double DEFAULT_LEVEL = 1.0;
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); //Är detta en bra idé?? Mest för att kunna ha defaultkonstruktor
// Borde jag bara sätta allt till default direkt här????
private int health;
private int level;
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 Position position;
private boolean isAlive; //osäker på om den här variabeln är en bra idé
// Hur många varianter på konstruktorn behövs?
public Character() {
this.health = DEFAULT_HEALTH;
this.level = DEFAULT_LEVEL;
this.energy = DEFAULT_ENERGY;
this.position = DEFAULT_POSITION;
isAlive = true;
}
// Jag antar att den som instansierar massa monster i världen ansvarar
// för att kolla att "position" har ett tillåtet värde.
// Just denna variant är bara för testning i min implementation av Monster
public Character(Position position) {
this.health = DEFAULT_HEALTH;
this.level = DEFAULT_LEVEL;
this.energy = DEFAULT_ENERGY;
this.position = position;
this.isAlive = true;
}
public Character(int health, int level, Position position) {
public Character(double health, double level, double energy, Position position) {
this.health = health;
this.level = level;
this.energy = energy;
this.position = position;
this.isAlive = true;
}
public int getHealth() {
//Returnerar true om attacken gick igenom, annars false
//Tänker att positionen som skickas in är karaktärens egna
//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() {
return health;
}
@@ -42,7 +49,7 @@ public abstract class Character {
health = newHealth;
}
public int getLevel() {
public double getLevel() {
return level;
}
@@ -50,6 +57,14 @@ public abstract class Character {
level = newLevel;
}
public double getEnergy() {
return energy;
}
public void setEnergy(double newEnergy) {
energy = newEnergy;
}
public Position getPosition() {
return position;
}
@@ -57,14 +72,4 @@ public abstract class Character {
public void setPosition(Position newPosition) {
position = newPosition;
}
public boolean isAlive() {
return isAlive;
}
// "status" är kanske inte ett jättebra namn...
public void setAlive(boolean status) {
isAlive = status;
}
}

View File

@@ -1,14 +1,30 @@
import java.util.*;
public abstract class Monster extends Character{
public Monster() {
private final List<Biomes> habitat = new ArrayList<>();
public Monster() {
habitat.addAll(Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST));
}
public Monster(Position position) {
super(position);
habitat.addAll(Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST));
}
public Monster(int health, int level, Position position) {
super(health, level, position);
public Monster(double health, double level, double energy, Position position) {
super(health, level, energy, position);
habitat.addAll(Arrays.asList(Biomes.GRASSLAND, Biomes.MOUNTAIN, Biomes.COAST, Biomes.FOREST));
}
public Monster(double health, double level, double energy, Position position, List<Biomes> habitat) {
super(health, level, energy, position);
this.habitat.addAll(habitat);
}
//Är detta bra??? Med unmodifiableList dvs
public List<Biomes> getHabitat() {
return Collections.unmodifiableList(habitat);
}
}

3
src/main/java/Shade.java Normal file
View File

@@ -0,0 +1,3 @@
public class Shade extends Monster {
}

View File

@@ -4,7 +4,47 @@ import org.junit.jupiter.api.Test;
public class MonsterTest {
@Test
void nothing_in_particular() {
void monster_cannot_attack_when_dead() {
/*
Monster someMonster = new Monster();
someMonster.setHealth(-5d);
Assert(false, someMonster.attack(someMonster.getPosition(), character));
*/
}
@Test
void monster_cannot_be_attacked_when_dead() {
/*
Monster attackingMonster = new Monster();
Monster deadMonster = new Monster();
deadMonster.setHealth(-4d);
Assert(false, attackingMonster.attack(attackingMonster.getPosition(), deadMonster));
*/
}
@Test
void monster_cannot_attack_character_at_different_position() {
/*
Monster monsterAtOnePosition = new Monster(new Position(0,0));
Monster monsterAtDifferentPosition = new Monster(new Position(1,1));
Assert(false, monsterAtOnePosition.attack(monsterAtOnePosition.getPosition(), monsterAtDifferentPosition);
*/
}
@Test
void monster_is_instantiated_correctly_from_default_constructor() {
/*
AssertAll????
*/
}
@Test
void monster_is_instantiated_correctly_from_position_only_constructor() {
}
@Test
void monster_is_instantiated_correctly_from_full_constructor() {
}
}