diff --git a/Musterlösung/.DS_Store b/Musterlösung/.DS_Store deleted file mode 100644 index bb3bf89..0000000 Binary files a/Musterlösung/.DS_Store and /dev/null differ diff --git a/Musterlösung/src/UI/Main.java b/Musterlösung/src/UI/Main.java deleted file mode 100644 index 0f15938..0000000 --- a/Musterlösung/src/UI/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -package UI; - -import java.util.Scanner; - -public class Main { - - static Scanner scanner = new Scanner(System.in); - - public static void main(String[] args) { - UI ui = new UI(); - - ui.run(); - } - -} diff --git a/Musterlösung/src/UI/UI.java b/Musterlösung/src/UI/UI.java deleted file mode 100644 index 870d864..0000000 --- a/Musterlösung/src/UI/UI.java +++ /dev/null @@ -1,105 +0,0 @@ -package UI; - -import exceptions.WesenExistiertNichtException; -import facade.Teamkampf; - -public class UI { - - private Teamkampf teamkampfSpiel; - private boolean siegbedingung = false; - private static final int SIMULATIONSGESCHWINDIGKEIT = 500; - private int defaultAnzahlTeams = 2; - - - public UI() { - teamkampfSpiel = new Teamkampf(); - - System.out.printf("\n\nWillkommen bei Teamkampf!\n\nBitte Vergrößern Sie das Terminal für ein besseres Spielerlebnis!\n\n"); - } - - public void run() { - - System.out.printf("Wieviele Teams möchten Sie simulieren? (Zahl > 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; - } - - -}