Löschung der Musterlösung aus dem Repo
parent
c75e62ef23
commit
19b683f3d5
Binary file not shown.
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
package domain;
|
||||
|
||||
import domain.Wesen.Wesen;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface SpezialEffekt {
|
||||
void apply(Wesen ziel); // Wesen ist das Ziel des Effekts
|
||||
}
|
||||
|
||||
|
|
@ -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<Wesen> 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<Wesen> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
package domain.Wesen;
|
||||
|
||||
import domain.SpezialEffekt;
|
||||
|
||||
abstract public class Wesen implements Comparable<Wesen>{
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Team> 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue