Skip to content
Open

done #65

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

13 changes: 13 additions & 0 deletions .idea/compiler.xml

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.

9 changes: 9 additions & 0 deletions .idea/homework-java-ironbattle.iml

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

20 changes: 20 additions & 0 deletions .idea/jarRepositories.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.

8 changes: 8 additions & 0 deletions .idea/modules.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 task.ironbattle/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>org.example</groupId>
<artifactId>task.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>

</project>
5 changes: 5 additions & 0 deletions task.ironbattle/src/main/java/org/example/Attacker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.example;

public interface Attacker {
void attack(Character target);
}
51 changes: 51 additions & 0 deletions task.ironbattle/src/main/java/org/example/Character.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.example;

import java.util.UUID;

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

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

public String getId() {
return id;
}

public String getName() {
return name;
}

public int getHp() {
return hp;
}

public boolean getIsAlive() {
return isAlive;
}

public void setId(String id) {
this.id = id;
}

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

public void setHp(int hp) {
this.hp = hp;
}

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



}
38 changes: 38 additions & 0 deletions task.ironbattle/src/main/java/org/example/CsvCharacterLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.example;

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

public class CsvCharacterLoader {
public static List<Character> loadFromCsv(String filePath) {
List<Character> characters = new ArrayList<>();
try(Scanner scanner = new Scanner(new File(filePath))){
while (scanner.hasNextLine()){
String line = scanner.nextLine();
String[] lineArr = line.split(",");

String name = lineArr[0];
String type = lineArr[1];

if (type.equalsIgnoreCase("Warrior")) {
int hp = Integer.parseInt(lineArr[2]);
int stamina = Integer.parseInt(lineArr[3]);
int strength = Integer.parseInt(lineArr[4]);
characters.add(new Warrior(name,hp,stamina,strength));
} else if (type.equalsIgnoreCase("Wizard")) {
int hp = Integer.parseInt(lineArr[2]);
int mana = Integer.parseInt(lineArr[3]);
int intelligance = Integer.parseInt(lineArr[4]);
characters.add(new Wizard(name,hp,mana,intelligance));
}

}
}
catch (Exception e){
System.out.println(e.getMessage());
}
return characters;
}
}
71 changes: 71 additions & 0 deletions task.ironbattle/src/main/java/org/example/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package org.example;

import java.util.Scanner;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {

System.out.println("--- Chose Character 1 ---");
System.out.println("1 - Warrior");
System.out.println("2 - Wizard");
int choice1 = sc.nextInt();
sc.nextLine();
System.out.print("1st character's name: ");
String name1 = sc.nextLine();

Character character1;
if (choice1 == 1) {
character1 = new Warrior(name1);
} else {
character1 = new Wizard(name1);
}

System.out.println("\n--- Chose Character 2 ---");
System.out.println("1 - Warrior");
System.out.println("2 - Wizard");
int choice2 = sc.nextInt();
sc.nextLine();

System.out.print("2st character's name: ");
String name2 = sc.nextLine();

Character character2;
if (choice2 == 1) {
character2 = new Warrior(name2);
} else {
character2 = new Wizard(name2);
}


System.out.println("\n=== The battle begins! ===");
System.out.println(character1.getName() + " vs " + character2.getName());

int round = 1;

while (character1.getIsAlive() && character2.getIsAlive()){
System.out.println("\n ----- Round " + round + " -----");
((Attacker)character1).attack(character2);
((Attacker)character2).attack(character1);
System.out.println(character1.getName() + " HP: " + character1.getHp());
System.out.println(character2.getName() + " HP: " + character2.getHp());

round++;
}
System.out.println("\n=== The battle is over. ===");

if (!character1.getIsAlive() && !character2.getIsAlive()) {
System.out.println("It's a draw! The battle begins again...\n");
main(null); // restart
}
else if (character1.getIsAlive()) {
System.out.println("Winner: " + character1.getName());
}
else {
System.out.println("Winner: " + character2.getName());
}
}
}
}
75 changes: 75 additions & 0 deletions task.ironbattle/src/main/java/org/example/Warrior.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.example;

import java.util.Random;

public class Warrior extends Character implements Attacker {
private int stamina;
private int strength;
Random rand = new Random();


public Warrior(String name) {
super(name, new Random().nextInt(101) + 100);
this.stamina = 10 + rand.nextInt(41);
this.strength = 1 + rand.nextInt(10);
}

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 int getStrength() {
return strength;
}

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

public void setStrength(int strength) {
this.strength = strength;
}

@Override
public void attack(Character target) {
boolean heavyAttack = rand.nextBoolean();
int damage = 0;
String attackType = "";
if (heavyAttack && stamina >= 5) {
damage = strength;
stamina -= 5;
attackType = "Heavy Attack";
} else if (!heavyAttack && stamina > 0) {
damage = strength / 2;
stamina += 1;
attackType = "Weak Attack";
} else if (stamina < 5) {
if (stamina > 0) {
damage = strength / 2;
attackType = "Weak Attack (low stamina)";
}
stamina += 1;
}else {
stamina+=2;
attackType = "No Attack (resting)";
}
target.setHp(target.getHp() - damage);
if (damage > 0) {
System.out.println(getName() + " used " + attackType + " on " + target.getName() + " causing " + damage + " damage!");
} else {
System.out.println(getName() + " could not attack and is resting this turn.");
}
if (target.getHp() <= 0) {
target.setIsAlive(false);
target.setHp(0);
System.out.println(target.getName() + " has been defeated!");
}
}
}
Loading