From 7f11b61189c3977a361e138c791d8b3131611ee1 Mon Sep 17 00:00:00 2001 From: c Date: Sun, 11 Apr 2021 14:54:28 +0200 Subject: [PATCH] gitea init --- .gitignore | 13 + pom.xml | 57 +++++ src/main/java/letzplay/core/GameEngine.java | 89 +++++++ src/main/java/letzplay/core/GameLoop.java | 19 ++ src/main/java/letzplay/core/LevelSystem.java | 41 ++++ src/main/java/letzplay/core/Output.java | 16 ++ src/main/java/letzplay/core/Progression.java | 19 ++ src/main/java/letzplay/core/Quest.java | 94 ++++++++ src/main/java/letzplay/core/Task.java | 62 +++++ src/main/java/letzplay/core/Trigger.java | 5 + .../letzplay/ganttproject/GanttGameLoop.java | 68 ++++++ .../letzplay/ganttproject/GanttProject.java | 227 ++++++++++++++++++ .../ganttproject/GanttProjectTriggers.java | 42 ++++ .../java/letzplay/core/GameEngineTest.java | 42 ++++ .../java/letzplay/core/ProgressionTest.java | 18 ++ src/test/java/letzplay/core/QuestTest.java | 77 ++++++ src/test/java/letzplay/core/TaskTest.java | 51 ++++ .../ganttproject/GanttGameLoopTest.java | 75 ++++++ .../ganttproject/GanttProjectTest.java | 11 + 19 files changed, 1026 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/letzplay/core/GameEngine.java create mode 100644 src/main/java/letzplay/core/GameLoop.java create mode 100644 src/main/java/letzplay/core/LevelSystem.java create mode 100644 src/main/java/letzplay/core/Output.java create mode 100644 src/main/java/letzplay/core/Progression.java create mode 100644 src/main/java/letzplay/core/Quest.java create mode 100644 src/main/java/letzplay/core/Task.java create mode 100644 src/main/java/letzplay/core/Trigger.java create mode 100644 src/main/java/letzplay/ganttproject/GanttGameLoop.java create mode 100644 src/main/java/letzplay/ganttproject/GanttProject.java create mode 100644 src/main/java/letzplay/ganttproject/GanttProjectTriggers.java create mode 100644 src/test/java/letzplay/core/GameEngineTest.java create mode 100644 src/test/java/letzplay/core/ProgressionTest.java create mode 100644 src/test/java/letzplay/core/QuestTest.java create mode 100644 src/test/java/letzplay/core/TaskTest.java create mode 100644 src/test/java/letzplay/ganttproject/GanttGameLoopTest.java create mode 100644 src/test/java/letzplay/ganttproject/GanttProjectTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a4971f --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.swp +*.swo +/tmp +!*/**/.gitkeep +tags + +target +logs + +.idea +*.iml + +gamedata.ser \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..8ab3681 --- /dev/null +++ b/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + letz + letzplay + 1.0 + jar + + UTF-8 + + + + letzplay + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + 11 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.21.0 + + + org.junit.platform + junit-platform-surefire-provider + 1.2.0-M1 + + + org.junit.jupiter + junit-jupiter-engine + 5.4.1 + + + + + + + + + org.junit.jupiter + junit-jupiter-api + 5.4.1 + test + + + + \ No newline at end of file diff --git a/src/main/java/letzplay/core/GameEngine.java b/src/main/java/letzplay/core/GameEngine.java new file mode 100644 index 0000000..7ea49a3 --- /dev/null +++ b/src/main/java/letzplay/core/GameEngine.java @@ -0,0 +1,89 @@ +package letzplay.core; + +import java.util.ArrayList; +import java.util.List; + +public class GameEngine implements Trigger { + private LevelSystem lvlSys; + private List quests; + private List state; + + + private GameEngine() { + lvlSys = LevelSystem.getInstance(); + quests = new ArrayList<>(); + state = new ArrayList<>(); + } + + public static GameEngine getInstance() { + return new GameEngine(); + } + + public void initQuests(List qs) { + this.quests = qs; + } + + private void finishQuest(Quest q) { + if (q.progression().done == q.progression().of && !q.finished()) { + q.setFinished(); + lvlSys.addExperience(q.getGainExp()); + } + } + + public List availableQuests() { + List result = new ArrayList<>(); + for (Quest q : quests + ) { + if (q.getMinLvl() <= lvlSys.currentLvl() && !q.finished()) { + result.add(q); + } + } + return result; + } + + public List doneQuests() { + List result = new ArrayList<>(); + for (Quest q : quests + ) { + if (q.finished()) { + result.add(q); + } + } + return result; + } + + public int currentLvl() { + return lvlSys.currentLvl(); + } + + public float currentExp() { + return lvlSys.currentExperience(); + } + + + public void update() { + for (Quest q : quests + ) { + if (q.getMinLvl() <= lvlSys.currentLvl()) { + finishQuest(q); + } + } + } + + @Override + public String toString() { + return lvlSys.toString() + "\n " + quests.toString(); + } + + @Override + public void trigger(String msg) { + state.add(msg); + for (Quest q : quests) { + q.trigger(msg); + } + } + + public List getState() { + return state; + } +} diff --git a/src/main/java/letzplay/core/GameLoop.java b/src/main/java/letzplay/core/GameLoop.java new file mode 100644 index 0000000..bf7cd04 --- /dev/null +++ b/src/main/java/letzplay/core/GameLoop.java @@ -0,0 +1,19 @@ +package letzplay.core; + +import java.io.IOException; + +public interface GameLoop { + GameEngine game = GameEngine.getInstance(); + + void init(); + + void input(String trigger); + + void update(); + + Output output(); + + void save() throws IOException; + + void load() throws IOException, ClassNotFoundException; +} diff --git a/src/main/java/letzplay/core/LevelSystem.java b/src/main/java/letzplay/core/LevelSystem.java new file mode 100644 index 0000000..3f60f86 --- /dev/null +++ b/src/main/java/letzplay/core/LevelSystem.java @@ -0,0 +1,41 @@ +package letzplay.core; + +public class LevelSystem { + private int currentLvl; + private float experience; + + private LevelSystem(int currentLvl, float experience) { + this.currentLvl = currentLvl; + this.experience = experience; + } + + public static LevelSystem getInstance() { + return new LevelSystem(0, 0); + } + + private void lvlUp() { + currentLvl++; + } + + public void addExperience(float exp) { + experience += exp; + if (experience >= 100) { + lvlUp(); + experience = experience % 100; + } + } + + public int currentLvl() { + return currentLvl; + } + + public float currentExperience() { + return experience; + } + + @Override + public String toString() { + return "Current Level: " + currentLvl + "\n" + "Experience to next " + + "Level: " + experience + "%"; + } +} diff --git a/src/main/java/letzplay/core/Output.java b/src/main/java/letzplay/core/Output.java new file mode 100644 index 0000000..f6c54f0 --- /dev/null +++ b/src/main/java/letzplay/core/Output.java @@ -0,0 +1,16 @@ +package letzplay.core; + +import java.util.ArrayList; +import java.util.List; + +public class Output { + public List quests = new ArrayList<>(); + public int lvl; + public float exp; + + public Output(List quests, int lvl, float exp) { + this.quests.addAll(quests); + this.lvl = lvl; + this.exp = exp; + } +} diff --git a/src/main/java/letzplay/core/Progression.java b/src/main/java/letzplay/core/Progression.java new file mode 100644 index 0000000..9165348 --- /dev/null +++ b/src/main/java/letzplay/core/Progression.java @@ -0,0 +1,19 @@ +package letzplay.core; + +public class Progression { + + int done; + int of; + + + public Progression(int done, int of) { + this.done = done; + this.of = of; + } + + @Override + public String toString() { + return done + " of " + of; + } +} + diff --git a/src/main/java/letzplay/core/Quest.java b/src/main/java/letzplay/core/Quest.java new file mode 100644 index 0000000..ea171c7 --- /dev/null +++ b/src/main/java/letzplay/core/Quest.java @@ -0,0 +1,94 @@ +package letzplay.core; + +import java.util.ArrayList; +import java.util.List; + +public class Quest implements Trigger { + private String title; + private String description; + private List taskList; + private int minLvl; + private float gainExp; + private boolean finished; + private List triggers; + + public Quest(String title, String description, int minLvl, float gainExp) { + this.title = title; + this.description = description; + this.minLvl = minLvl; + this.gainExp = gainExp; + taskList = new ArrayList<>(); + triggers = new ArrayList<>(); + finished = false; + } + + public void addTask(Task task) { + addTrigger(task.getTrigger()); + taskList.add(task); + } + + public void addTask(List tasks) { + for (Task t : tasks) { + addTask(t); + } + } + + public Progression progression() { + int done = 0; + for (Task task : taskList) { + if (task.isDone()) { + done++; + } + } + return new Progression(done, taskList.size()); + } + + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + public List getTaskList() { + return taskList; + } + + public int getMinLvl() { + return minLvl; + } + + public float getGainExp() { + return gainExp; + } + + public void setFinished() { + finished = true; + } + + public boolean finished() { + return finished; + } + + @Override + public String toString() { + return title + ": " + progression().toString() + "\n" + description + + "\nTasks: " + taskList.toString() + "\n"; + } + + @Override + public void trigger(String msg) { + if (triggers.contains(msg)) { + for (Task t : taskList) { + t.trigger(msg); + } + } + + } + + private void addTrigger(String trigger) { + triggers.add(trigger); + } +} diff --git a/src/main/java/letzplay/core/Task.java b/src/main/java/letzplay/core/Task.java new file mode 100644 index 0000000..37ac197 --- /dev/null +++ b/src/main/java/letzplay/core/Task.java @@ -0,0 +1,62 @@ +package letzplay.core; + +public class Task implements Trigger { + private String title; + private String description; + private boolean done; + private String trigger; + + public Task(String title, String description, String trigger) { + this.title = title; + this.description = description; + this.trigger = trigger; + this.done = false; + } + + private void complete() { + done = true; + } + + public boolean isDone() { + return done; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof Task)) + return false; + Task other = (Task) obj; + + return this.getTitle().equals(other.getTitle()) && + this.getDescription().equals(other.getDescription()); + + } + + @Override + public String toString() { + return title + "\n" + description + "\nDone: " + done + "\n"; + } + + @Override + public void trigger(String msg) { + if (trigger.equals(msg)) { + complete(); + } + } + + public String getTrigger() { + return trigger; + } +} diff --git a/src/main/java/letzplay/core/Trigger.java b/src/main/java/letzplay/core/Trigger.java new file mode 100644 index 0000000..5e74407 --- /dev/null +++ b/src/main/java/letzplay/core/Trigger.java @@ -0,0 +1,5 @@ +package letzplay.core; + +public interface Trigger { + void trigger(String msg); +} diff --git a/src/main/java/letzplay/ganttproject/GanttGameLoop.java b/src/main/java/letzplay/ganttproject/GanttGameLoop.java new file mode 100644 index 0000000..2dff9e4 --- /dev/null +++ b/src/main/java/letzplay/ganttproject/GanttGameLoop.java @@ -0,0 +1,68 @@ +package letzplay.ganttproject; + +import letzplay.core.GameLoop; +import letzplay.core.Output; + +import java.io.*; +import java.util.ArrayList; + +public class GanttGameLoop implements GameLoop { + + private static GanttGameLoop instance = null; + + private GanttGameLoop() { + } + + public static GanttGameLoop getGameLoop() { + if (instance == null) { + instance = new GanttGameLoop(); + } + return instance; + } + + @Override + public void init() { + game.initQuests(GanttProject.init()); + } + + @Override + public void input(String trigger) { + System.out.println("Trigger: "+trigger); + game.trigger(trigger); + } + + @Override + public void update() { + game.update(); + } + + @Override + public Output output() { + //System.out.println(game.toString()); + return new Output(game.availableQuests(), game.currentLvl(), + game.currentExp()); + } + + @Override + public void save() throws IOException { + FileOutputStream writeData = new FileOutputStream("gamedata.ser"); + ObjectOutputStream writeStream = new ObjectOutputStream(writeData); + + writeStream.writeObject(game.getState()); + writeStream.flush(); + writeStream.close(); + } + + @Override + public void load() throws IOException, ClassNotFoundException { + FileInputStream readData = new FileInputStream("gamedata.ser"); + ObjectInputStream readStream = new ObjectInputStream(readData); + + ArrayList data = (ArrayList) readStream.readObject(); + readStream.close(); + + for (String s:data) { + input(s); + } + } +} diff --git a/src/main/java/letzplay/ganttproject/GanttProject.java b/src/main/java/letzplay/ganttproject/GanttProject.java new file mode 100644 index 0000000..de6282e --- /dev/null +++ b/src/main/java/letzplay/ganttproject/GanttProject.java @@ -0,0 +1,227 @@ +package letzplay.ganttproject; + +import letzplay.core.Quest; +import letzplay.core.Task; + +import java.util.ArrayList; +import java.util.List; + +import static letzplay.ganttproject.GanttProjectTriggers.*; + +public class GanttProject { + + private static Quest q1() { + Quest q = new Quest("Willkommen bei Letzplay!", "Viel spaß beim " + + "spielen ;)", 0, 100); + List tasks = new ArrayList<>(); + tasks.add(new Task("Füge dich als Resource hinzu! ", + "Du bist der Projektplaner, also füge dich als erstes hinzu!", + res + add)); + + q.addTask(tasks); + + return q; + } + + private static Quest q2() { + Quest q = new Quest("Rollenerstellung", "Füge nun alle Rollen hinzu" + , 1, 50); + + List tasks = new ArrayList<>(); + tasks.add(new Task("Programmierung", "Füge Programmierung den Rollen " + + "hinzu", rol + add + programmierung)); + + tasks.add(new Task("Geschäftsführung", "Füge Geschäftsführung den Rollen " + + "hinzu", rol + add + geschäftsführung)); + + tasks.add(new Task("Marketing", "Füge Marketing den Rollen " + + "hinzu", rol + add + marketing)); + + tasks.add(new Task("Finanzen", "Füge Finanzen den Rollen " + + "hinzu", rol + add + finanzen)); + + q.addTask(tasks); + + return q; + } + + private static Quest q3() { + Quest q = new Quest("Erstelle geeignete Resourcen", + "Du hast 3 Personen zur verfügung: Chris ist der technisch " + + "affine, Franz ist geschickt mit dem Umgang von " + + "Menschen und Julia behält den Blick für das große " + + "ganze! Nun füge sie als Resourcen hinzu", 1, 50); + List tasks = new ArrayList<>(); + tasks.add(new Task("Füge Chris hinzu", "Füge Chris unter Resourcen als" + + " Full-Stack-Developer hinzu", res + add + chris)); + + tasks.add(new Task("Füge Franz hinzu", "Füge Franz unter Resourcen " + + "als Marketing hinzu", res + add + franz)); + + tasks.add(new Task("Füge Julia hinzu", "Füge Julia unter Resourcen " + + "als Geschäftsführung hinzu", res + add + julia)); + + q.addTask(tasks); + + return q; + } + + private static Quest q4() { + Quest q = new Quest("Milestones", "Füge sie als Task hinzu und setzte sie als Milestone", 2, + 50); + + List tasks = new ArrayList<>(); + tasks.add(new Task("Appentwicklung", "Füge Appentwicklung als Task " + + "hinzu und makiere es als Milestone", tsk + mil + appentwicklung)); + + tasks.add(new Task("Marketingplanung", "Füge Marketingplanung als Task " + + "hinzu und makiere es als Milestone", tsk + mil + marketingplanung)); + + tasks.add(new Task("Businessplan", "Füge Businessplan als Task " + + "hinzu und makiere es als Milestone", tsk + mil + businessplan)); + + q.addTask(tasks); + + return q; + } + + private static Quest q5() { + Quest q = new Quest("Tasks", + "Füge nun die Aufgaben als Task hinzu", 2, 50); + List tasks = new ArrayList<>(); + tasks.add(new Task("Backend", "Füge die Aufgabe Backend hinzu", + tsk + add + backend)); + + tasks.add(new Task("Frontend", "Füge die Aufgabe Frontend hinzu", + tsk + add + frontend)); + + tasks.add(new Task("Infrastruktur", "Füge die Aufgabe Infrastruktur " + + "hinzu", tsk + add + infrastruktur)); + + tasks.add(new Task("Demo-Vorstellung", "Füge die Aufgabe " + + "Demo-Vorstellung hinzu", tsk + add + demovorstellung)); + + tasks.add(new Task("Werbekampagne", "Füge die Aufgabe Werbekampagne " + + "hinzu", tsk + add + werbekampagne)); + + tasks.add(new Task("Revenue-Model", "Füge die Aufgabe Revenue-Model " + + "hinzu", tsk + add + revenuemodel)); + + tasks.add(new Task("Umsatzplanung", "Füge die Aufgabe Umsatzplanung " + + "hinzu", tsk + add + umsatzplanung)); + + q.addTask(tasks); + + return q; + } + + private static Quest q6() { + Quest q = new Quest("Dependencies", "Füge nun alle Abhängigkeiten hinzu" + , 2, 70); + + List tasks = new ArrayList<>(); + tasks.add(new Task("Infrastruktur->Backend", "Backend ist von " + + "Infrastruktur abhängig", tsk + dep + infrastruktur + ":" + backend)); + tasks.add(new Task("Backend->Frontend", "Frontend ist von " + + "Backend abhängig", tsk + dep + backend + ":" + frontend)); + tasks.add(new Task("Frontend->Demo", "Demo-Vorstellung ist von " + + "Frontend abhängig", + tsk + dep + frontend + ":" + demovorstellung)); + tasks.add(new Task("Appentwicklung->Werbekampange", "Die " + + "Appentwicklung muss vollständig sein, bevor die " + + "Werbekampagne starten kann", + tsk + dep + appentwicklung + ":" + werbekampagne)); + tasks.add(new Task("Demo-Vorstellung->Werbekampange", "Das Produkt muss vorher Vorgestellt werden, bevor die " + + "Werbekampagne starten kann", + tsk + dep + demovorstellung + ":" + werbekampagne)); + tasks.add(new Task("Revenue-Model->Umsatzplan", "Es muss erst klar " + + "sein wie Geld eingenommen werden kann, bevor der " + + "Jahresumsatz geplant werden kann", + tsk + dep + revenuemodel + ":" + umsatzplanung)); + + q.addTask(tasks); + + return q; + } + + private static Quest q7() { + Quest q = new Quest("Resourcenzuteilung", + "Du hast Resourcen zur Verfügung und Aufgaben die erledigt " + + "werden müssen, teile nun die Resourcen ein", 3, 50); + List tasks = new ArrayList<>(); + tasks.add(new Task("Backend:Programmierung", "Teile die Aufgabe Backend" + + " der Programmierung zu", + tsk + res + backend + ":" + chris)); + + tasks.add(new Task("Frontend:Programmierung", "Teile die Aufgabe " + + "Frontend der Programmierung zu", + tsk + res + frontend + ":" + chris)); + + tasks.add(new Task("Infrastruktur:Programmierung", "Teile die Aufgabe Infrastruktur " + + "der Programmierung zu", + tsk + res + infrastruktur + ":" + chris)); + + tasks.add(new Task("Demo-Vorstellung:Marketing", "Teile die Aufgabe " + + "Demo-Vorstellung den Marketing zu", + tsk + res + demovorstellung + ":" + franz)); + + tasks.add(new Task("Werbekampagne:Marketing", "Teile die Aufgabe Werbekampagne " + + "den Marketing zu", tsk + res + werbekampagne + ":" + franz)); + + tasks.add(new Task("Revenue Model:Geschäftsführung", "Teile die " + + "Aufgabe Revenue Model den Geschäftsführer zu", + tsk + res + revenuemodel + ":" + julia)); + + tasks.add(new Task("Umsatzplanung:Finanzen", "Teile die Aufgabe " + + "Umsatzplanung " + + "den Finanzen zu", tsk + res + umsatzplanung + ":" + julia)); + + q.addTask(tasks); + + return q; + } + + private static Quest q8() { + Quest q = new Quest("Zeiteinteilung", "Teile nun allen Tasks die Zeit zu", 4, 80); + + List tasks = new ArrayList<>(); + tasks.add(new Task("Backend: 75 Tage", "Backend braucht 75 Tage", + tsk + dur + backend + ":75")); + + tasks.add(new Task("Frontend: 84 Tage", "Frontend braucht 84", + tsk + dur + frontend + ":84")); + + tasks.add(new Task("Infrastruktur: 60 Tage", "Infrastruktur braucht 60 Tage" + + "hinzu", tsk + dur + infrastruktur + ":60")); + + tasks.add(new Task("Demo-Vorstellung: 5 Tage", "Demo-Vorstellung braucht 5 Tage", + tsk + dur + demovorstellung + ":5")); + + tasks.add(new Task("Werbekampagne: 38", "Werbekampagne braucht 38 Tage", + tsk + dur + werbekampagne + ":38")); + + tasks.add(new Task("Revenue-Model: 131", "Revenue-Model braucht 131 Tage", + tsk + dur + revenuemodel + ":131")); + + tasks.add(new Task("Umsatzplanung: 131", "Umsatzplanung braucht 131 Tage", + tsk + dur + umsatzplanung + ":131")); + + q.addTask(tasks); + + return q; + } + + public static List init() { + List quests = new ArrayList<>(); + quests.add(q1()); + quests.add(q2()); + quests.add(q3()); + quests.add(q4()); + quests.add(q5()); + quests.add(q6()); + quests.add(q7()); + quests.add(q8()); + + return quests; + } +} diff --git a/src/main/java/letzplay/ganttproject/GanttProjectTriggers.java b/src/main/java/letzplay/ganttproject/GanttProjectTriggers.java new file mode 100644 index 0000000..13119a2 --- /dev/null +++ b/src/main/java/letzplay/ganttproject/GanttProjectTriggers.java @@ -0,0 +1,42 @@ +package letzplay.ganttproject; + +public class GanttProjectTriggers { + //Type + public static final String res = "res:"; + public static final String tsk = "tsk:"; + public static final String rol = "rol:"; + public static final String dep = "dep:"; + + //Operation + public static final String add = "add:"; + public static final String mod = "mod:"; + public static final String mil = "mil:"; + public static final String dur = "dur:"; + + //resources + public static final String julia = "julia"; + public static final String franz = "franz"; + public static final String chris = "chris"; + + //roles + public static final String programmierung = "programmierung"; + public static final String geschäftsführung = "geschäftsführung"; + public static final String marketing = "marketing"; + public static final String finanzen = "finanzen"; + + //milestones + public static final String appentwicklung = "appentwicklung"; + public static final String marketingplanung = "marketingplanung"; + public static final String businessplan = "businessplan"; + + //tasks + public static final String backend = "backend"; + public static final String frontend = "frontend"; + public static final String infrastruktur = "infrastruktur"; + public static final String itadministration = "it-administration"; + public static final String demovorstellung = "demo-vorstellung"; + public static final String werbekampagne = "werbekampagne"; + public static final String revenuemodel = "revenue-model"; + public static final String umsatzplanung = "umsatzplanung"; + +} diff --git a/src/test/java/letzplay/core/GameEngineTest.java b/src/test/java/letzplay/core/GameEngineTest.java new file mode 100644 index 0000000..06e2224 --- /dev/null +++ b/src/test/java/letzplay/core/GameEngineTest.java @@ -0,0 +1,42 @@ +package letzplay.core; + + +import letzplay.core.GameEngine; +import letzplay.ganttproject.GanttProject; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import letzplay.core.Quest; +import letzplay.core.Task; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class GameEngineTest { + static GameEngine game; + + @BeforeAll + public static void beforeAll() { + game = GameEngine.getInstance(); + game.initQuests(GanttProject.init()); + } + + @Test + public void testInit() { + assertEquals(game.availableQuests().size(), 1); + assertEquals(game.currentLvl(), 0); + } + + @Test + public void testQuestComplete() { + Quest quest = game.availableQuests().get(0); + for (Task t : quest.getTaskList() + ) { + t.trigger(t.getTrigger()); + } + + game.update(); + + assertEquals(game.currentLvl(), 1); + assertEquals(game.doneQuests().size(), 1); + } + +} \ No newline at end of file diff --git a/src/test/java/letzplay/core/ProgressionTest.java b/src/test/java/letzplay/core/ProgressionTest.java new file mode 100644 index 0000000..14c31f8 --- /dev/null +++ b/src/test/java/letzplay/core/ProgressionTest.java @@ -0,0 +1,18 @@ +package letzplay.core; + +import letzplay.core.Progression; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ProgressionTest { + + @Test + public void testProgression() { + Progression prog = new Progression(0, 5); + + assertEquals(prog.done, 0); + assertEquals(prog.of, 5); + } + +} \ No newline at end of file diff --git a/src/test/java/letzplay/core/QuestTest.java b/src/test/java/letzplay/core/QuestTest.java new file mode 100644 index 0000000..2d363d5 --- /dev/null +++ b/src/test/java/letzplay/core/QuestTest.java @@ -0,0 +1,77 @@ +package letzplay.core; + +import letzplay.core.Quest; +import letzplay.core.Task; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class QuestTest { + private String title = "title"; + private String description = "description"; + private String trigger = "trg"; + + @Test + public void testQuestCreation() { + Quest q = new Quest(title, description, 0, 100); + + assertEquals(q.getDescription(), description); + assertEquals(q.getTitle(), title); + assertEquals(q.getTaskList().size(), 0); + assertEquals(q.progression().of, 0); + assertEquals(q.progression().done, 0); + assertEquals(q.getGainExp(), 100); + assertEquals(q.getMinLvl(), 0); + } + + @Test + public void testAddTask() { + Quest q = new Quest(title, description, 0, 100); + Task task = new Task(title, description, trigger); + + q.addTask(task); + + assertEquals(q.getTaskList().size(), 1); + assertEquals(q.progression().done, 0); + assertEquals(q.progression().of, 1); + assertEquals(q.getTaskList().get(0), task); + } + + @Test + public void testAddTaskList() { + Quest q = new Quest(title, description, 0, 100); + Task task1 = new Task(title + 1, description, trigger + 1); + Task task2 = new Task(title + 2, description, trigger + 2); + Task task3 = new Task(title + 3, description, trigger + 3); + + List list = new ArrayList<>(); + list.add(task1); + list.add(task2); + list.add(task3); + + q.addTask(list); + + assertEquals(q.getTaskList().size(), 3); + assertEquals(q.progression().done, 0); + assertEquals(q.progression().of, 3); + } + + @Test + public void testCompleteTask() { + Quest q = new Quest(title, description, 0, 100); + Task task = new Task(title, description, trigger); + + q.addTask(task); + + q.trigger("trg"); + + assertEquals(q.progression().done, 1); + assertEquals(q.progression().of, 1); + assertTrue(q.getTaskList().get(0).isDone()); + } + +} \ No newline at end of file diff --git a/src/test/java/letzplay/core/TaskTest.java b/src/test/java/letzplay/core/TaskTest.java new file mode 100644 index 0000000..df1a5b1 --- /dev/null +++ b/src/test/java/letzplay/core/TaskTest.java @@ -0,0 +1,51 @@ +package letzplay.core; + +import letzplay.core.Quest; +import letzplay.core.Task; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TaskTest { + private String title = "title"; + private String description = "description"; + private String trigger = "trg"; + + @Test + void testTaskCreation() { + Task task = new Task(title, description, trigger); + + assertEquals(task.getDescription(), description); + assertEquals(task.getTitle(), title); + assertFalse(task.isDone()); + } + + @Test + void testTaskComplete() { + Task task = new Task(title, description, trigger); + + task.trigger("trg"); + + assertEquals(task.getDescription(), description); + assertEquals(task.getTitle(), title); + assertTrue(task.isDone()); + } + + @Test + void testTaskCanBeEqual() { + Task task1 = new Task(title, description, trigger); + Task task2 = new Task(title, description, trigger); + + assertEquals(task1, task2); + } + + @Test + void testTaskCanBeUnequal() { + Task task1 = new Task(title, description, trigger); + Task task2 = new Task(title + 1, description, trigger); + + assertNotEquals(task1, task2); + assertNotEquals(null, task1); + assertNotEquals(task1, new Quest(title, description, 0, 0)); + } +} \ No newline at end of file diff --git a/src/test/java/letzplay/ganttproject/GanttGameLoopTest.java b/src/test/java/letzplay/ganttproject/GanttGameLoopTest.java new file mode 100644 index 0000000..9f1354f --- /dev/null +++ b/src/test/java/letzplay/ganttproject/GanttGameLoopTest.java @@ -0,0 +1,75 @@ +package letzplay.ganttproject; + +import letzplay.core.Output; +import letzplay.ganttproject.GanttGameLoop; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static letzplay.ganttproject.GanttProjectTriggers.*; + +class GanttGameLoopTest { + + @Test + public void testLoop() { + GanttGameLoop loop = GanttGameLoop.getGameLoop(); + + loop.init(); + loop.update(); + loop.output(); + } + + @Test + public void testTrigger() { + GanttGameLoop loop = GanttGameLoop.getGameLoop(); + Output out; + + System.out.println("Iteration 0"); + loop.init(); + loop.update(); + loop.output(); + + System.out.println("Iteration 1"); + loop.input(res+add); + loop.update(); + loop.output(); + out = loop.output(); + + assertEquals(out.lvl, 1); + assertEquals(out.quests.size(), 2); + } + + @Test + public void testSaveAndLoad(){ + GanttGameLoop loop = GanttGameLoop.getGameLoop(); + + loop.init(); + loop.input("test1"); + loop.input("test2"); + loop.update(); + + List before = loop.game.getState(); + + try { + loop.save(); + } catch (IOException e) { + e.printStackTrace(); + } + + loop.init(); + try { + loop.load(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + List after = loop.game.getState(); + + assertEquals(before,after); + } + +} \ No newline at end of file diff --git a/src/test/java/letzplay/ganttproject/GanttProjectTest.java b/src/test/java/letzplay/ganttproject/GanttProjectTest.java new file mode 100644 index 0000000..a785a1b --- /dev/null +++ b/src/test/java/letzplay/ganttproject/GanttProjectTest.java @@ -0,0 +1,11 @@ +package letzplay.ganttproject; + +import org.junit.jupiter.api.Test; + +class GanttProjectTest { + + @Test + void init() { + + } +} \ No newline at end of file