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

### 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.

39 changes: 39 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?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>com.ironhack</groupId>
<artifactId>homework-java-ironbattle</artifactId>
<version>1.0-SNAPSHOT</version>

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

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.11.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.11.0</version>
<scope>test</scope>
</dependency>

</dependencies>

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

import com.ironhack.ui.MainMenu;

public class Main {
public static void main(String[] args) {
MainMenu.startRpgSimulator();
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/ironhack/factory/CharacterFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.ironhack.factory;

import com.ironhack.model.Warrior;
import com.ironhack.model.Wizard;
import java.util.Random;

public class CharacterFactory {
private static final Random random = new Random(System.currentTimeMillis());

public static Warrior createWarrior(String name, int hp, int stamina, int strength) {
return new Warrior(name, hp, stamina, strength);
}

public static Wizard createWizard(String name, int hp, int mana, int intelligence) {
return new Wizard(name, hp, mana, intelligence);
}

public static Warrior createRandomWarrior(String name) {
int hp = random.nextInt(101) + 100;
int stamina = random.nextInt(41) + 10;
int strength = random.nextInt(10) + 1;
return new Warrior(name, hp, stamina, strength);
}

public static Wizard createRandomWizard(String name) {
int hp = random.nextInt(51) + 50;
int mana = random.nextInt(41) + 10;
int intelligence = random.nextInt(50) + 1;
return new Wizard(name, hp, mana, intelligence);
}
}
27 changes: 27 additions & 0 deletions src/main/java/com/ironhack/io/InputHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ironhack.io;

import java.util.Scanner;

public class InputHandler {
private final static Scanner scanner = new Scanner(System.in);

public static Scanner getScanner() {
return scanner;
}

public static int readIntInRange(String prompt, int min, int max) {
int value = -1;
while (value < min || value > max) {
try {
System.out.print(prompt);
value = Integer.parseInt(scanner.nextLine());
if (value < min || value > max) {
System.out.println("Value must be between " + min + " and " + max + ".");
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Enter a number.");
}
}
return value;
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/ironhack/model/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.ironhack.model;

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

import java.util.Random;
import java.util.UUID;

public abstract class Character {
private final String id = UUID.randomUUID().toString();
private String name;
private int hp;
private boolean isAlive = true;

private final int initialHp;

protected static final Random random = new Random(System.currentTimeMillis());

protected Character(String name, int hp) {
this.name = name;
this.hp = hp;
this.initialHp = hp;
}

public int getInitialHp() {
return initialHp;
}

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 = Math.max(0, hp);
if (this.hp == 0) setAlive(false);
}

public boolean isAlive() {
return isAlive;
}

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

public class Warrior extends Character implements Attacker {
private int stamina;
private int strength;

private final int initialStamina;

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

@Override
public void attack(Character target) {
boolean heavy = random.nextBoolean();

int damage = performAttack(heavy);
target.setHp(target.getHp() - damage);

System.out.println(getName() + " deals " + damage + " damage to " + target.getName());
}

private int performAttack(boolean heavy) {
int damage = 0;
if (heavy && stamina >= 5) {
damage = strength;
stamina -= 5;
System.out.println(getName() + " performs HEAVY attack!");
} else if (stamina > 0) {
damage = strength / 2;
stamina += 1;
System.out.println(getName() + " performs WEAK attack!");
} else {
stamina += 2;
System.out.println(getName() + " is exhausted and recovers stamina.");
}
return damage;
}

public int getInitialStamina() {
return initialStamina;
}

public int getStamina() {
return stamina;
}

public void setStamina(int stamina) {
this.stamina = stamina;
}

public int getStrength() {
return strength;
}

public void setStrength(int strength) {
this.strength = strength;
}
}
64 changes: 64 additions & 0 deletions src/main/java/com/ironhack/model/Wizard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.ironhack.model;

public class Wizard extends Character implements Attacker {
private int mana;
private int intelligence;

private final int initialMana;

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

@Override
public void attack(Character target) {
boolean fireball = random.nextBoolean();

int damage = performAttack(fireball);
target.setHp(target.getHp() - damage);

System.out.println(getName() + " deals " + damage + " damage to " + target.getName());
}

private int performAttack(boolean fireball) {
int damage = 0;
if (fireball && mana >= 5) {
damage = intelligence;
mana -= 5;
System.out.println(getName() + " casts FIREBALL!");
}
else if (mana > 0) {
damage = 2;
mana += 1;
System.out.println(getName() + " hits with STAFF!");
}
else {
mana += 2;
System.out.println(getName() + " is out of mana and regenerates.");
}
return damage;
}

public int getInitialMana() {
return initialMana;
}

public int getMana() {
return mana;
}

public void setMana(int mana) {
this.mana = mana;
}

public int getIntelligence() {
return intelligence;
}

public void setIntelligence(int intelligence) {
this.intelligence = intelligence;
}
}
Loading