Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions main/java/com/example/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example;

public interface Attacker {
void Attack(Character target);
}
47 changes: 47 additions & 0 deletions main/java/com/example/BattleSimulator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.example;

import java.util.Random;

public class BattleSimulator {
public static void duel(Character c1,Character c2){
System.out.println("Duel Started - Player one: "
+ c1.getName()
+ " | Player two: "
+ c2.getName());
int round = 1;
boolean WinnerFound=false;

while (c1.isAlive() && c2.isAlive()) {
System.out.println("Round " + round + ":");


if (c1 instanceof Attacker) ((Attacker)c1).Attack(c2);
if (c2 instanceof Attacker) ((Attacker)c2).Attack(c1);

System.out.println(c1.getName() + " HP: " + c1.getHp());
System.out.println(c2.getName() + " HP: " + c2.getHp());
System.out.println("-------------------\n");

round++;


}
if (c1.isAlive() && !c2.isAlive()) {
System.out.println(c1.getName() + " WINS!");
WinnerFound=true;
} else if (!c1.isAlive() && c2.isAlive()) {
System.out.println(c2.getName() + " WINS!");
WinnerFound=true;
} else {
System.out.println("It's a TIE! Restarting battle...");
c1.setHp(100 + new Random().nextInt(101));
c1.setAlive(true);
c2.setHp(100 + new Random().nextInt(101));
c2.setAlive(true);

}


}

}
57 changes: 57 additions & 0 deletions main/java/com/example/Character.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.example;

public abstract class Character {
private String id;
private String name;
private int hp;
private boolean isAlive=true;

public String getId() {
return id;
}

public void setId(String id) {
if (id==null){
throw new NullPointerException("The id cannot be null");
}
else{
this.id=id;
}
}

public String getName() {
return name;
}

public void setName(String name) {
if(name==null){
throw new NullPointerException("The name cannot be null");
}
else{
this.name = name;
}
}

public int getHp() {
return hp;
}

public void setHp(int hp) {
this.hp = Math.max(0,hp);
if(this.hp==0){this.isAlive=false;}
}

public boolean isAlive() {
return isAlive;
}

public void setAlive(boolean alive) {
this.isAlive = alive;
}

public Character(String name, int hp) {
this.id=super.toString();
this.name = name;
this.hp = hp;
}
}
34 changes: 34 additions & 0 deletions main/java/com/example/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example;

import java.util.Random;

import static com.example.BattleSimulator.duel;

public class Main {
public static void main(String[] args){
try{
Random random=new Random();
Warrior warrior = new Warrior(
"Knight",
150 + random.nextInt(51),
20 + random.nextInt(31),
5 + random.nextInt(6)
);

Wizard wizard = new Wizard(
"Saruman",
80 + random.nextInt(41),
15 + random.nextInt(21),
8 + random.nextInt(16)
);

duel(warrior,wizard);
}
catch (IllegalArgumentException e) {
System.out.println("Invalid number: " + e.getMessage());
}
finally {
System.out.println("Code was executed");
}
}
}
46 changes: 46 additions & 0 deletions main/java/com/example/Warrior.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.example;

import java.util.Random;

public class Warrior extends Character implements Attacker {

private int stamina;
private int strength;
private Random random = new Random();

public Warrior(String name, int hp, int strength, int stamina) {
super(name, hp);
this.stamina = stamina;
this.strength = strength;
}

public int getStamina() { return stamina; }
public void setStamina(int stamina) { this.stamina = Math.max(0, stamina); }

public int getStrength() { return strength; }
public void setStrength(int strength) { this.strength = Math.max(0, strength); }

@Override
public void Attack(Character target) {

boolean heavyAttack = random.nextBoolean();
int damage = 0;

if (heavyAttack && stamina >= 5) {
damage = strength;
target.setHp(target.getHp() - damage);
stamina -= 5;
System.out.println(getName() + " attacks " + target.getName() + " with HEAVY attack for " + damage + " damage");
}
else if (stamina >= 1) {
damage = strength / 2;
target.setHp(target.getHp() - damage);
stamina += 1;
System.out.println(getName() + " attacks " + target.getName() + " with WEAK attack for " + damage + " damage");
}
else {
stamina += 2;
System.out.println(getName() + " is exhausted and recovers stamina");
}
}
}
44 changes: 44 additions & 0 deletions main/java/com/example/Wizard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example;

import java.util.Random;

public class Wizard extends Character implements Attacker {

private int mana;
private int intelligence;
private Random random = new Random();

public Wizard(String name, int hp, int mana, int intelligence) {
super(name, hp);
this.mana = mana;
this.intelligence = intelligence;
}

public int getMana() { return mana; }
public void setMana(int mana) { this.mana = Math.max(0, mana); }

public int getIntelligence() { return intelligence; }
public void setIntelligence(int intelligence) { this.intelligence = Math.max(0, intelligence); }

@Override
public void Attack(Character target) {

boolean fireball = random.nextBoolean();
int damage = 0;

if (fireball && mana >= 5) {
damage = intelligence;
target.setHp(target.getHp() - damage);
mana -= 5;
System.out.println(getName() + " attacks " + target.getName() + " with FIREBALL for " + damage + " damage");
}
else if (mana > 0) {
damage = 2;
target.setHp(target.getHp() - damage);
mana += 1;
} else {
mana += 2;
System.out.println(getName() + " has no mana and recovers");
}
}
}
37 changes: 37 additions & 0 deletions test/java/WizardTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import com.example.Wizard;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

public class WizardTest {
private Wizard wizard;
@BeforeEach
void setUp(){
wizard=new Wizard("Sauron",100,20,35);
}
@Test
void NewWizardTest(){
assertNotNull(wizard);
assertEquals("Sauron",wizard.getName());
assertEquals(100,wizard.getHp());
assertEquals(20,wizard.getMana());
assertEquals(35,wizard.getIntelligence());
}
@Test
void WizardGettersTest(){
assertEquals("Sauron",wizard.getName());
assertEquals(100,wizard.getHp());
assertEquals(20,wizard.getMana());
assertEquals(35,wizard.getIntelligence());
}
@Test
void WizardSettersTest(){
wizard=new Wizard("Gandalf",101,20,34);
assertEquals("Gandalf",wizard.getName());
assertEquals(101,wizard.getHp());
assertEquals(20,wizard.getMana());
assertEquals(34,wizard.getIntelligence());
}

}