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 characters.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type,name,hp,mana,intelligence,stamina,strength
WIZARD,Gandalf,120,150,95,0,0
WIZARD,Merlin,100,130,90,0,0
WARRIOR,Aragorn,180,0,0,120,85
WARRIOR,Leonidas,200,0,0,140,95
5 changes: 5 additions & 0 deletions src/main/java/IronBattle/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package IronBattle;

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

public class BattleSimulator {

public void starter(Character player1, Character player2) {
System.out.println("Battle Simulator started");
System.out.println("Player 1: " + player1.getName());
System.out.println("Player 2: " + player2.getName());

Character c1=introduceCharacter(player1);
Character c2=introduceCharacter(player2);

boolean finished = false;
int round = 1;
while (!finished) {
if(player1.isAlive() && player2.isAlive()){
System.out.println("Round " + round );
player1.attack(player2);
player2.attack(player1);

System.out.println(player1.getName() + " is attacking " + player1.getHp());
System.out.println(player2.getName() + " is attacking " + player2.getHp());

round++;

}
else if(!player1.isAlive() && !player2.isAlive()){
System.out.println("It's a tie");
player1=introduceCharacter(c1);
player2=introduceCharacter(c2);


}
else if(!player2.isAlive()){
System.out.println(player1.getName() + " won the game");
finished = true;

}else {
System.out.println(player1.getName() + " won the game");
finished = true;
}
}
}

public Character introduceCharacter(Character c){
if(c instanceof Wizard w){
return new Wizard(w.getName(),w.getHp(),w.getMana(),w.getIntelligence());
}else if(c instanceof Warrior w){
return new Warrior(w.getName(),w.getHp(),w.getStamina(),w.getStrength());
}
return null;
}


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

import java.util.UUID;

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

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

public String getId() {
return id;
}

public void setId(String id) {
this.id = 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.hp = 0;
this.isAlive = false;
}
}

public boolean isAlive() {
return isAlive;
}

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

import IronBattle.util.Util;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Main {

private static final Scanner sc = new Scanner(System.in);
private static final Random rand = new Random();


public static void main(String[] args) throws FileNotFoundException {
Character player1 = null;
Character player2 = null;
boolean isRunning = true;
while (isRunning) {
System.out.println("\n=== IRON BATTLE MENU ===");
System.out.println("1) Create Player 1 " + (player1 != null ? "[" + player1.getName() + " Ready]" : "[Not Created]"));
System.out.println("2) Create Player 2 " + (player2 != null ? "[" + player2.getName() + " Ready]" : "[Not Created]"));
System.out.println("3) Load Players from CSV (Bonus)");
System.out.println("4) Start Battle ");
System.out.println("5) Simulate Random Battle (Bonus) ");
System.out.println("6) Exit Game ");
System.out.print("Choose an option: ");


String choice = sc.nextLine();
switch (choice) {
case "1":
createCharacter(1);
break;
case "2":
createCharacter(2);
break;
case "3":

List<Character> importedList = importCharactersFromCSV("characters.csv");
if (importedList.size() >= 2) {
System.out.println("\n--- Characters available in CSV ---");
for (int i = 0; i < importedList.size(); i++) {
Character c = importedList.get(i);
System.out.println((i + 1) + ") " + c.getName() + " [" + c.getClass().getSimpleName() + ", HP: " + c.getHp() + "]");
}

try {
System.out.print("\nSelect Player 1 (Enter number): ");
int p1Index = Integer.parseInt(sc.nextLine()) - 1;
player1 = importedList.get(p1Index);

System.out.print("Select Player 2 (Enter number): ");
int p2Index = Integer.parseInt(sc.nextLine()) - 1;
player2 = importedList.get(p2Index);

System.out.println("Players loaded successfully from CSV!");
} catch (Exception e) {
System.out.println("Invalid selection! Please try again.");
}
} else {
System.out.println("Not enough characters in the CSV file or file not found.");
}
break;
case "4":
if (player1 != null && player2 != null) {
BattleSimulator battleSimulator = new BattleSimulator();
battleSimulator.starter(player1, player2);


player1 = null;
player2 = null;
} else {
System.out.println("\nYou must create or load both players before starting the battle!");
}
break;
case "5":
System.out.println("Ramdom Battle Game");
Character randomP1 = createFullyRandomCharacter();
Character randomP2 = createFullyRandomCharacter();

BattleSimulator battleSimulator = new BattleSimulator();
battleSimulator.starter(randomP1, randomP2);
break;

case "6":
System.out.println("Exiting game. Goodbye!");
isRunning = false;
break;
default:
System.out.println("Invalid choice. Please try again.");
}
}





}
private static Character createCharacter(int playerNum) {
System.out.println("\nSelect Class for Player " + playerNum + ":");
System.out.println("1. Warrior");
System.out.println("2. Wizard");
System.out.print("Choice: ");

int type = -1;
try {
type = Integer.parseInt(sc.nextLine());
if (type != 1 && type != 2) throw new NumberFormatException();
} catch (NumberFormatException e) {
System.out.println("Invalid class selection. Creation cancelled.");
return null;
}

System.out.print("Enter Character Name: ");
String name = sc.nextLine();

if (type == 1) {
int hp = rand.nextInt(101) + 100;
int stamina = rand.nextInt(41) + 10;
int strength =rand.nextInt(10) + 1;
System.out.println("Player " + playerNum + " (Warrior) created successfully!");
return new Warrior(name, hp, stamina, strength);
} else {
int hp = rand.nextInt(51) + 50;
int mana = rand.nextInt(41) + 10;
int intelligence = rand.nextInt(50) + 1;
System.out.println("Player " + playerNum + " (Wizard) created successfully!");
return new Wizard(name, hp, mana, intelligence);
}


}

private static Character createFullyRandomCharacter() {
boolean isWarrior = rand.nextBoolean();

if (isWarrior) {
String[] warriorNames = {"Conan", "Arthur", "Leonidas", "Achilles", "Thor"};
String name = warriorNames[rand.nextInt(warriorNames.length)];
int hp = rand.nextInt(101) + 100;
int stamina = rand.nextInt(41) + 10;
int strength = rand.nextInt(10) + 1;
return new Warrior(name, hp, stamina, strength);
} else {
String[] wizardNames = {"Gandalf", "Merlin", "Dumbledore", "Sauron", "Voldemort"};
String name = wizardNames[rand.nextInt(wizardNames.length)];
int hp = rand.nextInt(51) + 50;
int mana = rand.nextInt(41) + 10;
int intelligence = rand.nextInt(50) + 1;
return new Wizard(name, hp, mana, intelligence);
}
}

private static List<Character> importCharactersFromCSV(String filePath) {
List<Character> importedCharacters = new ArrayList<>();
try (Scanner fileScanner = new Scanner(new File(filePath))) {
// İlk sətri (başlıqları) ötürürük
if (fileScanner.hasNextLine()) {
fileScanner.nextLine();
}
while (fileScanner.hasNextLine()) {
String line = fileScanner.nextLine();
String[] data = line.split(",");

if (data.length == 5) {
String type = data[0].trim();
String name = data[1].trim();
int hp = Integer.parseInt(data[2].trim());
int resource = Integer.parseInt(data[3].trim());
int power = Integer.parseInt(data[4].trim());

if (type.equalsIgnoreCase("Warrior")) {
importedCharacters.add(new Warrior(name, hp, resource, power));
} else if (type.equalsIgnoreCase("Wizard")) {
importedCharacters.add(new Wizard(name, hp, resource, power));
}
}
}
} catch (Exception e) {
System.out.println("Error reading CSV: " + e.getMessage() + "\nMake sure '" + filePath + "' exists in the project root directory.");
}
return importedCharacters;
}
}
53 changes: 53 additions & 0 deletions src/main/java/IronBattle/Warrior.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package IronBattle;

public class Warrior extends Character implements Attacker {

private int stamina;
private int strength;

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

}

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;
}

@Override
public void attack(Character character) {
int choice = (int) (Math.random() * 2);
int damage=0;
if (choice == 0 && stamina >= 5) {
stamina -= 5;
damage=strength;
// character.setHp(character.getHp() - strength);
System.out.println(getName() + " does Heavy attack to " + character.getName());

} else if (stamina>0) {
stamina += 1;
damage=strength/2;
// character.setHp(character.getHp() - strength / 2);
System.out.println(getName() + " does Weak attack to " + character.getName());
} else {
stamina += 2;
System.out.println(getName() + " needs to recover ");
}
character.setHp(character.getHp()-damage);

}
}
Loading