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
39 changes: 39 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.kotlin

### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr

### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store
10 changes: 10 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ironhack</groupId>
<artifactId>ironbattle</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>25</maven.compiler.source>
<maven.compiler.target>25</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

</project>
50 changes: 50 additions & 0 deletions src/main/java/ironhack/Battle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package ironhack;

import ironhack.Characters.Character;

public class Battle {

private final Character c1;
private final Character c2;

public Battle(Character c1, Character c2) {
this.c1 = c1;
this.c2 = c2;
}

public void start() {
System.out.println("\n=== BATTLE START ===");
System.out.println(c1.getName() + " VS " + c2.getName());

int round = 1;

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

c1.attack(c2);
logStatus();

if (!c2.isAlive()) break;

c2.attack(c1);
logStatus();

round++;
}

System.out.println("\n=== BATTLE END ===");
if (c1.isAlive()) {
System.out.println("Winner: " + c1.getName());
} else {
System.out.println("Winner: " + c2.getName());
}
}

private void logStatus() {
System.out.println(
c1.getName() + " HP: " + c1.getHp() +
" | " +
c2.getName() + " HP: " + c2.getHp()
);
}
}
5 changes: 5 additions & 0 deletions src/main/java/ironhack/Characters/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ironhack.Characters;

public interface Attacker {
void attack(Character character);
}
50 changes: 50 additions & 0 deletions src/main/java/ironhack/Characters/Character.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package ironhack.Characters;

import java.util.UUID;

public abstract class Character implements Attacker{
private final String id;
private String name;
private int hp;
private boolean isAlive;

public Character(String name, int hp) {
this.id = UUID.randomUUID().toString();
this.name = name;
this.hp = hp;
this.isAlive = true;
}

public String getId() {
return id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getHp() {
return hp;
}

public void setHp(int hp) {
this.hp = hp;
if (this.hp <= 0) {
this.isAlive = false;
return;
}
this.isAlive = true;
}

public boolean isAlive() {
return isAlive;
}

public void setAlive(boolean alive) {
isAlive = alive;
}
}
71 changes: 71 additions & 0 deletions src/main/java/ironhack/Characters/Warrior.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package ironhack.Characters;

import java.util.Random;

public class Warrior extends Character {
private int stamina;
private int strength;
private final Random random = new Random();

public Warrior(String name, int hp, int stamina, int strength) {
super(name, hp);
setStamina(stamina);
setStrength(strength);
}

public int getStamina() {
return stamina;
}

public void setStamina(int stamina) {
if (stamina > 50 || stamina < 10) {
throw new IllegalArgumentException("Stamina should be between 10 and 50!");
}
this.stamina = stamina;
}

public int getStrength() {
return strength;
}

public void setStrength(int strength) {
if (strength > 10 || strength < 1) {
throw new IllegalArgumentException("Strength should be between 1 and 10!");
}
this.strength = strength;
}

@Override
public void attack(Character character) {

WarriorAttackType chosenAttack =
random.nextBoolean() ? WarriorAttackType.HEAVY : WarriorAttackType.WEAK;

if (chosenAttack == WarriorAttackType.HEAVY && stamina < WarriorAttackType.HEAVY.getStaminaCost()) {
chosenAttack = WarriorAttackType.WEAK;
}

if (chosenAttack == WarriorAttackType.WEAK && stamina <= 0) {
System.out.println(getName() + " is too exhausted and recovers 2 stamina...");
stamina += 2;
return;
}

if (chosenAttack == WarriorAttackType.HEAVY) {
character.setHp(character.getHp() - strength);
stamina -= WarriorAttackType.HEAVY.getStaminaCost();

System.out.println(
getName() + " performs a HEAVY attack for " + strength + " damage!"
);
} else {
int damage = strength / 2;
character.setHp(character.getHp() - damage);
stamina += 1;

System.out.println(
getName() + " performs a WEAK attack for " + damage + " damage!"
);
}
}
}
15 changes: 15 additions & 0 deletions src/main/java/ironhack/Characters/WarriorAttackType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ironhack.Characters;

public enum WarriorAttackType {
WEAK(0),
HEAVY(5);

private final int staminaCost;
WarriorAttackType(int staminaCost) {
this.staminaCost = staminaCost;
}

public int getStaminaCost() {
return staminaCost;
}
}
71 changes: 71 additions & 0 deletions src/main/java/ironhack/Characters/Wizard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package ironhack.Characters;

import java.util.Random;

public class Wizard extends Character {
private int mana;
private int intelligence;
private final Random random = new Random();

public Wizard(String name, int hp, int mana, int intelligence) {
super(name, hp);
setMana(mana);
setIntelligence(intelligence);
}

public int getMana() {
return mana;
}

public int getIntelligence() {
return intelligence;
}

public void setMana(int mana) {
if (mana > 50 || mana < 10) {
throw new IllegalArgumentException("Stamina should be between 10 and 50!");
}
this.mana = mana;
}

public void setIntelligence(int intelligence) {
if (intelligence > 50 || intelligence < 10) {
throw new IllegalArgumentException("Intelligence should be between 10 and 50!");
}
this.intelligence = intelligence;
}

@Override
public void attack(Character character) {

WizardAttackType chosenAttack =
random.nextBoolean() ? WizardAttackType.FIREBALL : WizardAttackType.STAFF_HIT;

if (chosenAttack == WizardAttackType.FIREBALL && mana < WizardAttackType.FIREBALL.getManaCost()) {
chosenAttack = WizardAttackType.STAFF_HIT;
}

if (chosenAttack == WizardAttackType.STAFF_HIT && mana <= 0) {
mana += 2;
System.out.println(getName() + " is out of mana and recovers 2 mana...");
return;
}

if (chosenAttack == WizardAttackType.FIREBALL) {
character.setHp(character.getHp() - intelligence);
mana -= WizardAttackType.FIREBALL.getManaCost();

System.out.println(
getName() + " casts FIREBALL for " + intelligence + " damage!"
);
} else {
int damage = 2;
character.setHp(character.getHp() - damage);
mana += 1;

System.out.println(
getName() + " performs a STAFF HIT for " + damage + " damage!"
);
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/ironhack/Characters/WizardAttackType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ironhack.Characters;

public enum WizardAttackType {
FIREBALL(5),
STAFF_HIT(0);

private final int manaCost;

WizardAttackType(int manaCost) {
this.manaCost = manaCost;
}

public int getManaCost() { return manaCost; }
}
Loading