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>com.ironhack</groupId>
<artifactId>Homework-1</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>
5 changes: 5 additions & 0 deletions src/main/java/com/ironhack/homework/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.ironhack.homework;

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

public abstract class Character {
private static int nextId = 0;
private String id;
private String name;
private int hp;
private boolean isAlive ;

public Character(String name, int hp){
id = String.valueOf(nextId++);
this.name = name;
this.hp = hp;
this.isAlive = true;
}

public String getId() {
return id;
}

public int getHp() {
return hp;
}

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

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

public boolean isAlive() {
return isAlive;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
109 changes: 109 additions & 0 deletions src/main/java/com/ironhack/homework/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.ironhack.homework;

import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Character player1 = null;
Character player2 = null;

boolean stop = false;
while (!stop) {
System.out.println("\nMain Menu");
System.out.println("1. Create Character 1");
System.out.println("2. Create Character 2");
System.out.println("3. Start Battle");
System.out.println("4. Exit");
System.out.println("Choose an option: ");

String option = scanner.nextLine();

switch (option) {
case "1":
player1 = createCharacter(scanner, "Player 1");
break;
case "2":
player2 = createCharacter(scanner, "Player 2");
break;
case "3":
if(player1 == null || player2 == null){
System.out.println("You must create both characters first!");
}else{
startBattle(player1,player2);
}
break;
case "4":
stop = true;
break;
default:
System.out.println("Invalid option! Choose from valid options!");
}
}
scanner.close();
}
public static Character createCharacter(Scanner scanner, String playerTag){
System.out.println("\n--- Creating " + playerTag + "---");
String type = "";

while (!type.equals("warrior") && !type.equals("wizard")){
System.out.println("Choose a class: Warrior or Wizard");
type = scanner.nextLine();
}

System.out.println("Enter character name: ");
String name = scanner.nextLine().trim();

if(type.equals("warrior")){
int hp = ThreadLocalRandom.current().nextInt(100,201);
int stamina = ThreadLocalRandom.current().nextInt(10,51);
int strength = ThreadLocalRandom.current().nextInt(1,11);
System.out.println("Warrior " + name + " created! \n Hp " + hp + " Stamina " + stamina + " Strength " + strength);
return new Warrior(name, hp, stamina, strength);
}else{
int hp = ThreadLocalRandom.current().nextInt(50, 101);
int mana = ThreadLocalRandom.current().nextInt(10, 51);
int intelligence = ThreadLocalRandom.current().nextInt(1, 51);

System.out.println("Wizard " + name + " created! \nHp " + hp + " Mana " + mana + " Intelligence " + intelligence);
return new Wizard(name, hp, mana, intelligence);
}
}
public static void startBattle(Character player1, Character player2){
System.out.println("\n Battle Begins! " + player1.getName() + "VS" + player2.getName());
int round = 1;
while(player1.isAlive() && player2.isAlive()){
System.out.println("Round " + round);
((Attacker) player1).attack(player2);
((Attacker) player2).attack(player1);

System.out.println(player1.getName() + " Remaining Hp: " + player1.getHp());
System.out.println(player2.getName() + " Remaining Hp: " + player2.getHp());
round++;
}
if(!player1.isAlive() && !player2.isAlive()){
System.out.println("It's a tie!\n" + "Restarting battle!");
resetForRematch(player1,player2);
startBattle(player1,player2);
} else if (player1.isAlive()) {
System.out.println(player1.getName() + " is the winner!");
}else{
System.out.println(player2.getName() + " is the winner!");
}
}
public static void resetForRematch(Character player1, Character player2){
Character[] players = {player1,player2};

for(Character player : players){
if(player instanceof Warrior){
player.setHp(ThreadLocalRandom.current().nextInt(100,201));
((Warrior) player).setStamina(ThreadLocalRandom.current().nextInt(10,51));
}else if(player instanceof Wizard){
player.setHp(ThreadLocalRandom.current().nextInt(50,101));
((Wizard) player).setMana(ThreadLocalRandom.current().nextInt(10,51));
}
player.setAlive(true);
}
}
}
51 changes: 51 additions & 0 deletions src/main/java/com/ironhack/homework/Warrior.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.ironhack.homework;

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 stamina, int strength) {
super(name, hp);
setStamina(stamina);
setStrength(strength);
}

public int getStamina() {
return stamina;
}

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

public int getStrength() {
return strength;
}

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

@Override
public void attack(Character character) {
int damage = 0;
boolean heavy = random.nextBoolean();
if(heavy && stamina >= 5){
damage = strength;
stamina -= 5;
character.setHp(character.getHp() - damage);
System.out.println(getName() + " heavily attacked! Dealing " + damage + " damage! To " + character.getName());
}else if(stamina >= 1){
damage = strength / 2;
stamina += 1;
character.setHp(character.getHp() - damage);
System.out.println(getName() + " couldn't heavily attack! Dealing " + damage + " damage! To " + character.getName());
}else{
stamina += 2;
System.out.println(getName() + " recovering stamina. Current stamina: " + stamina);
}
}
}
52 changes: 52 additions & 0 deletions src/main/java/com/ironhack/homework/Wizard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.ironhack.homework;

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);
setMana(mana);
setIntelligence(intelligence);
}

public int getMana() {
return mana;
}

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

public int getIntelligence() {
return intelligence;
}

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

@Override
public void attack(Character character) {
int damage = 0;
boolean isFireball = random.nextBoolean();
if(isFireball && mana >= 5){
damage = intelligence;
character.setHp(character.getHp() - damage);
mana -= 5;
System.out.println(getName() + " attacked " + character.getName() + " with fireball dealing damage " + damage);
}else if(mana >= 0){
damage = 2;
character.setHp(character.getHp() - damage);
mana += 1;
System.out.println(getName() + " attacked " + character.getName() + " with staff dealing damage " + damage);
}else{
mana += 2;
System.out.println("Wizard is recovering mana. Current mana: " + mana);
}
character.setHp(character.getHp() - getIntelligence());
}
}