Skip to content

Instantly share code, notes, and snippets.

@lusy
Created June 27, 2021 06:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lusy/2ebf1e4ca3320c537b22766c9cd1f7ad to your computer and use it in GitHub Desktop.
Save lusy/2ebf1e4ca3320c537b22766c9cd1f7ad to your computer and use it in GitHub Desktop.
Kontrollflug und Logbuch
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);
}
}
}
}
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());
}
}
}
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;
}
}
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("");
}
}
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.");
}
}
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