From 4b94261eafe60a134b0c4a3f26f6d910dcd02ac2 Mon Sep 17 00:00:00 2001 From: jez04 <david.jezek@post.cz> Date: Mon, 30 Sep 2024 13:08:07 +0200 Subject: [PATCH] feat: initial commit with src --- .gitignore | 16 ++++ pom.xml | 79 +++++++++++++++++++ .../fei/efrei/lab03/AlreadyDeadException.java | 22 ++++++ .../cz/vsb/fei/efrei/lab03/DangerWorld.java | 41 ++++++++++ .../java/cz/vsb/fei/efrei/lab03/Fighter.java | 17 ++++ .../java/cz/vsb/fei/efrei/lab03/Hero.java | 62 +++++++++++++++ .../java/cz/vsb/fei/efrei/lab03/Monster.java | 57 +++++++++++++ .../java/cz/vsb/fei/efrei/lab03/Utils.java | 27 +++++++ src/main/java/module-info.java | 4 + src/main/resources/log4j2.xml | 13 +++ .../java/cz/vsb/fei/efrei/lab03/AppTest.java | 19 +++++ 11 files changed, 357 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/AlreadyDeadException.java create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/Fighter.java create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/Hero.java create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/Monster.java create mode 100644 src/main/java/cz/vsb/fei/efrei/lab03/Utils.java create mode 100644 src/main/java/module-info.java create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/test/java/cz/vsb/fei/efrei/lab03/AppTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98b99a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Eclipse +.classpath +.project +.settings/ + +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# Maven +log/ +target/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..dbb5b78 --- /dev/null +++ b/pom.xml @@ -0,0 +1,79 @@ +<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/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>cz.vsb.fei.efrei</groupId> + <artifactId>efrei-lab03</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <name>efrei-lab03</name> + + <packaging>jar</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.release>21</maven.compiler.release> + <JUnit.version>5.11.0</JUnit.version> + <log4j.version>2.23.1</log4j.version> + <lombok.version>1.18.34</lombok.version> + </properties> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.junit</groupId> + <artifactId>junit-bom</artifactId> + <version>${JUnit.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j.version}</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j.version}</version> + </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.13.0</version> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <version>3.5.0</version> + </plugin> + </plugins> + </build> + +</project> diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/AlreadyDeadException.java b/src/main/java/cz/vsb/fei/efrei/lab03/AlreadyDeadException.java new file mode 100644 index 0000000..dd46d7a --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/AlreadyDeadException.java @@ -0,0 +1,22 @@ +package cz.vsb.fei.efrei.lab03; + +public class AlreadyDeadException extends Exception { + + private static final long serialVersionUID = -7052667091386255519L; + + private Fighter fighter; + + public AlreadyDeadException(Fighter fighter) { + this.fighter = fighter; + } + + public Fighter getFighter() { + return fighter; + } + + + + + + +} diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java new file mode 100644 index 0000000..6ed784a --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java @@ -0,0 +1,41 @@ +package cz.vsb.fei.efrei.lab03; + +import java.util.Random; +import java.util.Scanner; + +public class DangerWorld { + private static final Random RANDOM = new Random(); + + public static void main(String[] args) { + Fighter[] fighters = new Fighter[6]; + try (Scanner s = new Scanner(System.in)) { + System.out.println("Type name of monster:"); + String name = s.next(); + + Monster monster = new Monster(name); + fighters[0] = monster; + fighters[1] = new Monster("King"); + fighters[2] = new Monster("Queen"); + fighters[3] = new Monster("Fairy"); + fighters[4] = new Hero("Shrek"); + fighters[5] = new Hero("Cinderela"); + + int rounds = 100; + + for (int i = 0; i < rounds; i++) { + Fighter fighter1 = fighters[RANDOM.nextInt(6)]; + Fighter fighter2 = fighters[RANDOM.nextInt(6)]; + try { + fighter1.attackedBy(fighter2); + } catch (AlreadyDeadException e) { + System.out.println( + "Ups! Fighter " + + fighter2.getName() + + " attack already dead " + + fighter1.getName()); + } + } + } + + } +} diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/Fighter.java b/src/main/java/cz/vsb/fei/efrei/lab03/Fighter.java new file mode 100644 index 0000000..442d9c9 --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/Fighter.java @@ -0,0 +1,17 @@ +package cz.vsb.fei.efrei.lab03; + +public interface Fighter { + + int getLives(); + + public default boolean isAlive() { + return getLives() > 0; + } + + public void attackedBy(Fighter fighter) throws AlreadyDeadException; + + public String getName(); + + public int getStrenght(); + +} diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/Hero.java b/src/main/java/cz/vsb/fei/efrei/lab03/Hero.java new file mode 100644 index 0000000..d0d09a3 --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/Hero.java @@ -0,0 +1,62 @@ +package cz.vsb.fei.efrei.lab03; + +import java.util.Random; + +public class Hero implements Fighter{ + + private static final Random RANDOM = new Random(); + + private String name; + private int strenght; + private int lives; + + public Hero(String name, int strenght) { + if(name == null || name.length() < 2 || + strenght < 30) { + throw new IllegalArgumentException( + "Sorry wrong arguments!!"); + } + this.name = name; + this.strenght = strenght; + this.lives = 100; + } + + public Hero(String name) { + this(name, RANDOM.nextInt(50) + 50); + } + + @Override + public void attackedBy(Fighter fighter) + throws AlreadyDeadException { + if(!isAlive()) { + throw new AlreadyDeadException(this); + } + System.out.println(fighter.getName() + " attack " + getName() + "!"); + if (RANDOM.nextBoolean()) { + System.out.println("Attack was blocked!! Ha. Ha. Ha."); + return; + } + lives -= fighter.getStrenght(); + } + + @Override + public String getName() { + return name; + } + + @Override + public int getStrenght() { + return strenght; + } + + @Override + public int getLives() { + return lives; + } + + @Override + public String toString() { + return "Hero " + name + "(" + strenght + ") - has " + lives + " lives."; + } + +} diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/Monster.java b/src/main/java/cz/vsb/fei/efrei/lab03/Monster.java new file mode 100644 index 0000000..2817aa6 --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/Monster.java @@ -0,0 +1,57 @@ +package cz.vsb.fei.efrei.lab03; + +import java.util.Random; + +public class Monster implements Fighter { + + private static final Random RANDOM = new Random(); + + private String name; + private final int strenght; + private int lives; + + public Monster(String name, int strenght) { + if(name == null || name.length() < 2 ) { + throw new IllegalArgumentException( + "Too short name"); + } + if(strenght < 10) { + throw new IllegalArgumentException( + "Monster is too weak!!"); + } + this.name = name; + this.strenght = strenght; + this.lives = 100; + } + + public Monster(String name) { + this(name, RANDOM.nextInt(90) + 10); + } + + @Override + public void attackedBy(Fighter fighter) { + System.out.println(fighter.getName() + " attack " + getName() + "!"); + lives -= fighter.getStrenght(); + } + + @Override + public String getName() { + return name; + } + + @Override + public int getStrenght() { + return strenght; + } + + @Override + public int getLives() { + return lives; + } + + @Override + public String toString() { + return "Monster " + name + "(" + strenght + ") - has " + lives + " lives."; + } + +} diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/Utils.java b/src/main/java/cz/vsb/fei/efrei/lab03/Utils.java new file mode 100644 index 0000000..2f2ba2e --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab03/Utils.java @@ -0,0 +1,27 @@ +package cz.vsb.fei.efrei.lab03; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class Utils { + + public static final Random RANDOM = new Random(); + private static List<String> heroNames = Arrays.asList("Captain Freedom", "Iron Blade", "Shadow Hunter", + "Silver Hawk", "Mighty Thunder", "Lunar Knight", "Phoenix Blaze", "Stormbreaker", "Star Guardian", + "Solar Sentinel", "Dark Raven", "Blaze Falcon", "Crystal Viper", "Lightning Strike", "Firestorm", + "Eagle Eye", "Nightshade", "Frostbite", "Wind Whisperer", "Shadow Blaze"); + + private static List<String> monsterNames = Arrays.asList("Nightmare Reaper", "Shadow Fiend", "Bonecrusher", + "Venomous Hydra", "Doomfang", "Blightbringer", "Void Stalker", "Inferno Drake", "Ghoul King", "Frost Wyrm", + "Terrorclaw", "Bloodfeast", "Ravenous Maw", "Storm Serpent", "Hellhound", "Dark Overlord", "Necroshade", + "Plaguebeast", "Stone Golem", "Fire Leviathan"); + + public String generateHeroName() { + return heroNames.get(RANDOM.nextInt(heroNames.size())); + } + public String generateMonsterName() { + return monsterNames.get(RANDOM.nextInt(monsterNames.size())); + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..f2940ec --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module cz.vsb.fei.efrei.lab03 { + requires static lombok; + requires org.apache.logging.log4j; +} \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..acb3514 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ +<Configuration> + <Appenders> + <Console name="Console"> + <PatternLayout + pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> + </Console> + </Appenders> + <Loggers> + <Root level="info"> + <AppenderRef ref="Console"></AppenderRef> + </Root> + </Loggers> +</Configuration> diff --git a/src/test/java/cz/vsb/fei/efrei/lab03/AppTest.java b/src/test/java/cz/vsb/fei/efrei/lab03/AppTest.java new file mode 100644 index 0000000..2a873db --- /dev/null +++ b/src/test/java/cz/vsb/fei/efrei/lab03/AppTest.java @@ -0,0 +1,19 @@ +package cz.vsb.fei.efrei.lab03; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +/** + * Unit test for simple App. + */ +class AppTest { + + /** + * Rigorous Test :-) + */ + @Test + void shouldAnswerWithTrue() { + assertTrue(true); + } +} -- GitLab