Created
June 27, 2021 06:27
-
-
Save lusy/2ebf1e4ca3320c537b22766c9cd1f7ad to your computer and use it in GitHub Desktop.
Kontrollflug und Logbuch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
import java.time.LocalDateTime; | |
public class Kontrollflug { | |
SpaceShip spaceShip; | |
private boolean klarZumAbflugFlag = false; | |
public Kontrollflug(SpaceShip spaceShip) { | |
this.spaceShip = spaceShip; | |
} | |
/** | |
* Testet ob zu dem Kontrollflug ein Schiff gehört mit 2 Kapitänen und mind. 5 | |
* Besatzungsmitgliedern | |
* | |
* @return boolean, ob das eigene Schiff klar zum Abflug ist | |
*/ | |
public boolean klarZumAbflug() { | |
if (this.spaceShip != null) { | |
if (this.spaceShip.getFirstCaptain() != null && this.spaceShip.getSecondCaptain() != null | |
&& this.spaceShip.getCrew().length >= 5) { | |
this.klarZumAbflugFlag = true; | |
} | |
} | |
return this.klarZumAbflugFlag; | |
} | |
/** | |
* Die Methode simuliert einen Flug des Schiffes und verschiedene | |
* Eventualitäten, die dabei passieren können | |
* | |
* @param logbuchAuthor, SpaceTraveller der*ie die Einträge in das Logbuch des | |
* Schiffes schreibt | |
* @return int, Beute, die beim Kontrollflug gemacht wurde | |
*/ | |
public int beginneKontrollflug(SpaceTraveller logbuchAuthor) { | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Kontrolflug von " + spaceShip.getShipName() + " startet."); | |
int beute = 0; | |
if (Math.random() <= 0.8) { // Trifft auf ein Schiff | |
beute = (int) (Math.random() * (200000 - 100000 + 1) + 100000); | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), "Initielle Beute: " + beute); | |
if (Math.random() <= 0.75) { // Besatzung ergibt sich | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Die Besatzung vom feindlichen Schiff ergibt sich"); | |
return beute; | |
} else { // Besatzung kämpft | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Die Besatzung vom feindlichen Schiff kämpft"); | |
int kostenSchiff = 0; | |
int kostenBesatzung = 0; | |
if (Math.random() <= 0.3) { // Schiff wurde beschädigt | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Das eigene Schiff wurde beschädigt."); | |
kostenSchiff = 50000; | |
} | |
for (SpaceTraveller st : spaceShip.getCrew()) { | |
if (Math.random() <= 0.05) { // Wahrscheinlichkeit für jedes Crew Mitglied verletzt zu werden | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Ein Crew Mitglied wurde verletzt"); | |
kostenBesatzung += 10000; | |
} | |
} | |
int kosten = kostenSchiff + kostenBesatzung; | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), | |
"Beute am Ende vom Kontrollflug: " + (beute - kosten)); | |
return beute - kosten; | |
} | |
} else { | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), "Ereignisloser Kontrollflug"); | |
return beute; | |
} | |
} | |
/** | |
* @param betrag Unter der SpaceTraveller aufzuteilender Betrag | |
* @param anzahlBesatzung Anzahl der Traveller unter denen der betrag aufgeteilt wird | |
* @return Der Anteil eines regulären Crew-Mitglieds | |
*/ | |
public int berechneAnteile(int betrag, int anzahlBesatzung) { | |
double anzahlAnteile = anzahlBesatzung + 1.5; // 1 Teil mehr für 1. Kapitän, 0.5 mehr für 2. Kapitän | |
// Oder anzahlAnteile = betrag / (2 + 1.5 + anzahlBesatzung); wenn die Kapitäne | |
// nicht als Teil der Besatzung gezählt wurden. | |
int anteil = (int) (betrag / anzahlAnteile); | |
return anteil; | |
} | |
/** | |
* Simuliert ein Saison: Führt 10 Kontrollflüge durch, berechnet die Anteile der Besatzung | |
* am Ende des Saisons, fügt diese Anteile den Crew-Mitgliedern zu und logt Geschehnisse + | |
* Beute in das Logbuch | |
* | |
* @param logbuchAuthor SpaceTraveller, der*ie für die Einträge im Logbuch zuständig ist | |
*/ | |
public void simuliereSaison(SpaceTraveller logbuchAuthor) { | |
for (int i = 0; i < 10; i++) { | |
int beute = beginneKontrollflug(logbuchAuthor); | |
spaceShip.addDigicoins(beute); | |
} | |
int anteil = berechneAnteile(spaceShip.getCryptoDepot(), spaceShip.getCrew().length); | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), "Millenium Falcon am Ende des Saisons: "); | |
for (SpaceTraveller traveller : spaceShip.getCrew()) { | |
if (traveller != null) { | |
if (traveller.equals(spaceShip.getFirstCaptain())) { | |
traveller.addDigiCoins(anteil * 2); | |
} else if (traveller.equals(spaceShip.getSecondCaptain())) { | |
traveller.addDigiCoins((int) (anteil * 1.5)); | |
} else { | |
traveller.addDigiCoins(anteil); | |
} | |
String travellerEintrag = "Traveller " + traveller.getFirstName() + " " + traveller.getLastName() | |
+ " hat am Ende des Saisons " + traveller.getDigiCoins() + " DigiCoins."; | |
spaceShip.logs.addEintrag(logbuchAuthor, LocalDateTime.now(), travellerEintrag); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
import java.time.LocalDateTime; | |
import java.time.format.DateTimeFormatter; | |
import java.util.ArrayList; | |
public class Logbuch { | |
ArrayList<LogbuchEintrag> eintraege = new ArrayList<LogbuchEintrag>(); | |
/** | |
* Fügt einen Eintrag zum Logbuch hinzu | |
* | |
* @param author SpaceTraveller, Autor vom Eintrag | |
* @param time Zeitstempel, wann wurde der Eintrag gemacht | |
* @param text String, Inhalt des Eintrags | |
*/ | |
public void addEintrag(SpaceTraveller author, LocalDateTime time, String text){ | |
LogbuchEintrag eintrag = new LogbuchEintrag(author, time, text); | |
eintraege.add(eintrag); | |
} | |
/** | |
* @return Anzahl der bisher geschrieben Logbucheinträge | |
*/ | |
public int size(){ | |
return eintraege.size(); | |
} | |
/** | |
* Gibt alle geschriebenen Logbucheinträge auf der Konsole aus. | |
*/ | |
public void print() { | |
for (LogbuchEintrag e: eintraege) { | |
String formattedTime = e.getTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); | |
String authorName = e.getAuthor().getFirstName() + " " + e.getAuthor().getLastName(); | |
System.out.println(formattedTime + "\t" + authorName + "\t" + e.getText()); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
import java.time.LocalDateTime; | |
public class LogbuchEintrag { | |
private SpaceTraveller author; | |
private LocalDateTime time; | |
private String text; | |
LogbuchEintrag (SpaceTraveller author, LocalDateTime time, String text) { | |
this.author = author; | |
this.time = time; | |
this.text = text; | |
} | |
public SpaceTraveller getAuthor() { | |
return author; | |
} | |
public void setAuthor(SpaceTraveller author) { | |
this.author = author; | |
} | |
public LocalDateTime getTime() { | |
return time; | |
} | |
public void setTime(LocalDateTime time) { | |
this.time = time; | |
} | |
public String getText() { | |
return text; | |
} | |
public void setText(String text) { | |
this.text = text; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
public class SpaceShip { | |
private String shipName; | |
private int cryptoDepot = 0; | |
private SpaceTraveller firstCaptain; | |
private SpaceTraveller secondCaptain; | |
private SpaceTraveller[] crew = new SpaceTraveller[10]; | |
static int fleatSize = 0; | |
Logbuch logs = new Logbuch(); | |
SpaceShip(String shipName) { | |
this.shipName = shipName; | |
} | |
public String getShipName() { | |
return shipName; | |
} | |
public int getCryptoDepot() { | |
return cryptoDepot; | |
} | |
public void setCryptoDepot(int treasury) { | |
this.cryptoDepot = treasury; | |
} | |
public void addDigicoins(int amount){ | |
this.cryptoDepot += amount; | |
} | |
public SpaceTraveller getFirstCaptain() { | |
return firstCaptain; | |
} | |
public SpaceTraveller getSecondCaptain() { | |
return secondCaptain; | |
} | |
public SpaceTraveller[] getCrew() { | |
return crew; | |
} | |
public void setFirstCaptain(SpaceTraveller newSpaceTraveller) { | |
this.firstCaptain = newSpaceTraveller; | |
} | |
public void setSecondCaptain(SpaceTraveller newSpaceTraveller) { | |
this.secondCaptain = newSpaceTraveller; | |
} | |
public void addSpaceTraveller(SpaceTraveller st) { | |
for (int i = 0; i < crew.length; i++) { | |
if (crew[i] == null) { | |
crew[i] = st; | |
break; | |
} | |
} | |
} | |
public void deleteSpaceTraveller(String firstName, String lastName) { | |
for (int i = 0; i < crew.length; i++) { | |
if (crew[i] != null) { | |
SpaceTraveller st = crew[i]; | |
if (st.getFirstName().equals(firstName) && st.getLastName().equals(lastName)) { | |
crew[i] = null; | |
} | |
} | |
} | |
} | |
public void print() { | |
System.out.println("This ship's name is " + shipName); | |
System.out.println("It's got " + cryptoDepot + " coins in its vault"); | |
System.out.println("First captain is " + firstCaptain.getFirstName() + " " + firstCaptain.getLastName()); | |
System.out.println("Second captain is " + secondCaptain.getFirstName() + " " + secondCaptain.getLastName()); | |
System.out.println("Onboard are: "); | |
for (SpaceTraveller st: crew) { | |
if (st != null) { | |
System.out.print(st.getFirstName() + " " + st.getLastName() + ", "); | |
} | |
} | |
System.out.println(""); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
public class SpaceTraveller { | |
private final String firstName; | |
private final String lastName; | |
private final int yearOfBirth; | |
private String roboPet; | |
private int digiCoins = 0; | |
/** | |
* Konstruktor, mittels dem ein neuer SpaceTraveller erstellt wird. | |
* @param firstName | |
* @param lastName | |
* @param yearOfBirth | |
*/ | |
SpaceTraveller(String firstName, String lastName, int yearOfBirth){ | |
this.firstName = firstName; | |
this.lastName = lastName; | |
this.yearOfBirth = yearOfBirth; | |
} | |
/** | |
* Getter method für das RoboPet | |
* @return roboPet, den Namen des RoboPets des SpaceTravellers | |
*/ | |
public String getRoboPet() { | |
return roboPet; | |
} | |
public void setRoboPet(String roboPet) { | |
this.roboPet = roboPet; | |
} | |
public String getFirstName() { | |
return firstName; | |
} | |
public String getLastName() { | |
return lastName; | |
} | |
public int getYearOfBirth() { | |
return yearOfBirth; | |
} | |
public int getDigiCoins() { | |
return digiCoins; | |
} | |
public void addDigiCoins(int digiCoins) { | |
this.digiCoins += digiCoins; | |
} | |
public void print() { | |
System.out.println("Der Name dieses:r Reisenden ist " + this.getFirstName() | |
+ " " + this.getLastName() + ". Sie:r wurde im Jahr " | |
+ this.getYearOfBirth() + " geboren und hat eine:n Begleiter:in namens " | |
+ this.getRoboPet() + " und ein Vermögen von " + getDigiCoins() | |
+ " Digicoins."); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package spacetraveller; | |
import java.time.LocalDateTime; | |
public class TestSpaceTraveller { | |
public static void main(String[] args) { | |
SpaceTraveller lukeSkywalker = new SpaceTraveller("Luke", "Skywalker", 1971); | |
SpaceShip milleniumFalcon = new SpaceShip("Millenium Falcon"); | |
SpaceTraveller hanSolo = new SpaceTraveller("Han", "Solo", 1966); | |
SpaceTraveller chewbacca = new SpaceTraveller("Chewbacca", "Wookie", 1855); | |
milleniumFalcon.setFirstCaptain(hanSolo); | |
milleniumFalcon.setSecondCaptain(chewbacca); | |
milleniumFalcon.addSpaceTraveller(hanSolo); | |
milleniumFalcon.addSpaceTraveller(chewbacca); | |
SpaceTraveller leiaOrgana = new SpaceTraveller("Leia", "Organa", 1971); | |
SpaceTraveller obiWan = new SpaceTraveller("Obi-Wan", "Kenobi", 1941); | |
SpaceTraveller landoCalrisian = new SpaceTraveller("Lando", "Calrisian", 1964); | |
milleniumFalcon.addSpaceTraveller(landoCalrisian); | |
milleniumFalcon.addSpaceTraveller(lukeSkywalker); | |
milleniumFalcon.addSpaceTraveller(obiWan); | |
milleniumFalcon.addSpaceTraveller(leiaOrgana); | |
Kontrollflug kontrollFlug1 = new Kontrollflug(milleniumFalcon); | |
System.out.println(kontrollFlug1.spaceShip.getShipName() + " klar zum Abflug?: " + kontrollFlug1.klarZumAbflug()); | |
SpaceShip starDestroyer = new SpaceShip("Star Destroyer"); | |
SpaceTraveller darthVader = new SpaceTraveller("Darth", "Vader", 1951); | |
SpaceTraveller captainHlux = new SpaceTraveller("Captain", "Hlux", 1989); | |
starDestroyer.setFirstCaptain(darthVader); | |
starDestroyer.addSpaceTraveller(captainHlux); | |
Kontrollflug kontrollFlug2 = new Kontrollflug(starDestroyer); | |
System.out.println(kontrollFlug2.spaceShip.getShipName() + " klar zum Abflug?: " + kontrollFlug2.klarZumAbflug()); | |
kontrollFlug1.beginneKontrollflug(landoCalrisian); | |
kontrollFlug1.simuliereSaison(leiaOrgana); | |
milleniumFalcon.logs.print(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment