diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..98b99a551e28559528e090cbfc676dcff9bd7def --- /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 0000000000000000000000000000000000000000..dbb5b78c935181452519a4755237d89d6d951252 --- /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 0000000000000000000000000000000000000000..dd46d7aeebcd7019df8c670885c8f65a50b32195 --- /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 0000000000000000000000000000000000000000..6ed784a1c675e56e0de06b2c5d29819043c9fea7 --- /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 0000000000000000000000000000000000000000..442d9c99fb302fe030ccf31cc4f4d5435df5f5d1 --- /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 0000000000000000000000000000000000000000..d0d09a385733d7a9cc1fdf5182e57d5b76fd3e73 --- /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 0000000000000000000000000000000000000000..2817aa6e635985ade1186257835fd257ce038d1c --- /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 0000000000000000000000000000000000000000..2f2ba2e743f350594a917d3e66493fc989e4a0e1 --- /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 0000000000000000000000000000000000000000..f2940ec7b8de73d7e773eaa9d5f3265fab823321 --- /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 0000000000000000000000000000000000000000..acb3514078f6fb73f4f09ffd7a172b47f184e961 --- /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 0000000000000000000000000000000000000000..2a873db31b1484b731c74ffca71133e8243e8511 --- /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); + } +}