From 19b683f3d5afeb6071b9d91ff19ada355fdd1bbd Mon Sep 17 00:00:00 2001 From: janpfeifer Date: Wed, 16 Apr 2025 00:14:10 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B6schung=20der=20Musterl=C3=B6sung=20aus?= =?UTF-8?q?=20dem=20Repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Musterlösung/.DS_Store | Bin 6148 -> 0 bytes Musterlösung/src/UI/Main.java | 15 -- Musterlösung/src/UI/UI.java | 105 ------------ Musterlösung/src/domain/LagerPlaetze.java | 17 -- Musterlösung/src/domain/SpezialEffekt.java | 9 - Musterlösung/src/domain/Team.java | 59 ------- .../src/domain/Wesen/Menschen/Ritter.java | 29 ---- .../src/domain/Wesen/Monster/Kobold.java | 30 ---- Musterlösung/src/domain/Wesen/Wesen.java | 90 ---------- .../src/domain/Wesen/WesenFactory.java | 27 --- .../WesenExistiertNichtException.java | 20 --- Musterlösung/src/facade/Teamkampf.java | 156 ------------------ 12 files changed, 557 deletions(-) delete mode 100644 Musterlösung/.DS_Store delete mode 100644 Musterlösung/src/UI/Main.java delete mode 100644 Musterlösung/src/UI/UI.java delete mode 100644 Musterlösung/src/domain/LagerPlaetze.java delete mode 100644 Musterlösung/src/domain/SpezialEffekt.java delete mode 100644 Musterlösung/src/domain/Team.java delete mode 100644 Musterlösung/src/domain/Wesen/Menschen/Ritter.java delete mode 100644 Musterlösung/src/domain/Wesen/Monster/Kobold.java delete mode 100644 Musterlösung/src/domain/Wesen/Wesen.java delete mode 100644 Musterlösung/src/domain/Wesen/WesenFactory.java delete mode 100644 Musterlösung/src/exceptions/WesenExistiertNichtException.java delete mode 100644 Musterlösung/src/facade/Teamkampf.java diff --git a/Musterlösung/.DS_Store b/Musterlösung/.DS_Store deleted file mode 100644 index bb3bf892f7e4e6c7e43da271d51cdb6a5b391556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!A`ks)Q{*J!c zT}%ji@n9mENoL=4c4nJ-+w69P5VAGy?+H;7LO4*uOaa3;Li40clChpFP|_Nz7ep$+ z6D`N`9~hv$%Zfw{Mej6P*uNvp?0jg^h1jTIl04a6ehZ$WFd0>=?=q9kt*z&syi;^; z{ChR=N8QmlX?2HJ^mMLN6wK{za1jnBozmv9ibvfr9t?Ft*dHL|`ZA3BYSL2UxS!}; z-%L0Kr_d>tr_)-qT5;=*{aMAG9@Jnr>do1#;B0O09-eg`qQ_Xh7~&gJ)<6G1mmEOPVrmc`h%~7{lPYbCA#Lv 1)\n"); - - int anzahlTeams = defaultAnzahlTeams; - boolean eingabeGueltig = false; - - while (!eingabeGueltig) { - try { - anzahlTeams = Main.scanner.nextInt(); - Main.scanner.nextLine(); // "Schluckt" den Zeilenumbruch - if (anzahlTeams > 1) { - eingabeGueltig = true; - } else { - System.out.printf("\n\nEingabe Ungültig! Bitte nur eine Zahl > 1 eingeben!\n\n"); - } - } catch (java.util.InputMismatchException e) { - System.out.printf("\n\nEingabe Ungültig! Bitte nur eine Zahl eingeben!\n\n"); - Main.scanner.nextLine(); // Schluckt die Ausgabe - } - } - - for(int i = 1; i <= anzahlTeams; i++) { - String teamName = "Team " + i; - teamkampfSpiel.erstelleTeam(teamName);//Der Einfachheit halber alle Teams durchnummerieren - - while(true) { - System.out.printf("\n\n\n\n\nWelches Mitglied möchten Sie %s hinzufügen? Sie haben Maximal %d Lagerplatz für ihre Truppen!", teamName, Teamkampf.MAXIMALLAGERPLATZ); - System.out.printf("\nDrücken Sie \"W\" um die Teammitglieder für das nächste Team auszuwählen bzw. mit der Simulation zu beginnen!\n\n"); - System.out.printf("Auswahl:\nKobold: K, %d Lagerplatz\nRitter: R, %d Lagerplatz\n", teamkampfSpiel.getLagerPlatzVonWesen("K"), teamkampfSpiel.getLagerPlatzVonWesen("R")); //Hier neue Wesen zur UI hinzufügen - - String neuesMitglied = Main.scanner.nextLine().toUpperCase(); - - try { - if (neuesMitglied.equals("W")) { - break; - } - else if (!teamkampfSpiel.addWesenToTeam(teamName, neuesMitglied)) { - System.out.printf("\nDas hat nicht geklappt! Dieses Teammitglied braucht zu viel Platz!"); - } - } catch (WesenExistiertNichtException e) { - System.out.printf("\nDas hat nicht geklappt! Das ausgewählte Wesen existiert nicht!"); - continue; - } - - System.out.printf("\n\n\nIhre Truppen brauchen momentan %d Lagerplatz!", teamkampfSpiel.getDerzeitigerLagerPlatzVonTeam(teamName)); - - } - - } - - System.out.printf("\n\n\n\nDie Teams:\n\n"); - System.out.printf(teamkampfSpiel.teamsToString() + "\n\n"); - - System.out.printf("Beliebige Taste, dann ENTER drücken um die Simulation zu starten."); - Main.scanner.next().toUpperCase(); - System.out.printf("\n\n\n"); - - - int runde = 1; - while(!siegbedingung) { - System.out.printf("\n\nRunde %d\n\n", runde); - - teamkampfSpiel.triggerRound(); - - System.out.printf(teamkampfSpiel.teamsToString() + "\n\n"); - - try { - Thread.sleep(SIMULATIONSGESCHWINDIGKEIT); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - if(teamkampfSpiel.checkGewinner()){ - System.out.printf("\n\n\n\nHerlichen Glückwunsch!\n\n"); - System.out.printf("Der Sieger ist: " + teamkampfSpiel.teamsToString() + "\n\n"); - - teamkampfSpiel.gewinnerToString(); - siegbedingung = true; - } - runde++; - } - } - -} diff --git a/Musterlösung/src/domain/LagerPlaetze.java b/Musterlösung/src/domain/LagerPlaetze.java deleted file mode 100644 index 900b76c..0000000 --- a/Musterlösung/src/domain/LagerPlaetze.java +++ /dev/null @@ -1,17 +0,0 @@ -package domain; - -public enum LagerPlaetze { - - KOBOLD(10), - RITTER(5); - - private final int lagerPlatz; - - LagerPlaetze(int lagerPlatz) { - this.lagerPlatz = lagerPlatz; - } - - public int getLagerPlatz() { - return lagerPlatz; - } -} diff --git a/Musterlösung/src/domain/SpezialEffekt.java b/Musterlösung/src/domain/SpezialEffekt.java deleted file mode 100644 index a278972..0000000 --- a/Musterlösung/src/domain/SpezialEffekt.java +++ /dev/null @@ -1,9 +0,0 @@ -package domain; - -import domain.Wesen.Wesen; - -@FunctionalInterface -public interface SpezialEffekt { - void apply(Wesen ziel); // Wesen ist das Ziel des Effekts -} - diff --git a/Musterlösung/src/domain/Team.java b/Musterlösung/src/domain/Team.java deleted file mode 100644 index d96e25e..0000000 --- a/Musterlösung/src/domain/Team.java +++ /dev/null @@ -1,59 +0,0 @@ -package domain; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import domain.Wesen.Wesen; -import domain.Wesen.WesenFactory; -import exceptions.WesenExistiertNichtException; - -public class Team{ - - private final String TEAMNAME; - private List mitglieder = new ArrayList<>(); - - public Team (String teamName) { - TEAMNAME = teamName; - } - - public void addWesen(String wesen) { - switch(wesen) { - case "K": - mitglieder.add(WesenFactory.getInstance().createKobold()); - break; - case "R": - mitglieder.add(WesenFactory.getInstance().createRitter()); - break; - default: - throw new WesenExistiertNichtException(); - } - } - - public int getDerzeitigerLagerPlatz() { - int derzeitigerLagerplatz = 0; - for(Wesen w : mitglieder) { - derzeitigerLagerplatz += w.getLagerPlatz(); - } - return derzeitigerLagerplatz; - } - - public String getTeamName() { - return TEAMNAME; - } - - public List getMitglieder(){ - return mitglieder; - } - - //Returnt die Statistiken über das Team - public String toString() { - Collections.sort(mitglieder); - String mitgliederString = getTeamName() + "\n"; - for(Wesen w: mitglieder){ - mitgliederString += w.toString() + "\n"; - } - return mitgliederString; - } - -} diff --git a/Musterlösung/src/domain/Wesen/Menschen/Ritter.java b/Musterlösung/src/domain/Wesen/Menschen/Ritter.java deleted file mode 100644 index a7c9095..0000000 --- a/Musterlösung/src/domain/Wesen/Menschen/Ritter.java +++ /dev/null @@ -1,29 +0,0 @@ -package domain.Wesen.Menschen; - -import domain.LagerPlaetze; -import domain.Wesen.Wesen; - -public class Ritter extends Wesen { - - public static final String ABKUERZUNG = "R"; - private static int anzahlRitter = 0; - - public Ritter() { - super( "Ritter " + ++anzahlRitter, - LagerPlaetze.RITTER.getLagerPlatz(), - 1000, - 0.4, - 120, - 0); - setSpezialEffekt((ziel) -> { - ziel.setRuestung(0.5); // Spezialfähigkeit eines Ritters. Rüstung halbieren. - System.out.println("\nRüstung von " + ziel.getName() + " heruntergesetzt.\n"); //Debug */ - }); - } - - @Override - public String getAbkuerzung() { - return ABKUERZUNG; - } - -} diff --git a/Musterlösung/src/domain/Wesen/Monster/Kobold.java b/Musterlösung/src/domain/Wesen/Monster/Kobold.java deleted file mode 100644 index 183426d..0000000 --- a/Musterlösung/src/domain/Wesen/Monster/Kobold.java +++ /dev/null @@ -1,30 +0,0 @@ -package domain.Wesen.Monster; - -import domain.LagerPlaetze; -import domain.Wesen.Wesen; - -public class Kobold extends Wesen{ - - public static final String ABKUERZUNG = "K"; - private static int anzahlKobolde = 0; - - - public Kobold() { - super( "Kobold " + ++anzahlKobolde, - LagerPlaetze.KOBOLD.getLagerPlatz(), - 200, - 0.2, - 50, - 0.4); - setSpezialEffekt((ziel) -> { - setTrefferpunkte(2); //Spezialfähigkeit eines Kobolds. Leben verdoppeln. - System.out.println("\nLeben von " + getName() + " verdoppelt.\n"); //Debug */ - }); - } - - @Override - public String getAbkuerzung() { - return ABKUERZUNG; - } - -} diff --git a/Musterlösung/src/domain/Wesen/Wesen.java b/Musterlösung/src/domain/Wesen/Wesen.java deleted file mode 100644 index 6d4d614..0000000 --- a/Musterlösung/src/domain/Wesen/Wesen.java +++ /dev/null @@ -1,90 +0,0 @@ -package domain.Wesen; - -import domain.SpezialEffekt; - -abstract public class Wesen implements Comparable{ - - private final int LAGERPLATZ; - private String name; - private double trefferpunkte; - private double ruestung; - private int angriffspunkte; - private double ausweichwahrscheinlichkeit; - private SpezialEffekt spezialEffekt = null; - private boolean spezialeffektVerbraucht = false; - - protected Wesen (String name, int lagerPlatz, double trefferpunkte, double ruestung, int angriffspunkte, double ausweichwahrscheinlichkeit) { - this.name = name; - this.LAGERPLATZ = lagerPlatz; - this.trefferpunkte = trefferpunkte; - this.ruestung = ruestung; - this.angriffspunkte = angriffspunkte; - this.ausweichwahrscheinlichkeit = ausweichwahrscheinlichkeit; - } - - public void angreifen(Wesen ziel) { - double schaden = angriffspunkte; - ziel.verteidigen(this, schaden); - } - - public void verteidigen(Wesen angreifer, double schadensPunkte) { - if (Math.random() < ausweichwahrscheinlichkeit) { - return; - } - double erlittenerSchaden = schadensPunkte * (1 - ruestung); - trefferpunkte -= erlittenerSchaden; - if (trefferpunkte < 0) { - trefferpunkte = 0; - } - } - - public void ausloesenSpezial(Wesen ziel) { - if (spezialEffekt != null && !spezialeffektVerbraucht) { - spezialEffekt.apply(ziel); - spezialeffektVerbraucht = true; - } - } - - public int getLagerPlatz() { - return LAGERPLATZ; - } - - public String toString() { - String spezialeffektstatus = hasSpezialEffekt() ? "Ja" : "Nein"; - return name + ", TP: " + trefferpunkte + ", Spezialeffekt aktiv?: " + spezialeffektstatus; - } - - @Override - public int compareTo(Wesen other) { - return (int) ((int) other.getTrefferpunkte() - this.trefferpunkte); - } - - public double getTrefferpunkte() { - return trefferpunkte; - } - - public void setRuestung(double faktor) { - ruestung = ruestung * faktor; - } - - public void setTrefferpunkte(double faktor) { - trefferpunkte = trefferpunkte * faktor; - } - - public String getName(){ - return name; - } - - abstract public String getAbkuerzung(); - - protected void setSpezialEffekt(SpezialEffekt effekt) { - spezialEffekt = effekt; - } - - public boolean hasSpezialEffekt() { - return spezialEffekt != null && !spezialeffektVerbraucht; - } - - - -} \ No newline at end of file diff --git a/Musterlösung/src/domain/Wesen/WesenFactory.java b/Musterlösung/src/domain/Wesen/WesenFactory.java deleted file mode 100644 index 2c4184b..0000000 --- a/Musterlösung/src/domain/Wesen/WesenFactory.java +++ /dev/null @@ -1,27 +0,0 @@ -package domain.Wesen; - -import domain.Wesen.Menschen.Ritter; -import domain.Wesen.Monster.Kobold; - -public class WesenFactory { - - private static WesenFactory instance; - - private WesenFactory() {} - - public static WesenFactory getInstance() { - if (instance == null) { - instance = new WesenFactory(); - } - return instance; - } - - public Wesen createRitter() { - return new Ritter(); - } - - public Wesen createKobold() { - return new Kobold(); - } -} - diff --git a/Musterlösung/src/exceptions/WesenExistiertNichtException.java b/Musterlösung/src/exceptions/WesenExistiertNichtException.java deleted file mode 100644 index c812863..0000000 --- a/Musterlösung/src/exceptions/WesenExistiertNichtException.java +++ /dev/null @@ -1,20 +0,0 @@ -package exceptions; - -public class WesenExistiertNichtException extends RuntimeException { - - public WesenExistiertNichtException() { - super("Das angegebene Wesen existiert nicht."); - } - - public WesenExistiertNichtException(String message) { - super(message); - } - - public WesenExistiertNichtException(String message, Throwable cause) { - super(message, cause); - } - - public WesenExistiertNichtException(Throwable cause) { - super(cause); - } -} diff --git a/Musterlösung/src/facade/Teamkampf.java b/Musterlösung/src/facade/Teamkampf.java deleted file mode 100644 index c238776..0000000 --- a/Musterlösung/src/facade/Teamkampf.java +++ /dev/null @@ -1,156 +0,0 @@ -package facade; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import domain.LagerPlaetze; -import domain.Team; -import domain.Wesen.Wesen; -import domain.Wesen.Menschen.Ritter; -import domain.Wesen.Monster.Kobold; -import exceptions.WesenExistiertNichtException; - -public class Teamkampf { - - List teams = new ArrayList<>(); - private int teamAmZugIndex = 0; - private Team gewinnerTeam = null; - public static final int MAXIMALLAGERPLATZ = 50; // gilt für alle Teams - public static final double SPEZIALFFAEHIGKEITAUSLOESEWAHRSCHEINLICHKEIT = 0.1; - - public void erstelleTeam(String teamName) { - teams.add(new Team(teamName)); - } - - public void triggerRound() { - Random random = new Random(); - - //Bestimmung Angreiferteam - Team angreiferTeam = teams.get(teamAmZugIndex % teams.size()); - while (checkGanzesTeamTot(angreiferTeam)) { - teamAmZugIndex++; - angreiferTeam = teams.get(teamAmZugIndex % teams.size()); - } - - //Bestimmung angreiferWesen - Wesen angreiferWesen = getRandomLebendesWesen(angreiferTeam, random); - - // Bestimmung Verteidigerteam (Nicht Tot, Nicht angreiferteam) - Team verteidigerTeam; - do { - int aktuell = teams.indexOf(angreiferTeam); - int offset = random.nextInt(teams.size() - 1) + 1; - int andererIndex = (aktuell + offset) % teams.size(); - verteidigerTeam = teams.get(andererIndex); - } while (checkGanzesTeamTot(verteidigerTeam)); - - //Bestimmung des verteidigerwesens - Wesen verteidigerWesen = getRandomLebendesWesen(verteidigerTeam, random); - - if (Math.random() < SPEZIALFFAEHIGKEITAUSLOESEWAHRSCHEINLICHKEIT) { - angreiferWesen.ausloesenSpezial(verteidigerWesen); - } - - angreiferWesen.angreifen(verteidigerWesen); - - teamAmZugIndex++; - - } - - public boolean checkGewinner() { - gewinnerTeam = null; - Team kandidat = null; - - for (Team team : teams) { - boolean ganzesTeamTot = checkGanzesTeamTot(team); - - if (!ganzesTeamTot) { - if (kandidat != null) { - return false; - } - kandidat = team; - } - } - - // Wenn es nur ein Gewinner Team gibt wird dieses gespeichert - if (kandidat != null) { - gewinnerTeam = kandidat; - return true; - } - - return false; - } - - private boolean checkGanzesTeamTot(Team team){ - for (Wesen wesen : team.getMitglieder()) { - if (wesen.getTrefferpunkte() > 0) { - return false; - } - } - return true; - - } - - private Wesen getRandomLebendesWesen(Team team, Random random) { - Wesen wesen; - do { - int index = random.nextInt(team.getMitglieder().size()); - wesen = team.getMitglieder().get(index); - } while (wesen.getTrefferpunkte() <= 0); - return wesen; - } - - public String gewinnerToString(){ - return gewinnerTeam.toString(); - } - - //returnt false wenn das Lager voll ist. Sonst true - public boolean addWesenToTeam(String teamName, String wesen) throws WesenExistiertNichtException{ - int zusaetzlicherLagerplatz = getLagerPlatzVonWesen(wesen); - - if(getDerzeitigerLagerPlatzVonTeam(teamName) + zusaetzlicherLagerplatz <= MAXIMALLAGERPLATZ) { - getTeam(teamName).addWesen(wesen); - return true; - } else { - return false; - } - } - - public int getDerzeitigerLagerPlatzVonTeam(String teamName){ - return getTeam(teamName).getDerzeitigerLagerPlatz(); - } - - // Achtung Nullpointer - private Team getTeam(String teamName) { - Team gefunden = null; - for (Team t : teams) { - if(t.getTeamName().equals(teamName)) { - gefunden = t; - break; - } - } - return gefunden; - } - - public int getLagerPlatzVonWesen (String wesen) throws WesenExistiertNichtException{ - switch (wesen) { - case (Ritter.ABKUERZUNG): - return LagerPlaetze.RITTER.getLagerPlatz(); - case (Kobold.ABKUERZUNG): - return LagerPlaetze.KOBOLD.getLagerPlatz(); - default: - throw new WesenExistiertNichtException(); - } - } - - public String teamsToString() { - String teamsString = ""; - for(Team t: teams){ - teamsString += t.toString() + "\n"; - } - return teamsString; - } - - -}