Erweiterung Teil 4 (abgeschlossen)

Hiermit werden sämtliche angekündigten Änderungen an der Architektur abgeschlossen.
Parallel dazu wurde die Funktionsliste nun auch angepasst.
Inhaltlich wurden folgende Methoden hinzugefügt:
- GeneralMap.addProvinceToMap()
Folgende Methoden wurden entfernt:
- GeneralMap.getProvincesEntityCounts()
pull/22/head
Zocker1999NET 8 years ago
parent e6484d2cf8
commit fb8b12eac8

@ -1,47 +1,48 @@
# Architekturplan Zweiundvierzig
**Letztes Update: 02.06.2016** (TT.MM.JJJJ / DD.MM.YYYY)
**Letztes Update: 04.06.2016** (TT.MM.JJJJ / DD.MM.YYYY)
[Hier die offizielle Version vom Master-Branch sehen](https://github.com/HGE-IT-Course-2016/zweiundvierzig/blob/master/planung/architektur.md)
[Hier zur übersichtlicheren Funktionsliste auf dem aktuellen Branch](funktionsliste.md)
[Hier zur übersichtlichen Funktionsliste auf dem aktuellen Branch](funktionsliste.md)
Dieser Plan wird verfasst und regelmäßig gepflegt durch *Felix Stupp*. Das Alter der vorliegenden Version ist am Datum am Dateianfang zu erkennen.
Hier werden alle Klassen mit deren öffentliche Methoden (**public** und **protected**) und den vorgesehenen Eigenschaften (meist nur **private**) festgehalten.
## Erklärung zur Architektur
**Alle Anfragen aufgrund von Architekturänderungen erst an mich weitergeben, damit ich dies mit den jeweiligen Autoren besprechen kann!**
Die Autoren sollen nur Fragen zu bisher vorhandenen Methoden erhalten.
Hier werden alle Klassen mit deren öffentliche Methoden (**public** und **protected**) und den vorgesehenen Eigenschaften (nur **private**) festgehalten.
**Alle Fragen zur Architektur oder auch Änderungsvorschläge gerne an mich weitergeben.** Ich werde dies dann behandeln und gegebenfalls auch Änderungen an der Architektur durchführen.
### Wichtige Infos
- **Bitte kommentiert all eure Methoden nach dem Java-Standard, damit diese in der automatisch generierten Dokumentation auch mit einer kurzen Erklärung auftauchen.**
- **Die Provinz-ID und somit auch die Indexe der Arrays beginnen dafür erst bei 1!**
### Erklärungen
Die englischen Begriffe *World* und *Actor* stehen für die gegebenen Oberklassen von Greenfoot.
### Hinweise
Alle Methoden sind meist als **public** zu sehen und werden hauptsächlich von anderen Klassen aufgerufen.
- Die englischen Begriffe *World* und *Actor* stehen für die gegebenen Oberklassen von Greenfoot.
- Alle Methoden sind meist als **public** zu sehen und werden hauptsächlich von anderen Klassen aufgerufen.
- Die Kategorie **Privat Eigenschaften** wird nur aufgelistet, wenn die Klasse von mehreren Autoren geschrieben wird/wurde oder die Klasse noch geschrieben werden muss.
#### Abkürzungen
### Abkürzungen
- **GUI** ([Graphical User Interface](https://de.wikipedia.org/wiki/Grafische_Benutzeroberfl%C3%A4che)): Beschreibt die Möglichkeit, durch welche ein Benutzer gewöhnlicherweise mit Programmen interagieren kann.
### Tipps
- Falls euere Aufgabe die Umsetzung einer Methode ist, die hier bereits beschrieben wird, müsst ihr nicht diesselben Parameterbezeichner verwenden, wie sie hier verwendet wurden. Falls aus diesem Bezeichner jedoch die Bedeutung des
- Falls euere Aufgabe die Umsetzung einer Methode ist, die hier bereits beschrieben wird, müsst ihr nicht diesselben Parameterbezeichner verwenden, wie sie hier verwendet wurden. Falls aus diesem Bezeichner jedoch nicht mehr die Bedeutung des Parameters ausgeht, muss dies in einem Java-Documentation Kommentar erklärt werden.
- Alle Klassen, die als Actor agieren und **nur** in der auf der *GeneralMap* beziehungsweise der Unterklassen dieser Klasse eingesetzt werden, müssen teilweise mit dieser Welt interagieren. Um die aktuelle Welt sofort im richtigen Typ zu bekommen, damit auf unsere Funktionen zugegriffen werden können, kann euch folgender Code Snippet helfen. Einfach in die Klassen einfügen einfügen und **getWorld** () wird euch besser helfen können.
@Override public GeneralMap getWorld() {
return (GeneralMap) super.getWorld();
}
``` java
@Override public GeneralMap getWorld() {
return (GeneralMap) super.getWorld();
}
```
- Arbeitet bitte, wenn möglich, mit der *Utils*-Klasse, diese kann helfen den Code übersichtlicher und kürzer zu gestalten, da häufige und allgemein umsetzbare Aufgaben über diese einheitlich abgearbeitet werden sollen. Das Debuggen wird somit auch einfacher, sowohl für mich als auch für euch selbst.
- Ihr könnt auch ab und zu in die Dokumentationen der offiziellen Java-Bibliotheken schauen, falls ihr denkt, dass es bereits eine Methode geben sollte für den Vorgang, den ihr sonst selbst programmieren müsstet.
---
## Klassenverzeichnis
### Worlds
@ -89,14 +90,20 @@ Auch, wenn diese Klasse einen Konstruktor besitzt, ist dieser nur für die Unter
### Konstruktorparameter
1. Der Dateiname des Hintergrundbildes der Karte als *String*
2. Spielerliste mit den Namen als *String[]*
Als ersten Parameter wird die *GeneralMap* den Dateinamen des Hintergrundbilds der Map als *String* erwarten, welches automatisch von der jeweiligen Map-Klasse übergeben wird. Die folgenden Parameter werden von allen Map-Klassen, inklusive der *GeneralMap*, erwartet. Die Unterklassen sollen hierbei alles 1:1 weitergeben.
1. Spielerliste mit den Namen als *String[]*
2. Liste mit den jeweiligen "Farben" der Spieler als *int[]*
#### Hintergrundbild
Dies soll von den Konstruktoren der spezifischen Maps weitergegeben werden. Der Dateiname ist dort jeweils angepasst und direkt im Code als Konstante angegebenen. Diese Oberklasse übernimmt dann alle Aktionen, um es im Hintergrund der GUI Grafik anzuzeigen.
### Vorgesehene Eigenschaften
#### Spielerliste und "Farben"-Liste
Die beiden Arrays sollen Grundinformationen zu den Spielern weitergeben. Weitere Informationen zu den "Farben" sind bei der *Player*-Klasse zu finden.
### Private Eigenschaften
- Spielerliste (*Player[]*, der Index entspricht der Spieler ID, *anfangend bei 0*)
- Provinzliste (*Province[]*, als **protected** definiert, der Index entspricht der Provinz ID, *anfangend bei 1*)
@ -124,7 +131,7 @@ Diese Methode soll das Hinzufügen der Provinzen, sowohl in das Array, als auch
- *String* **getPlayerName** ( *int* playerID )
- *int* **getPlayerStars** ()
- *int* **getProvinceOwner** ( *int* )
- *int* **getProvinceOwner** ( *int* provinceID )
- *int[]* **getProvinceOwners** ()
- *int* **getProvinceEntityCount** ( *int* playerID )
@ -155,12 +162,13 @@ Gibt die Anzahl der Einheiten von einer bestimmten Provinz zurück. Bei falschen
---
## Spezifische Maps
*extends GeneralMap*
Alle Maps erben von *GeneralMap*
Diese Unterklassen enthalten Informationen wie das Hintergrundbild der jeweiligen Map als auch die Anordnung der Provinzen auf der Map.
### Spezifischer Konstruktor
### Konstruktorparameter
Die Konstruktoren der Unterklassen rufen erst mit den gegebenen Argumenten den *GeneralMap*-Konstruktor auf, um danach die spezifischen Dinge festlegen zu können (Provinzen beispielsweise).
Diese Konstruktorparameter müssen nur zu dieser weitergeleitet werden. Für weitere Informationen bitte bei der *GeneralMap* nachschlagen.
---
@ -169,20 +177,23 @@ Die Konstruktoren der Unterklassen rufen erst mit den gegebenen Argumenten den *
Speichert Informationen zu den einzelnen Provinzen ab und stellt diese später auch als *Actor* dar.
### Konstrukturparameter
### Konstruktorparameter
0. Provinznummer als *int*
0. Kontinentnummer als *int*
0. X-Position auf der Karte als *int*
0. Y-Position auf der Karte als *int*
0. Anzeigename als *String*
0. Sterne als *int*
0. Angrenzende Provinzen als *int[]* (als als *boolean[]* gespeichert)
- Provinznummer *int*
- Kontinentnummer *int*
- X-Position auf der Karte *int*
- Y-Position auf der Karte *int*
- Anzeigename *String*
- Sterne *int*
- Angrenzende Provinzen *int[]* (als *boolean[]* gespeichert)
#### Provinz-ID
#### Provinz-ID und Kontinent-ID
Stellt die ID der Provinz dar.
- Stellt die ID der Provinz dar und ist mit *int* **getID** () abrufbar.
- Stellt die ID des Kontinentes dar und ist mit *int* **getContinentID** () abrufbar.
#### Kontinent-ID
Stellt die ID des Kontinentes dar.
#### Position
@ -193,31 +204,34 @@ Sind nach dem Erstellen der Provinz nicht mehr abrufbar.
Dies ist der Name, der auf der Karte und bei Events im Zusammenhang mit dieser Provinz angezeigt wird.
Kann über *String* **getDisplayName** () abgerufen werden, falls benötigt.
#### Sterne
Dieser Wert wird für die zufällige Verteilung von Einheiten benötigt (laut Achim).
Über *int* **getStars** () soll dieser Wert abrufbar sein.
Dieser Wert wird für die zufällige Verteilung von Einheiten benötigt. Er ist fest für eine Provinz festgeschrieben.
#### Angrenzende Provinzen
Dies ist ein Array von allen Provinzen, die es gibt (Provinznummer als Index), diese jeweils mit einem *boolean*-Wert, der festlegt, ob ein Kampf oder ein Weitergeben von Einheiten möglich ist.
```java
boolean[] nearProvinces;
```
Dem Konstruktor wird stattdessen ein *int[]* mit allen angrenzenden Provinzen als Werte übergeben werden, dieses wird dann automatisch konvertiert.
boolean[] nearProvinces;
### Private Eigenschaften
Dem Konstruktor kann stattdessen auch ein *int[]* mit allen angrenzenden Provinzen als Werte übergeben werden, dieses wird dann automatisch konvertiert.
Über die Methode *boolean* **isProvinceNear** ( *int* ) kann man sich die Einträge einzeln als Booleans ausgeben lassen.
### Zusätzliche Eigenschaften
- Provinznummer
- Kontinentnummer
- X/Y-Position auf der Karte
- Anzeigename
- Sterne
- Angrenzende Provinzen
- Besitzer
- Einheitenanzahl
#### Besitzer
Diese Variable speichert den aktuellen Besitzer.
Über die Methode **int getOwner()** bekommt ihr den aktuellen Besitzer zurück (-1 = keiner, 0 = Spieler 1, ...).
Die Methode **boolean setOwner(int)** speichert einen neuen Besitzer ab. Sie gibt den Erfolg des Setzens zurück, falls also die Zahl kleiner -1 oder größer gleich als die Spieleranzahl sein sollte, wird die Änderung nicht durchgeführt und es wird **false** zurückgegeben.
@ -226,14 +240,70 @@ Die Methode **boolean setOwner(int)** speichert einen neuen Besitzer ab. Sie gib
Diese Eigenschaft speichert, wie viele Einheiten auf diesem Feld stehen (natürlich welche, die dem Besitzer gehören).
Die Methoden *int* **getEntityCount** (), *int* **addToEntities** ( *int* ), *int* **removeFromEntities** ( *int* ) und *int* **setEntityCount** ( *int* ) sollten genügend Möglichkeiten für Änderungen bieten.
Alle Methoden geben nach ihrem Aufruf den nun aktuellen Wert zurück.
### Public Methoden
- **redrawProvince()**
- *int* **getID** ()
- *int* **getContinentID** ()
- *String* **getDisplayName** ()
- *int* **getStars** ()
- *boolean* **isProvinceNear** ( *int* provinceID )
- *int* **getOwner** ()
- *boolean* **setOwner** ( *int* playerID )
- *int* **getEntityCount** ()
- *int* **addToEntities** ( *int* entityCountToAdd )
- *int* **removeFromEntities** ( *int* entityCountToRemove )
- *int* **setEntityCount** ( *int* newEntityCount)
- *void* **redrawProvince** ()
#### getID()
Gibt die Provinz-ID dieser Provinz zurück.
#### getContinentID()
Gibt die Kontinent-ID dieser Provinz zurück.
#### getDisplayName()
Gibt den Anzeigenamen dieser Provinz zurück.
#### getStars()
Gibt die hinterlegte Anzahl an Sternen dieser Provinz zurück.
#### isProvinceNear()
Gibt zurück, ob die angebenene Provinz mit dieser Provinz benachbart ist, umn beispielsweise Einheiten verschieben zu können.
#### getOwner()
Gibt die Spieler-ID des aktuellen Besitzer der Provinz als *int* zurück. **-1** bedeutet, dass diese Provinz aktuell keinen Besitzer hat.
#### setOwner()
Legt einen neuen Besitzer für diese Provinz fest. Bei Erfolg gibt die Methode **true** zurück. Sollte die ID für keinen Spieler stehen, wird die Methode **false** zurückgeben und nichts an dem gespeicherten Wert ändern.
#### getEntityCount()
Gibt die aktuelle Einheitenanzahl auf dieser Provinz zurück.
#### addToEntities()
Addiert die gegebene Anzahl der Einheiten auf die gespeicherte Anzahl drauf, speichert den neuen Wert ab und gibt diesen zurück.
#### removeFromEntities()
Subtrahiert die gegebene Anzahl der Einheiten von die gespeicherte Anzahl ab, speichert den neuen Wert ab und gibt diesen zurück. Bei einem neuen Wert von unter 0 wird dies nicht abspeichert, aber dennoch wird der noch aktuellen Wert zurückgeben.
#### redrawProvince
#### setEntityCount()
Setzt einen neuen festen Wert für die Einheitenanzahl fest und gibt diesen wieder zurück. Bei gegebenen Werten unter 0 wird dies nicht abspeichert, aber dennoch wird der noch aktuellen Wert zurückgeben.
#### redrawProvince()
Wird von der Karte oder von internen Methoden aufgerurfen, um alle sichtbaren Eigenschaften erneut zu zeichnen.
@ -244,53 +314,117 @@ Wird von der Karte oder von internen Methoden aufgerurfen, um alle sichtbaren Ei
Stellt die Spieler da, speichert Informationen zu diesen ab.
### Explizite Eigenschaften
### Konstruktorparameter
- Spielernummer (über Konstruktor festgelegt, *int*)
- Anzeigename (über Konstruktor festgelegt, *String*)
- Sternanzahl
- Statistiken
1. Eroberte Provinzen
2. Verlorene Provinzen
3. Einflussmaximum (maximale Provinzenanzahl, nach einem Zug zu überprüfen)
4. Bekommene Einheiten
5. Verlorene Einheiten
6. Maximale Einheitenanzahl (nach einem Zug zu überprüfen)
0. Spieler-ID als *int*
0. Anzeigename als *String*
0. "Farbe" als *int*
#### Spielernummer
Wird bei der Welt intern benötigt und stellt die Position im Menü und in den Arrays an.
**int getID()** gibt diese wieder zurück.
Wird bei der Welt intern benötigt und stellt die Position im Menü und in den Arrays dar.
#### Anzeigename
Ist der lesbare Name des Spielers, damit nicht nur "Spieler 1", ... usw. zu sehen ist.
**String getDisplayName()** gibt diesen zurück.
#### "Farbe"
Dies soll die "Farbe" eines Spielers festlegen. *Falls euch ein besserer Name für diese Eigenschaft einfällt, bitte mir weitergeben.*
### Private Eigenschaften
- Spielernummer
- Anzeigename
- "Farbe"
- Sternanzahl
- Statistiken
#### Sternanzahl
Die Anzahl der Sterne, die ein Spieler besitzt und gegebenenfalls dann in Einheiten umtauschen kann.
*int* **getStars** (), *int* **addToStars** ( *int* ), *int* **removeFromStars** ( *int* ), *int* **setStars** ( *int* ) sind zum Bearbeiten des Werts da. Auch sie geben danach den nun aktuellen Wert zurück.
#### Statistik
*boolean* **canStarsRemoved** ( *int* ) gibt zurück, ob der Spieler diese Anzahl an Sternen verwenden kann (als Vereinfachung).
Die Statistik soll Events festhalten, um nach einem Spiel verschiedene Werte einsehen zu können. Diese werden von der Welt durch spezielle Funktionen erhöht. Die Reihenfolge, in der die Statistiken angegeben werden, ist wie folgt festgelegt:
#### Statistik
1. Eroberte Provinzen
2. Verlorene Provinzen
3. Einflussmaximum (maximale Provinzenanzahl, nach einem Zug zu überprüfen)
4. Bekommene Einheiten
5. Verlorene Einheiten
6. Maximale Einheitenanzahl (nach einem Zug zu überprüfen)
Die Statistik soll Events festhalten, um nach einem Spiel verschiedene Werte einsehen zu können. Diese werden von der Welt mit speziellen Funktionen erhöht. Zurückgegeben sollen diese als *int[]*-Array in der Reihenfolge, wie sie oben in der Liste auftretten. Es wird auch vorgeschlagen, sie so zu speichern.
### Public Methoden
*int[]* **getStatistics()** gibt diese Liste zurück, damit sie von der Welt angezeigt werden kann.
- *int* **getID** ()
- *String* **getDisplayName** ()
**gotProvince** (), **lostProvince** (), **gotEntities** ( *int* ), **lostEntity** ()
- *int* **getStars** ()
- *int* **addToStars** ( *int* starsToAdd )
- *int* **removeFromStars** ( *int* starsToRemove )
- *int* **setStars** ( *int* newStarsCount )
- *boolean* **canStarsRemoved** ( *int* requiredStarsCount )
### Zusätzliche Methoden
- *int[]* **getStatistics** ()
- *void* **gotProvince** ()
- *void* **lostProvince** ()
- *void* **gotEntities** ( *int* addedEntities )
- *void* **lostEntity** ()
- *boolean[]* **getMyProvinces** ()
- *int* **getProvinceCount** ()
- *void* **redrawPlayer** ()
#### getID()
Gibt die Spieler-ID dieses Spielers zurück.
#### getDisplayName()
Gibt den Anzeigenamen des Spielers zurück.
#### getStars()
Gibt die aktuelle Anzahl der Sterne, die der Spieler besitzt, zurück.
#### addToStars()
Addiert die gegebene Anzahl der Sterne auf die gespeicherte Anzahl drauf, speichert den neuen Wert ab und gibt diesen zurück.
#### removeFromStars()
Subtrahiert die gegebene Anzahl der Sterne von die gespeicherte Anzahl ab, speichert den neuen Wert ab und gibt diesen zurück. Bei einem neuen Wert von unter 0 wird dies nicht abspeichert, aber dennoch wird der noch aktuellen Wert zurückgeben.
#### setStars()
Setzt einen neuen festen Wert für die Sternenanzahl fest und gibt diesen wieder zurück. Bei gegebenen Werten unter 0 wird dies nicht abspeichert, aber dennoch wird der noch aktuellen Wert zurückgeben.
#### canStarsRemoved()
Prüft, ob die gegebenene Anzahl an Sternen von dem Spieler abgezogen werden könnte. Falls ja, wird **true** zurückgegebenen, sonst **false**
#### getStatistics()
Gibt in derselben Reihenfolge wie für die Statistik angegeben die aktuelllen Werte zurück als *int[]*-Array
#### gotProvince()
Wird von der Welt aufgerufen, sobald dieser Spieler eine Provinz erobert hat. Diese Methode erhöht dann den entsprechenden Wert in der Statistik um 1.
#### lostProvinze()
Wird von der Welt aufgerufen, sobald dieser Spieler eine Provinz verloren hat. Diese Methode erhöht dann den entsprechenden Wert in der Statistik um 1.
#### gotEntities()
Wird von der Welt aufgerufen, sobald dieser Spieler Einheiten dazubekommt. Diese Methode erhöht dann den entsprechenden Wert in der Statistik um die gegebenene Anzahl.
#### lostEntity()
Wird von der Welt aufgerufen, sobald dieser Spieler im Kampf eine Einheit verliert. Diese Methode erhöht dann den entsprechenden Wert in der Statistik um 1.
#### getMyProvinces()
Diese Methode hat die Aufgabe, eine Liste aller Provinzen zurückzugeben, wobei jede Provinz mit einem *boolean*-Wert gesagt bekommt, ob sie dem Spieler gehört oder nicht.
@ -312,7 +446,7 @@ Erzwingt das erneute Zeichnen des Player Objekts, um alle sichtbaren Eigenschaft
Stellt einen Würfel als *Actor* dar (vergleichbar mit dem Würfel aus unserem Projekt Zehntausend).
### Eigenschaften
### Private Eigenschaften
- Augenzahl
@ -333,12 +467,68 @@ Berechnet eine Zufallszahl von 1 bis 6, speichert diese ab und gibt sie auch so
## GUI_Interface
*extends Actor*
Die Oberklasse für alle Interface-Objekte wie Buttons und Labels. Diese Klasse ist *abstract*.
Die Oberklasse für alle Interface-Objekte wie Buttons und Labels. Diese Klasse ist als *abstract* definiert. Diese Klasse besitzt als *abstract* definierte Methoden, welche zwingend von den erbendenen Klassen ersetzt werden muss.
### Protected Eigenschaften
- *int* **sx**
- *int* **sy**
#### sx
Gibt die Breite des Objektes an (Größe in X-Richtung, **S**ize**X**). Nur für Methoden der erbenden Objekte selbst gedacht.
#### sy
###
Gibt die Höhe des Objektes an (Größe in Y-Richtung, **S**ize**Y**). Nur für Methoden der erbenden Objekte selbst gedacht.
### Public Methoden
- *int* **getWidth** ()
- *int* **getHeight** ()
- *void* **setSize** ( *int* width , *int* height )
- *java.awt.Color* **getBackColor** ()
- *boolean* **setBackColor** ( *java.awt.Color* newBackColor)
- *java.awt.Color* **getForeColor** ()
- *boolean* **setForeColor** ( *java.awt.Color* newForeColor)
#### getWidth()
Gibt die Breite des Objektes zurück.
#### getHeight()
Gibt die Höhe des Objektes zurück.
#### setSize()
Ändert die Größe des Objektes. Eventuell wird das Objekt diese Größenänderung nicht übernehmen wollen (siehe *autoSize* Eigenschaften bei diesen, falls vorhanden).
#### getBackColor()
Gibt die aktuelle Hintergrundfarbe des Objektes zurück.
#### setBackColor()
Legt eine neue Hintergrundfarbe für dieses Objekt fest.
#### getForeColor()
Gibt die aktuelle Vordergrundfarbe (meist Textfarbe) des Objektes zurück.
#### setForeColor()
Legt eine neue Vordergrundfarbe (meist Textfarbe) für dieses Objekt fest.
### Abstract Public Methoden
- *void* redraw()
#### redraw()
Durch diese Methode soll die erneute Zeichnung des Objektes verlangen können. Viele der **set**-Methoden rufen daher bei einer erfolgreichen Änderung diese Methode auf.
---
## Label
@ -346,27 +536,188 @@ Die Oberklasse für alle Interface-Objekte wie Buttons und Labels. Diese Klasse
Zeigt einen Text auf dem Bildschirm an. Zuvor wurde dieses Objekt "Text" genannt, "Label" ist der fachlichere Ausdruck dafür.
### Eigenschaften
### Konstruktorparameter
- Anzeigetext (*String*; kann vom Konstruktor entgegen genommen werden, sonst ist der Standardtext "" zu sehen)
0. Anzeigetext als *String*
0. Textgröße als *int*
#### Anzeigetext
Dieser Text wird von dem Actor aus zu sehen sein.
Mit **String getText()** und **String setText(String)** bekommt Zugriff darauf.
Gibt den Text an, den das Label darstellen soll.
#### Textgröße
Gibt die Textgröße an, in der das Label den Anzeigetext darstellen soll.
### Private Eigenschaften
- Anzeigetext
- Textgröße
- Automatische Größenanpassung
#### Automatische Größenanpassung
Diese Eigenschaft des Labels legt fest, ob es seine Größe dynamisch an den darzustellenden Text automatisch anpassen soll. Dies kann euch die Arbeit mit diesem erleichtern, kann aber auch zu Problemen bei der Darstellung mehrerer Objekte nebeneinander erschweren, da diese sich eventuell überlappen könnten.
### Public Methoden
- *boolean* **getAutoSize** ()
- *void* **setAutoSize** ( *boolean* newValue )
- *int* **getTextSize** ()
- *boolean* **setTextSize** ( *int* newSize )
- *String* **getText** ()
- *boolean* **setText** ( *String* newText )
- *void* **redraw** ()
#### getAutoSize()
Gibt an, ob das Label seine Größe automatisch an den Inhalt anpasst.
#### setAutoSize()
Legt fest, ob das Label seine Größe automatisch an den Inhalt anpassen soll. Falls die Eigenschaft damit aktiviert werden sollte, erfolgt automatisch ein Aufruf der **redraw**-Methode.
#### getTextSize()
Gibt die aktuelle Textgröße zurück.
#### setTextSize()
Legt eine neue Textgröße fest.
#### getText()
Gibt den aktuellen Anzeigetext zurück.
#### setText()
Legt einen neuen Anzeigetext zurück.
#### redraw()
Erneuert die Darstellung des Labels mit seinem Anzeigetext auf der Welt. Hiermit wird gegebenfalls auch die Größe des Labels automatisch angepasst.
---
## Button
*extends GUI_Interface*
Die Hauptklasse für Buttons, wird durch Erbung spezifiziert.
Stellt einen Button mit einem Text dar. Dieses Objekt kann dazu ein Event auslösen, sobald darauf geklickt wurde.
### Konstruktorparameter
Hier gibt es mehrere Möglichkeiten, eine Instanz der Klasse *Button* zu erstellen:
0. Anzeigetext als *String*
0. Textgröße als *int*
1. EventHandler als *ButtonEvent*
2. Anzeigetext als *String*
2. Textgröße als *int*
2. EventHandler als *ButtonEvent*
#### Anzeigetext
Gibt den Text an, den das Label darstellen soll.
#### Textgröße
Gibt die Textgröße an, in der das Label den Anzeigetext darstellen soll.
#### EventHandler
Hierfür muss die Instanz einer Klasse übergeben werden, welche das Interface *ButtonEvent* implementiert und damit eine Funktion namens *void* **buttonClicked** ( *Button* button ) besitzt. Folgend ein Beispiel für eine Klassendefinition, die eine Methode mit diesem Namen besitzt, die dann von dem Button aufgerufen wird, sobald dieser angeklickt wurde.
```java
public class TestClass implements ButtonEvent {
Button button1 = new Button("Button 1",10,self);
Button button1 = new Button("Button 2",10,self);
public void buttonClicked(Button b) {
// Hier steht nun, was passieren soll, wenn IRGENDEIN Button angeklickt wird, der eine Instanz von dieser Klasse als EventHandler zugewiesen bekommen hat.
if(b == button1) {
// mein erster Button
} else if(b == button2) {
// mein zweiter Button
}
}
}
```
### Private Eigenschaften
- Anzeigetext
- Textgröße
- EventHandler
- Automatische Größenanpassung
#### Automatische Größenanpassung
Diese Eigenschaft des Buttons legt fest, ob es seine Größe dynamisch an den darzustellenden Text automatisch anpassen soll. Dies kann euch die Arbeit mit diesem erleichtern, kann aber auch zu Problemen bei der Darstellung mehrerer Objekte nebeneinander erschweren, da diese sich eventuell überlappen könnten.
### Public Methoden
- *boolean* **getAutoSize** ()
- *void* **setAutoSize** ( *boolean* newValue )
- *int* **getTextSize** ()
- *boolean* **setTextSize** ( *int* newSize )
- *String* **getText** ()
- *boolean* **setText** ( *String* newText )
- *ButtonEvent* **getHandler** ()
- *void* **setHandler** ( *ButtonEvent* newEventHandler )
- *void* **removeHandler** ()
- *void* **redraw** ()
#### getAutoSize()
Gibt an, ob der Button seine Größe automatisch an den Inhalt anpasst.
#### setAutoSize()
Legt fest, ob der Button seine Größe automatisch an den Inhalt anpassen soll. Falls die Eigenschaft damit aktiviert werden sollte, erfolgt automatisch ein Aufruf der **redraw**-Methode.
#### getTextSize()
Gibt die aktuelle Textgröße zurück.
#### setTextSize()
Legt eine neue Textgröße fest.
#### getText()
Gibt den aktuellen Anzeigetext zurück.
#### setText()
Legt einen neuen Anzeigetext zurück.
#### getHandler()
Gibt den aktuellen EventHandler des Buttons zurück. Falls keiner vorhanden ist, wird **null** zurückgegeben.
#### setHandler()
Legt einen neuen EventHandler für den Button fest. Der alte EventHandler wird damit überschrieben.
#### removeHandler()
Deaktiviert den aktuellen EventHandler, damit keine Events mehr ausgelöst werden können.
#### redraw()
Erneuert die Darstellung des Buttons mit seinem Anzeigetext auf der Welt. Hiermit wird gegebenfalls auch die Größe des Buttons automatisch angepasst.
---
## Utils
Eine finale Klasse mit vielen kleinen Methoden, die den restlichen Code verkleinern und besser lesbar gestalten soll. Ergänzungen in Form von eigenen Funktionen dürfen **selbst** eingebracht werden.
Eine finale Klasse mit vielen kleinen Methoden, die den restlichen Code verkleinern und besser lesbar gestalten soll. Ergänzungen in Form von eigenen Funktionen dürfen **selbst** eingebracht werden. Alle Methoden dieser Klasse sollen *public* sein.
### copyArray()
@ -374,4 +725,4 @@ Kopiert ein Array des Types *boolean*, *int* oder *String* mit identischer Grö
### drawInsideRectangle()
Zeichnet innerhalb eines **GreenfootImage** ein Rechteck gefüllt mit der angegebenen Farbe. Es besitzt zu allen Seiten den gegebenen Abstand zum Rand des Image.
Zeichnet innerhalb eines **GreenfootImage** ein Rechteck gefüllt mit der angegebenen Farbe. Es besitzt zu allen Seiten den gegebenen Abstand zum Rand des Image.

@ -1,73 +1,72 @@
# Funktionsliste Zweiundvierzig
**Version: 3**
**Stand: 13.05.2016** (TT.MM.JJJJ / DD.MM.YYYY)
**Letztes Update: 04.06.2016** (TT.MM.JJJJ / DD.MM.YYYY)
[Hier die offizielle Version vom Master-Branch sehen](https://github.com/HGE-IT-Course-2016/zweiundvierzig/blob/master/planung/funktionsliste.md)
[Hier zum gesamten Architekturplan auf dem aktuellen Branch](architektur.md)
Hier einfach eine grobe Übersicht über alle Funktionen, die jede Klasse als Public / Protected besitzen soll beziehungsweise bereits besitzt.
Weitere Informationen zu den Funktionen findet ihr in der Architektur oder, falls die Funktion bereits vorhanden ist, in der Dokumentation, die von Greenfoot automatisch erstellt wird (durch die InCode Dokumentation).
Hier einfach eine grobe Übersicht über alle Methoden und eventuellen Variabled, die jede Klasse als *public* oder *protected* besitzen soll beziehungsweise bereits besitzt.
Weitere Informationen zu den Methoden findet ihr in der Architektur oder, falls die Methoden bereits vorhanden ist, in der Dokumentation, die von Greenfoot automatisch erstellt wird (durch die InCode Dokumentation).
Falls euere Aufgabe die Umsetzung einer Methode ist, die hier bereits beschrieben wird, müsst ihr nicht diesselben Parameterbezeichner verwenden, wie sie hier verwendet wurden. Falls aus diesem Bezeichner jedoch nicht mehr die Bedeutung des Parameters ausgeht, muss dies in einem Java-Documentation Kommentar erklärt werden.
Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Funktionen im Code präsent habt.
Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt.
## GeneralMap
- static *GeneralMap* **generateMap** ( *int* mapID, ... )
- *GeneralMap* ( *String* backgroundImage, *String[]* playerList, *int[]* colorList )
- protected *void* **addProvinceToMap** ( *Province* province )
- *int* **getPlayerCount** ()
- *String* **getPlayerName** ()
- *String* **getPlayerName** ( *int* )
- *String* **getPlayerName** ( *int* playerID )
- *int* **getPlayerStars** ()
- *int* **getProvinceOwner** ( *int* )
- *int* **getProvinceOwner** ( *int* provinceID )
- *int[]* **getProvinceOwners** ()
- *int* **getProvinceEntityCount** ( *int* )
- *int* **getProvincesEntityCounts** ( *int[]* )
- *int* **getProvincesEntityCounts** ( *boolean[]* )
- *int* **getProvincesEntityCounts** ( *int* )
- *int* **getProvinceEntityCount** ( *int* playerID )
## Province
- *Province* ( *int*, *int*, *int*, *int*, *int*, *String*, *int[]* )
- *Province* ( *int*, *int*, *int*, *int*, *int*, *String*, *boolean[]* )
- *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces )
- *int* **getID** ()
- *int* **getContinentID** ()
- *String* **getDisplayName** ()
- *boolean* **isProvinceNear** ( *int* )
- *int* **getStars** ()
- *boolean* **isProvinceNear** ( *int* provinceID )
- *int* **getOwner** ()
- *void* **setOwner** ( *int* )
- *boolean* **setOwner** ( *int* playerID )
- *int* **getEntityCount** ()
- *int* **addToEntities** ( *int* )
- *int* **removeFromEntities** ( *int* )
- *int* **setEntityCount** ( *int* )
- *int* **addToEntities** ( *int* entityCountToAdd )
- *int* **removeFromEntities** ( *int* entityCountToRemove )
- *int* **setEntityCount** ( *int* newEntityCount)
- *void* **redrawProvince** ()
## Player
- *Player* ( *int*, *String* )
- *Player* ( *int* playerID, *String* displayName, *int* playerColor )
- *int* getID ()
- *int* **getID** ()
- *String* **getDisplayName** ()
- *int* **getStars** ()
- *int* **addToStars** ( *int* )
- *int* **removeFromStars** ( *int* )
- *int* **setStars** ( *int* )
- *boolean* **canStarsRemoved**( *int* )
- *int* **addToStars** ( *int* starsToAdd )
- *int* **removeFromStars** ( *int* starsToRemove )
- *int* **setStars** ( *int* newStarsCount )
- *boolean* **canStarsRemoved** ( *int* requiredStarsCount )
- *int[]* **getStatistics** ()
- *void* **gotProvince** ()
- *void* **lostProvince** ()
- *void* **gotEntities** ( *int* )
- *void* **lostEntity** ()
- *void* **gotProvince** ()
- *void* **lostProvince** ()
- *void* **gotEntities** ( *int* addedEntities )
- *void* **lostEntity** ()
- *boolean[]* **getMyProvinces** ()
- *int* **getProvinceCount** ()
@ -83,45 +82,48 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Funktio
## GUI_Interface
- protected *int* **sx**
- protected *int* **sy**
- *int* **getWidth** ()
- *int* **getHeight** ()
- *void* **setSize** ( *int*, *int* )
- *void* **setSize** ( *int* width , *int* height )
- *System.awt.Color* **getBackColor** ()
- *boolean* **setBackColor** ( *System.awt.Color* )
- *System.awt.Color* **getForeColor** ()
- *boolean* **setForeColor** ( *System.awt.Color* )
- *java.awt.Color* **getBackColor** ()
- *boolean* **setBackColor** ( *java.awt.Color* newBackColor)
- *java.awt.Color* **getForeColor** ()
- *boolean* **setForeColor** ( *java.awt.Color* newForeColor)
- abstract *void* **redraw** ()
## Label (erweitert GUI_Interface)
- *Label* ( *String*, *int* )
- *Label* ( *String* text, *int* textSize )
- *boolean* **getAutoSize** ()
- *boolean* **setAutoSize** ( *boolean* )
- *void* **setAutoSize** ( *boolean* newValue )
- *int* **getTextSize** ()
- *boolean* **setTextSize** ( *int* )
- *boolean* **setTextSize** ( *int* newSize )
- *String* **getText** ()
- *boolean* **setText** ( *String* )
- *boolean* **setText** ( *String* newText )
- *void* **redraw** ()
## Button (erweitert GUI_Interface)
- *Button* ( *String*, *int* )
- *Button* ( *ButtonEvent* )
- *Button* ( *String*, *int*, *ButtonEvent* )
- *Button* ( *String* text, *int* textSize )
- *Button* ( *ButtonEvent* eventHandler )
- *Button* ( *String* text, *int* textSize, *ButtonEvent* eventHandler )
- *boolean* **getAutoSize** ()
- *boolean* **setAutoSize** ( *boolean* )
- *void* **setAutoSize** ( *boolean* newValue )
- *int* **getTextSize** ()
- *boolean* **setTextSize** ( *int* )
- *boolean* **setTextSize** ( *int* newSize )
- *String* **getText** ()
- *boolean* **setText** ( *String* )
- *boolean* **setText** ( *String* newText )
- *ButtonEvent* **getHandler** ()
- *void* **setHandler** ( *ButtonEvent* )
- *void* **removeHandler** ()
- *void* **setHandler** ( *ButtonEvent* newEventHandler )
- *void* **removeHandler** ()
- *void* **redraw** ()
Loading…
Cancel
Save