From 86772bed539f88e0678c6b2f0db7ea2da045c239 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 20:08:45 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Dokument-Kommentar=20angepasst=20*=20Autore?= =?UTF-8?q?nliste=20erweitert=20*=20Versionsnummer=20erh=C3=B6ht=20*=20Sch?= =?UTF-8?q?reibweise=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeneralMap.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GeneralMap.java b/GeneralMap.java index 01ce194..d07a948 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -1,11 +1,11 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -/** - * Oberklasse für verschiedene Maps; - * neue Maps werden als Unterklasse dieser Klasse eingefügt. - * - * @author GruenerWal, MaxiJohl - * @version 0.2.0 +/** + Oberklasse für verschiedene Maps; + neue Maps werden als Unterklasse dieser Klasse eingefügt. + + @author GruenerWal, MaxiJohl, Felix Stupp + @version 0.3.0 */ public abstract class GeneralMap extends World { From bbf3bf4e316b0115dfa18d5b26fb59bd6f333a3a Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 20:32:23 +0200 Subject: [PATCH 2/6] =?UTF-8?q?Architektur=20und=20Funktionsliste=20angepa?= =?UTF-8?q?sst=20Die=20im=20Code=20bereits=20vorhandenen=20und=20genutzten?= =?UTF-8?q?=20Methoden=20**getXPos**=20und=20**getYPos**=20der=20*Province?= =?UTF-8?q?*,=20welche=20in=20der=20Architektur=20bisher=20noch=20fehlten,?= =?UTF-8?q?=20wurden=20nun=20hinzugef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planung/architektur.md | 14 ++++++++++++-- planung/funktionsliste.md | 4 +++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/planung/architektur.md b/planung/architektur.md index 4864cc6..775a38c 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -243,7 +243,9 @@ 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). ### Public Methoden - + +- *int* **getXPos** () +- *int* **getYPos** () - *int* **getID** () - *int* **getContinentID** () - *String* **getDisplayName** () @@ -261,7 +263,15 @@ Diese Eigenschaft speichert, wie viele Einheiten auf diesem Feld stehen (natürl - *boolean* **hasClicked** () -- *void* **redrawProvince** () +- *void* **redrawProvince** () + +#### getXPos() + +Gibt die in der Provinz hinterlegte X-Position zurück. + +#### getYPos() + +Gibt die in der Provinz hinterlegte Y-Position zurück. #### getID() diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index 09b9f2d..a5b91ce 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -31,7 +31,9 @@ Dies könnt auch als Checkliste verwenden, um zu sehen, ob ihr bereits alle Meth ## Province (extends Actor) - *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces ) - + +- *int* **getXPos** () +- *int* **getYPos** () - *int* **getID** () - *int* **getContinentID** () - *String* **getDisplayName** () From 49635709e095266ee5a3c8661e69aca41e696261 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 20:35:08 +0200 Subject: [PATCH 3/6] Format der Dokument-Kommentare angepasst --- Map_World.java | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Map_World.java b/Map_World.java index e3f39db..b3745e3 100644 --- a/Map_World.java +++ b/Map_World.java @@ -1,45 +1,45 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -/** - * Klasse der Standard-Welt - * (Also die normale Weltkarte mit allen Kontinenten) - * - * @author GruenerWal, MaxiJohl - * @version 0.3.0 +/** + Klasse der Standard-Welt + (Also die normale Weltkarte mit allen Kontinenten) + + @author GruenerWal, MaxiJohl + @version 0.3.0 */ public class Map_World extends GeneralMap { - /** - * Anzahl der Provinzen. + /** + Anzahl der Provinzen. */ int provinceCount = 42; - /** - * Konstruktor der Weltkarte; - * konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. + /** + Konstruktor der Weltkarte; + konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. */ public Map_World(String[] playerList, int[] colorList) { super("",playerList,colorList); - /* - * Hier werden später sämtliche Provinzen der Standard-Map erstellt. - * Dies funktioniert folgendermassen: - * ================================================================= - * - * Dieses kürzere Format ersetzt den langen Code und sorgt eventuell sogar für einen Geschwindigkeitsschub. Dabei sollte diesselbe Funktionalität erhalten bleiben. - * - * provinces[] = new Province(,,,,,"", new int[] { }); - * - * ================================================================= - * Der Speicherplatz für provinces[0] bleibt leer, da es keine Provinz mit der ID 0 gibt! - * - * Und ja, ich weiss, dass das scheisse viel Schreibarbeit ist. - * Aber da muss man durch, wir habens auch hinbekommen :P - * - * ~GruenerWal + /* + Hier werden später sämtliche Provinzen der Standard-Map erstellt. + Dies funktioniert folgendermassen: + ================================================================= + + Dieses kürzere Format ersetzt den langen Code und sorgt eventuell sogar für einen Geschwindigkeitsschub. Dabei sollte diesselbe Funktionalität erhalten bleiben. + + provinces[] = new Province(,,,,,"", new int[] { }); + + ================================================================= + Der Speicherplatz für provinces[0] bleibt leer, da es keine Provinz mit der ID 0 gibt! + + Und ja, ich weiss, dass das scheisse viel Schreibarbeit ist. + Aber da muss man durch, wir habens auch hinbekommen :P + + ~GruenerWal */ // Festlegung der Provinz-Anzahl From 6d9c86271bb910403bc8281e7441328f267232d5 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 20:39:24 +0200 Subject: [PATCH 4/6] =?UTF-8?q?Province=20Offset=20Einrichtung=20-=20*Gene?= =?UTF-8?q?ralMap*:=20Hinzuf=C3=BCgen=20der=20Konstanten=20und=20der=20Met?= =?UTF-8?q?hode=20**initProvinces**=20-=20*Map=5FWorld*:=20Umstellung=20au?= =?UTF-8?q?f=20Verwendung=20der=20neuen=20Methode=20-=20Architektur:=20Dok?= =?UTF-8?q?umentation=20der=20neuen=20Methode=20hinzugef=C3=BCgt,=20dabei?= =?UTF-8?q?=20wurde=20die=20Methode=20**addProvinceToMap**=20gestrichen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeneralMap.java | 245 +++--- Map_World.java | 179 ++-- planung/architektur.md | 1736 ++++++++++++++++++------------------- planung/funktionsliste.md | 324 +++---- 4 files changed, 1254 insertions(+), 1230 deletions(-) diff --git a/GeneralMap.java b/GeneralMap.java index d07a948..707becf 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -1,114 +1,141 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + /** Oberklasse für verschiedene Maps; neue Maps werden als Unterklasse dieser Klasse eingefügt. @author GruenerWal, MaxiJohl, Felix Stupp - @version 0.3.0 - */ -public abstract class GeneralMap extends World -{ - /* - Felder, im Moment nur Anzahl der Provinzen - Später evtl. weitere Werte wie Schwierigkeit denkbar - */ - - protected Province[] provinces; - protected Player[] players; - - protected int currentPlayer = 0; - - /** - Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler. - @param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird. - @param playerList Die Liste mit den Namen der Spieler - @param colorList Die Liste mit den Farben der Spieler - */ - public GeneralMap(String backImage, String[] playerList, int[] colorList) - { - super(1600,900,1); - players = new Player[playerList.length]; - for (int i = 0; i < playerList.length; i++) { - players[i] = new Player(i,playerList[i],colorList[i]); - } - } - - /** - Gibt die Anzahl der vorhandenen Spieler aus. - */ - public int getPlayerCount() - { - return players.length; - } - - /** - Gibt den Namen des aktuellen Spielers aus. - @return Der Name des aktuellen Spielers - */ - public String getPlayerName() - { - return players[currentPlayer].getDisplayName(); - } - - /** - Gibt den Namen des Spielers aus, dem dessen ID gehört. - @param plID Die ID des zu findenden Spielers - @return Der Name des Spielers - */ - public String getPlayerName(int plID) - { - return players[plID].getDisplayName(); - } - - /** - Gibt die Anzahl der Sterne des aktuellen Spielers zurück. - @return Die Anzahl der Sterne des aktuellen Spielers - */ - public int getPlayerStars() - { - return players[currentPlayer].getStars(); - } - - /** - Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört. - @param prID Die gefragte Provinz - */ - public int getProvinceOwner(int prID) - { - if(prID < 1 || prID > provinces.length) { - return -1; - } - return provinces[prID].getOwner(); - } - - /** - Gibt eine Liste mit allen Provinzen und deren Besitzern zurück. - @return Array mit der Provinz-ID als Index und dem Besitzer als Wert - */ - public int[] getProvinceOwners() - { - int[] prOwners = new int[provinces.length]; - for (int i = 1; i > provinces.length; i++) { - prOwners[i] = provinces[i].getOwner(); - } - return prOwners; - } - - /** - Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört. - @param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen. - @return Die Anzahl der Einheiten, die dem Spieler gehören. - */ - public int getProvinceEntityCount(int playerID) - { - int c = 0; - for (int i = 1; i > provinces.length; i++) { - if(provinces[i].getOwner() == playerID) { - c = c + provinces[i].getEntityCount(); - } - } - return c; - } - -} + @version 0.3.0 +*/ +public abstract class GeneralMap extends World +{ + /* + Felder, im Moment nur Anzahl der Provinzen + Später evtl. weitere Werte wie Schwierigkeit denkbar + */ + + private final int X_OFFSET = 0; // Verschiebt die Provinzen nach rechts + private final int Y_OFFSET = 0; // Verschiebt die Provinzen nach unten + + /* + Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert. + Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist. + Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 8000 einzutragen. + + Die vorherige Erhöhung des Skalars ist mit der höheren Genauigkeit bei der Arbeit mit dem int-Basistyp zu erklären. + */ + private final int SCALE_VALUE = 10000; // SCALE_VALUE/10000 wird verwendet + + protected Province[] provinces; + protected Player[] players; + + protected int currentPlayer = 0; + + /** + Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler. + @param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird. + @param playerList Die Liste mit den Namen der Spieler + @param colorList Die Liste mit den Farben der Spieler + */ + public GeneralMap(String backImage, String[] playerList, int[] colorList) + { + super(1600,900,1); + players = new Player[playerList.length]; + for (int i = 0; i < playerList.length; i++) { + players[i] = new Player(i,playerList[i],colorList[i]); + } + } + + /** + Fügt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu. + */ + protected void initProvinces() { + for(int i = 1; i < provinces.length; i++) { + Province p = provinces[i]; + int s = SCALE_VALUE/10000; + int x = p.getX(); + int y = p.getY(); + x = (x * s) + X_OFFSET; + y = (y * s) + y_OFFSET; + addObject(p,x,y); + } + } + + /** + Gibt die Anzahl der vorhandenen Spieler aus. + */ + public int getPlayerCount() + { + return players.length; + } + + /** + Gibt den Namen des aktuellen Spielers aus. + @return Der Name des aktuellen Spielers + */ + public String getPlayerName() + { + return players[currentPlayer].getDisplayName(); + } + + /** + Gibt den Namen des Spielers aus, dem dessen ID gehört. + @param plID Die ID des zu findenden Spielers + @return Der Name des Spielers + */ + public String getPlayerName(int plID) + { + return players[plID].getDisplayName(); + } + + /** + Gibt die Anzahl der Sterne des aktuellen Spielers zurück. + @return Die Anzahl der Sterne des aktuellen Spielers + */ + public int getPlayerStars() + { + return players[currentPlayer].getStars(); + } + + /** + Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört. + @param prID Die gefragte Provinz + */ + public int getProvinceOwner(int prID) + { + if(prID < 1 || prID > provinces.length) { + return -1; + } + return provinces[prID].getOwner(); + } + + /** + Gibt eine Liste mit allen Provinzen und deren Besitzern zurück. + @return Array mit der Provinz-ID als Index und dem Besitzer als Wert + */ + public int[] getProvinceOwners() + { + int[] prOwners = new int[provinces.length]; + for (int i = 1; i > provinces.length; i++) { + prOwners[i] = provinces[i].getOwner(); + } + return prOwners; + } + + /** + Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört. + @param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen. + @return Die Anzahl der Einheiten, die dem Spieler gehören. + */ + public int getProvinceEntityCount(int playerID) + { + int c = 0; + for (int i = 1; i > provinces.length; i++) { + if(provinces[i].getOwner() == playerID) { + c = c + provinces[i].getEntityCount(); + } + } + return c; + } + +} diff --git a/Map_World.java b/Map_World.java index b3745e3..a090e8a 100644 --- a/Map_World.java +++ b/Map_World.java @@ -1,30 +1,30 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + /** Klasse der Standard-Welt (Also die normale Weltkarte mit allen Kontinenten) @author GruenerWal, MaxiJohl - @version 0.3.0 - */ - -public class Map_World extends GeneralMap -{ - /** - Anzahl der Provinzen. - */ - - int provinceCount = 42; - - /** + @version 0.3.0 + */ + +public class Map_World extends GeneralMap +{ + /** + Anzahl der Provinzen. + */ + + int provinceCount = 42; + + /** Konstruktor der Weltkarte; - konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. - */ - - public Map_World(String[] playerList, int[] colorList) - { - super("",playerList,colorList); - /* + konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. + */ + + public Map_World(String[] playerList, int[] colorList) + { + super("",playerList,colorList); + /* Hier werden später sämtliche Provinzen der Standard-Map erstellt. Dies funktioniert folgendermassen: ================================================================= @@ -39,73 +39,70 @@ public class Map_World extends GeneralMap Und ja, ich weiss, dass das scheisse viel Schreibarbeit ist. Aber da muss man durch, wir habens auch hinbekommen :P - ~GruenerWal - */ - - // Festlegung der Provinz-Anzahl - - provinces = new Province[provinceCount + 1]; - - // Implementierung sämtlicher Provinzen - // ACHTUNG! Gaaaaanz viel Code! - - // cID 1 - Nordamerika - provinces[1] = new Province( 1 , 1 , 64 , 106 , 1 , "Alaska" , new int[] {2 , 3 , 36}); - provinces[2] = new Province( 2 , 1 , 162 , 106 , 1 , "NW-Territorien" , new int[] {1 , 3 , 4 , 9}); - provinces[3] = new Province( 3 , 1 , 53 , 170 , 1 , "Alberta" , new int[] {1 , 2 , 4 , 5}); - provinces[4] = new Province( 4 , 1 , 223 , 177 , 2 , "Ontario" , new int[] {2 , 3 , 5 , 6 , 7 , 9}); - provinces[5] = new Province( 5 , 1 , 160 , 236 , 2 , "Weststaaten" , new int[] {3 , 4 , 6 , 8}); - provinces[6] = new Province( 6 , 1 , 232 , 273 , 2 , "Oststaaten" , new int[] {4 , 5 , 7 , 8}); - provinces[7] = new Province( 7 , 1 , 300 , 180 , 2 , "Quebec" , new int[] {4 , 6 , 9}); - provinces[8] = new Province( 8 , 1 , 181 , 347 , 1 , "Mittelamerika" , new int[] {5 , 6 , 17}); - provinces[9] = new Province( 9 , 1 , 365 , 55 , 1 , "Groenland" , new int[] {2 , 4 , 7 , 10}); - - // cID 2 - Europa - provinces[10] = new Province(10 , 2 , 454 , 142 , 1 , "Island" , new int[] {9 , 11 , 12}); - provinces[11] = new Province(11 , 2 , 424 , 221 , 2 , "Grossbritannien" , new int[] {10 , 12 , 14 , 15}); - provinces[12] = new Province(12 , 2 , 520 , 153 , 1 , "Skandinavien" , new int[] {10 , 11 , 13 , 14}); - provinces[13] = new Province(13 , 2 , 636 , 180 , 2 , "Russland" , new int[] {12 , 14 , 16 , 27 , 31 , 32}); - provinces[14] = new Province(14 , 2 , 528 , 232 , 2 , "Nordeuropa" , new int[] {11 , 12 , 13 , 15 , 16}); - provinces[15] = new Province(15 , 2 , 449 , 335 , 2 , "Westeuropa" , new int[] {11 , 14 , 16 , 25}); - provinces[16] = new Province(16 , 2 , 537 , 296 , 2 , "Suedeuropa" , new int[] {13 , 14 , 15 , 25 , 26 , 27}); - - // cID 3 - Suedamerika - provinces[17] = new Province(17 , 3 , 245 , 396 , 1 , "Venezuela" , new int[] {8 , 18 , 19}); - provinces[18] = new Province(18 , 3 , 255 , 498 , 1 , "Peru" , new int[] {17 , 19 , 20}); - provinces[19] = new Province(19 , 3 , 327 , 467 , 2 , "Brasilien" , new int[] {17 , 18 , 20 , 25}); - provinces[20] = new Province(20 , 3 , 274 , 572 , 1 , "Argentinien" , new int[] {18 , 19}); - - // cID 4 - Afrika - provinces[21] = new Province(21 , 4 , 680 , 630 , 1 , "Madagaskar" , new int[] {24 , 22}); - provinces[22] = new Province(22 , 4 , 580 , 624 , 1 , "Südafrika" , new int[] {21 , 23 , 24}); - provinces[23] = new Province(23 , 4 , 572 , 537 , 2 , "Zentralafrika" , new int[] {22 , 25 , 24}); - provinces[24] = new Province(24 , 4 , 632 , 500 , 2 , "Ostafrika" , new int[] {21 , 22 , 25 , 23 , 26}); - provinces[25] = new Province(25 , 4 , 491 , 444 , 1 , "Nordafrika" , new int[] {15 , 16 , 26 , 23 , 24}); - provinces[26] = new Province(26 , 4 , 574 , 414 , 1 , "Aegypten" , new int[] {27 , 25 , 24 , 16}); - - // cID 5 - Asien - provinces[27] = new Province(27 , 5 , 664 , 345 , 2 , "Mittlerer Osten" , new int[] {24 , 26 , 16 , 23 , 31 , 28}); - provinces[28] = new Province(28 , 5 , 784 , 370 , 2 , "Indien" , new int[] {29 , 31 , 27 , 30}); - provinces[29] = new Province(29 , 5 , 863 , 322 , 2 , "China" , new int[] {30 , 28 , 31 , 32 , 33 , 37}); - provinces[30] = new Province(30 , 5 , 867 , 400 , 1 , "Südost Asien" , new int[] {29 , 39 , 28}); - provinces[31] = new Province(31 , 5 , 724 , 262 , 1 , "Afganistan" , new int[] {29 , 28 , 27 , 13 , 32}); - provinces[32] = new Province(32 , 5 , 740 , 163 , 1 , "Ural" , new int[] {29 , 33 , 31 , 13}); - provinces[33] = new Province(33 , 5 , 802 , 128 , 1 , "Sibirien" , new int[] {34 , 35 , 37 , 29 , 32}); - provinces[34] = new Province(34 , 5 , 884 , 82 , 1 , "Jakutien" , new int[] {36 , 35 , 33}); - provinces[35] = new Province(35 , 5 , 867 , 176 , 2 , "Irkutsk" , new int[] {34 , 36 , 37 , 33}); - provinces[36] = new Province(36 , 5 , 973 , 89 , 1 , "Kamtschatka" , new int[] {1 , 38 , 37 , 35 , 34}); - provinces[37] = new Province(37 , 5 , 882 , 243 , 1 , "Mongolei" , new int[] {29 , 33 , 35 , 36 , 38}); - provinces[38] = new Province(38 , 5 , 994 , 249 , 2 , "Japan" , new int[] {37 , 36}); - - // cID 6 - Ozeanien - provinces[39] = new Province(39 , 6 , 889 , 519 , 1 , "Indonesien" , new int[] {30 , 40 , 42}); - provinces[40] = new Province(40 , 6 , 983 , 492 , 2 , "Neuguinea" , new int[] {39 , 41 , 42}); - provinces[41] = new Province(41 , 6 , 1000, 595 , 1 , "Ost Australien" , new int[] {40 , 42}); - provinces[42] = new Province(42 , 6 , 934 , 628 , 1 , "West Australien" , new int[] {40 , 41 , 39}); - - for (int c = 1; c <= provinceCount; c++) - { - addObject(provinces[c],provinces[c].getXPos(),provinces[c].getYPos()); - } - } -} + ~GruenerWal + */ + + // Festlegung der Provinz-Anzahl + + provinces = new Province[provinceCount + 1]; + + // Implementierung sämtlicher Provinzen + // ACHTUNG! Gaaaaanz viel Code! + + // cID 1 - Nordamerika + provinces[1] = new Province( 1 , 1 , 64 , 106 , 1 , "Alaska" , new int[] {2 , 3 , 36}); + provinces[2] = new Province( 2 , 1 , 162 , 106 , 1 , "NW-Territorien" , new int[] {1 , 3 , 4 , 9}); + provinces[3] = new Province( 3 , 1 , 53 , 170 , 1 , "Alberta" , new int[] {1 , 2 , 4 , 5}); + provinces[4] = new Province( 4 , 1 , 223 , 177 , 2 , "Ontario" , new int[] {2 , 3 , 5 , 6 , 7 , 9}); + provinces[5] = new Province( 5 , 1 , 160 , 236 , 2 , "Weststaaten" , new int[] {3 , 4 , 6 , 8}); + provinces[6] = new Province( 6 , 1 , 232 , 273 , 2 , "Oststaaten" , new int[] {4 , 5 , 7 , 8}); + provinces[7] = new Province( 7 , 1 , 300 , 180 , 2 , "Quebec" , new int[] {4 , 6 , 9}); + provinces[8] = new Province( 8 , 1 , 181 , 347 , 1 , "Mittelamerika" , new int[] {5 , 6 , 17}); + provinces[9] = new Province( 9 , 1 , 365 , 55 , 1 , "Groenland" , new int[] {2 , 4 , 7 , 10}); + + // cID 2 - Europa + provinces[10] = new Province(10 , 2 , 454 , 142 , 1 , "Island" , new int[] {9 , 11 , 12}); + provinces[11] = new Province(11 , 2 , 424 , 221 , 2 , "Grossbritannien" , new int[] {10 , 12 , 14 , 15}); + provinces[12] = new Province(12 , 2 , 520 , 153 , 1 , "Skandinavien" , new int[] {10 , 11 , 13 , 14}); + provinces[13] = new Province(13 , 2 , 636 , 180 , 2 , "Russland" , new int[] {12 , 14 , 16 , 27 , 31 , 32}); + provinces[14] = new Province(14 , 2 , 528 , 232 , 2 , "Nordeuropa" , new int[] {11 , 12 , 13 , 15 , 16}); + provinces[15] = new Province(15 , 2 , 449 , 335 , 2 , "Westeuropa" , new int[] {11 , 14 , 16 , 25}); + provinces[16] = new Province(16 , 2 , 537 , 296 , 2 , "Suedeuropa" , new int[] {13 , 14 , 15 , 25 , 26 , 27}); + + // cID 3 - Suedamerika + provinces[17] = new Province(17 , 3 , 245 , 396 , 1 , "Venezuela" , new int[] {8 , 18 , 19}); + provinces[18] = new Province(18 , 3 , 255 , 498 , 1 , "Peru" , new int[] {17 , 19 , 20}); + provinces[19] = new Province(19 , 3 , 327 , 467 , 2 , "Brasilien" , new int[] {17 , 18 , 20 , 25}); + provinces[20] = new Province(20 , 3 , 274 , 572 , 1 , "Argentinien" , new int[] {18 , 19}); + + // cID 4 - Afrika + provinces[21] = new Province(21 , 4 , 680 , 630 , 1 , "Madagaskar" , new int[] {24 , 22}); + provinces[22] = new Province(22 , 4 , 580 , 624 , 1 , "Südafrika" , new int[] {21 , 23 , 24}); + provinces[23] = new Province(23 , 4 , 572 , 537 , 2 , "Zentralafrika" , new int[] {22 , 25 , 24}); + provinces[24] = new Province(24 , 4 , 632 , 500 , 2 , "Ostafrika" , new int[] {21 , 22 , 25 , 23 , 26}); + provinces[25] = new Province(25 , 4 , 491 , 444 , 1 , "Nordafrika" , new int[] {15 , 16 , 26 , 23 , 24}); + provinces[26] = new Province(26 , 4 , 574 , 414 , 1 , "Aegypten" , new int[] {27 , 25 , 24 , 16}); + + // cID 5 - Asien + provinces[27] = new Province(27 , 5 , 664 , 345 , 2 , "Mittlerer Osten" , new int[] {24 , 26 , 16 , 23 , 31 , 28}); + provinces[28] = new Province(28 , 5 , 784 , 370 , 2 , "Indien" , new int[] {29 , 31 , 27 , 30}); + provinces[29] = new Province(29 , 5 , 863 , 322 , 2 , "China" , new int[] {30 , 28 , 31 , 32 , 33 , 37}); + provinces[30] = new Province(30 , 5 , 867 , 400 , 1 , "Südost Asien" , new int[] {29 , 39 , 28}); + provinces[31] = new Province(31 , 5 , 724 , 262 , 1 , "Afganistan" , new int[] {29 , 28 , 27 , 13 , 32}); + provinces[32] = new Province(32 , 5 , 740 , 163 , 1 , "Ural" , new int[] {29 , 33 , 31 , 13}); + provinces[33] = new Province(33 , 5 , 802 , 128 , 1 , "Sibirien" , new int[] {34 , 35 , 37 , 29 , 32}); + provinces[34] = new Province(34 , 5 , 884 , 82 , 1 , "Jakutien" , new int[] {36 , 35 , 33}); + provinces[35] = new Province(35 , 5 , 867 , 176 , 2 , "Irkutsk" , new int[] {34 , 36 , 37 , 33}); + provinces[36] = new Province(36 , 5 , 973 , 89 , 1 , "Kamtschatka" , new int[] {1 , 38 , 37 , 35 , 34}); + provinces[37] = new Province(37 , 5 , 882 , 243 , 1 , "Mongolei" , new int[] {29 , 33 , 35 , 36 , 38}); + provinces[38] = new Province(38 , 5 , 994 , 249 , 2 , "Japan" , new int[] {37 , 36}); + + // cID 6 - Ozeanien + provinces[39] = new Province(39 , 6 , 889 , 519 , 1 , "Indonesien" , new int[] {30 , 40 , 42}); + provinces[40] = new Province(40 , 6 , 983 , 492 , 2 , "Neuguinea" , new int[] {39 , 41 , 42}); + provinces[41] = new Province(41 , 6 , 1000, 595 , 1 , "Ost Australien" , new int[] {40 , 42}); + provinces[42] = new Province(42 , 6 , 934 , 628 , 1 , "West Australien" , new int[] {40 , 41 , 39}); + + initProvinces(); + } +} diff --git a/planung/architektur.md b/planung/architektur.md index 775a38c..7bb1dba 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -1,268 +1,268 @@ -# Architekturplan Zweiundvierzig - -**Letztes Update: 15.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 ü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. - -## Erklärung zur Architektur - -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!** - -### Hinweise - -- 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 - -- **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 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. -``` 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 - -- World für den Spielstart -- *GeneralMap* -- Alle spezifischen Maps - - *Map_World* (gesamte Weltkarte) - -### Actors - -- *Province* -- *Player* - -- *GUI_Interface* - - *Label* - - *Button* - - *Dice* - -- *DicesList* - - *OffenderDices* - - *DefenderDices* - -### Sonstige - -- *Utils* - ---- - -## Spielstart - -Diese *World* hat die Aufgabe, zum einen den Titelbildschirm (mit einem schönen Hintergrundbild, welches später noch optional gezeichnet wird) des Spiels anzeigt, daraufhin ein Menü mit den Möglichkeiten, ein Spiel zu starten oder zu laden (der Button für das Laden eines Speicherstand's bleibt vorerst ohne Funktion, auch optional geplant). Beim Erstellen eines neuen Spiels soll man sowohl die Möglichkeit bekommen, die Eigenschaften der Spieler und die der Map auszuwählen. - -Dies kann entweder in verschiedenen *World*'s gelöst werden, als auch in einer einzelnen. Dies bleibt euch zusammen mit dem Design diesem Menü überlassen. - -Ich schlage euch vor, die bereits von mir erstellen Steuerelemente *Label* und *Button* zu verwenden. Diese sollten die Arbeit für euch wesentlich erleichtern, genauso wie das Schreiben von neuen Steuerelementen, falls ihr bemerken sollte, dass ihr diese öfters braucht als einmal. Diese sollten dann auch selbst von der Oberklasse *GUI_Interface* erben. - ---- - -## GeneralMap - -Alle spezifischen Maps erben von dieser Oberklasse. -Diese Klasse ist für Greenfoot die aktive *World* im laufenden Spiel und auch für die Anzeigen links/rechts/unten verantwortlich. -Die erbenden Unterklassen legen dann das Hintergrundbild, die Provinzen, und weitere spezifische Eigenschaften der Karten dar. -Diese Oberklasse kümmert sich dabei um die Anzeigen, die Spielmechanik und die Speicherung der Spieler und Provinzen. -Auch, wenn diese Klasse einen Konstruktor besitzt, ist dieser nur für die Unterklassen, also für die spezifischen Maps, als Vereinfachung gedacht. - -### Konstruktorparameter - -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. - -#### 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*) - -#### Spielerliste - -Diese Liste soll alle *Player*-Objekte für die Spieler enthalten, welche dann auch als Actor links von der Karte zu sehen sein sollten. - -#### Provinzliste - -Die Provinzliste enthält alle Provinzobjekte, die auf der Karte zu sehen sind. Diese wird erst vom Konstruktor der spezifischen Maps gefüllt. - -### Protected Methoden - -- *void* **addProvinceToMap** ( *Province* province ) - -#### addProvinceToMap() - -Diese Methode soll das Hinzufügen der Provinzen, sowohl in das Array, als auch an die richtige Position auf der *World* übernehmen. Sollte eine Provinz-ID zweimal verwendet werden sollen, wird diese Methode einen Fehler auslösen! - -### Public Methoden - -- *int* **getPlayerCount** () -- *String* **getPlayerName** () -- *String* **getPlayerName** ( *int* playerID ) -- *int* **getPlayerStars** () - -- *int* **getProvinceOwner** ( *int* provinceID ) -- *int[]* **getProvinceOwners** () -- *int* **getProvinceEntityCount** ( *int* playerID ) - -#### getPlayerCount() - -Gibt die Anzahl der im Spiel vorhandenen Spieler aus. - -#### getPlayerName() - -Gibt den Namen des gegebenen Spielers aus. Muss Fehler durch falschen Indexen ausweichen. Falls kein Wert oder ein ungültiger übergeben wird, soll stattdessen der Name des aktuellen Spielers zurückgegeben werden. - -#### getPlayerStars() - -Diese Funktion soll die Anzahl der Sterne des aktuellen Spielers zurückgeben. - -#### getProvinceOwner() - -Gibt die Spieler ID von dem Spieler aus, dem die Provinz gehört. Bei falschen Indexen muss eine -1 (kein Spieler) zurückgegeben werden. - -#### getProvinceOwners() - -Gibt ein Array mit allen Provinzen (deren ID als Indexen) und den Spieler IDs als Wert aus. - -#### getProvinceEntityCount() - -Gibt die Anzahl der Einheiten von einer bestimmten Provinz zurück. Bei falschen Indexen muss eine 0 zurückgegeben werden. - ---- - -## Spezifische Maps -*extends GeneralMap* - -Diese Unterklassen enthalten Informationen wie das Hintergrundbild der jeweiligen Map als auch die Anordnung der Provinzen auf der Map. - -### Konstruktorparameter - -Diese Konstruktorparameter müssen nur zu dieser weitergeleitet werden. Für weitere Informationen bitte bei der *GeneralMap* nachschlagen. - ---- - -## Province -*extends Actor* - -Speichert Informationen zu den einzelnen Provinzen ab und stellt diese später auch als *Actor* dar. - -### 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) - -#### Provinz-ID - -Stellt die ID der Provinz dar. - -#### Kontinent-ID - -Stellt die ID des Kontinentes dar. - -#### Position - -Diese zwei Werte legen fest, wo die sichtbaren Eigenschaften der Provinz angezeigt werden sollen. -Sind nach dem Erstellen der Provinz nicht mehr abrufbar. - -#### Anzeigename - -Dies ist der Name, der auf der Karte und bei Events im Zusammenhang mit dieser Provinz angezeigt wird. - -#### Sterne - -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. - -### Private 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. - -#### Einheitenanzahl - -Diese Eigenschaft speichert, wie viele Einheiten auf diesem Feld stehen (natürlich welche, die dem Besitzer gehören). - -### Public Methoden +# Architekturplan Zweiundvierzig + +**Letztes Update: 15.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 ü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. + +## Erklärung zur Architektur + +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!** + +### Hinweise + +- 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 + +- **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 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. +``` 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 + +- World für den Spielstart +- *GeneralMap* +- Alle spezifischen Maps + - *Map_World* (gesamte Weltkarte) + +### Actors + +- *Province* +- *Player* + +- *GUI_Interface* + - *Label* + - *Button* + - *Dice* + +- *DicesList* + - *OffenderDices* + - *DefenderDices* + +### Sonstige + +- *Utils* + +--- + +## Spielstart + +Diese *World* hat die Aufgabe, zum einen den Titelbildschirm (mit einem schönen Hintergrundbild, welches später noch optional gezeichnet wird) des Spiels anzeigt, daraufhin ein Menü mit den Möglichkeiten, ein Spiel zu starten oder zu laden (der Button für das Laden eines Speicherstand's bleibt vorerst ohne Funktion, auch optional geplant). Beim Erstellen eines neuen Spiels soll man sowohl die Möglichkeit bekommen, die Eigenschaften der Spieler und die der Map auszuwählen. + +Dies kann entweder in verschiedenen *World*'s gelöst werden, als auch in einer einzelnen. Dies bleibt euch zusammen mit dem Design diesem Menü überlassen. + +Ich schlage euch vor, die bereits von mir erstellen Steuerelemente *Label* und *Button* zu verwenden. Diese sollten die Arbeit für euch wesentlich erleichtern, genauso wie das Schreiben von neuen Steuerelementen, falls ihr bemerken sollte, dass ihr diese öfters braucht als einmal. Diese sollten dann auch selbst von der Oberklasse *GUI_Interface* erben. + +--- + +## GeneralMap + +Alle spezifischen Maps erben von dieser Oberklasse. +Diese Klasse ist für Greenfoot die aktive *World* im laufenden Spiel und auch für die Anzeigen links/rechts/unten verantwortlich. +Die erbenden Unterklassen legen dann das Hintergrundbild, die Provinzen, und weitere spezifische Eigenschaften der Karten dar. +Diese Oberklasse kümmert sich dabei um die Anzeigen, die Spielmechanik und die Speicherung der Spieler und Provinzen. +Auch, wenn diese Klasse einen Konstruktor besitzt, ist dieser nur für die Unterklassen, also für die spezifischen Maps, als Vereinfachung gedacht. + +### Konstruktorparameter + +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. + +#### 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*) + +#### Spielerliste + +Diese Liste soll alle *Player*-Objekte für die Spieler enthalten, welche dann auch als Actor links von der Karte zu sehen sein sollten. + +#### Provinzliste + +Die Provinzliste enthält alle Provinzobjekte, die auf der Karte zu sehen sind. Diese wird erst vom Konstruktor der spezifischen Maps gefüllt. + +### Protected Methoden + +- *void* **initProvinces** () + +#### initProvinces() + +Diese Methode soll das Hinzufügen der Provinzen an die richtige Position auf der *World* übernehmen (nicht ins Array). Diese Methode sucht sich alle Provinzen aus dem Array *Province[]* **provinces**. + +### Public Methoden + +- *int* **getPlayerCount** () +- *String* **getPlayerName** () +- *String* **getPlayerName** ( *int* playerID ) +- *int* **getPlayerStars** () + +- *int* **getProvinceOwner** ( *int* provinceID ) +- *int[]* **getProvinceOwners** () +- *int* **getProvinceEntityCount** ( *int* playerID ) + +#### getPlayerCount() + +Gibt die Anzahl der im Spiel vorhandenen Spieler aus. + +#### getPlayerName() + +Gibt den Namen des gegebenen Spielers aus. Muss Fehler durch falschen Indexen ausweichen. Falls kein Wert oder ein ungültiger übergeben wird, soll stattdessen der Name des aktuellen Spielers zurückgegeben werden. + +#### getPlayerStars() + +Diese Funktion soll die Anzahl der Sterne des aktuellen Spielers zurückgeben. + +#### getProvinceOwner() + +Gibt die Spieler ID von dem Spieler aus, dem die Provinz gehört. Bei falschen Indexen muss eine -1 (kein Spieler) zurückgegeben werden. + +#### getProvinceOwners() + +Gibt ein Array mit allen Provinzen (deren ID als Indexen) und den Spieler IDs als Wert aus. + +#### getProvinceEntityCount() + +Gibt die Anzahl der Einheiten von einer bestimmten Provinz zurück. Bei falschen Indexen muss eine 0 zurückgegeben werden. + +--- + +## Spezifische Maps +*extends GeneralMap* + +Diese Unterklassen enthalten Informationen wie das Hintergrundbild der jeweiligen Map als auch die Anordnung der Provinzen auf der Map. + +### Konstruktorparameter + +Diese Konstruktorparameter müssen nur zu dieser weitergeleitet werden. Für weitere Informationen bitte bei der *GeneralMap* nachschlagen. + +--- + +## Province +*extends Actor* + +Speichert Informationen zu den einzelnen Provinzen ab und stellt diese später auch als *Actor* dar. + +### 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) + +#### Provinz-ID + +Stellt die ID der Provinz dar. + +#### Kontinent-ID + +Stellt die ID des Kontinentes dar. + +#### Position + +Diese zwei Werte legen fest, wo die sichtbaren Eigenschaften der Provinz angezeigt werden sollen. +Sind nach dem Erstellen der Provinz nicht mehr abrufbar. + +#### Anzeigename + +Dies ist der Name, der auf der Karte und bei Events im Zusammenhang mit dieser Provinz angezeigt wird. + +#### Sterne + +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. + +### Private 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. + +#### Einheitenanzahl + +Diese Eigenschaft speichert, wie viele Einheiten auf diesem Feld stehen (natürlich welche, die dem Besitzer gehören). + +### Public Methoden - *int* **getXPos** () -- *int* **getYPos** () -- *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) - -- *boolean* **hasClicked** () - +- *int* **getYPos** () +- *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) + +- *boolean* **hasClicked** () + - *void* **redrawProvince** () #### getXPos() @@ -271,609 +271,609 @@ Gibt die in der Provinz hinterlegte X-Position zurück. #### getYPos() -Gibt die in der Provinz hinterlegte Y-Position zurück. - -#### 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. - -#### 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. - -#### hasClicked() - -Gibt zurück, ob seid dem letzten Aufruf dieser Methode diese Provinz von der Maus angeklickt wurde. - -#### redrawProvince() - -Wird von der Karte oder von internen Methoden aufgerurfen, um alle sichtbaren Eigenschaften erneut zu zeichnen. - ---- - -## Player -*extends Actor* - -Stellt die Spieler da, speichert Informationen zu diesen ab. - -### Konstruktorparameter - -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 dar. - -#### Anzeigename - -Ist der lesbare Name des Spielers, damit nicht nur "Spieler 1", ... usw. zu sehen ist. - -#### "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. - -#### Statistik - -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: - -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) - -### Public Methoden - -- *int* **getID** () -- *String* **getDisplayName** () - -- *int* **getStars** () -- *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* 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. - -Diese Methode muss zwingend mit der Welt interagieren, um diese Informationen zu bekommen. - -#### getProvinceCount() - -Gibt die Anzahl der Provinzen, die der Spieler hat, zurück. Gut für die Statistik und die Anzeigen. - -#### redrawPlayer() - -Erzwingt das erneute Zeichnen des Player Objekts, um alle sichtbaren Eigenschaften erneut zu zeichnen. - ---- - -## DicesList -*extends Actor* - -Erstellt die gegebene Anzahl an Würfeln nebeneinander und bietet die gemeinsame Verwaltung dieser. Diese Klasse ist nur als *abstract* Oberklasse zu *OffenderDices* & *DefenderDices* gedacht und ist daher selbst nicht verwendbar, dennoch sich hier alle Methoden, die ihr braucht, definiert. Die Unterklassen legen nur die Farbe der Würfel und die maximale Anzahl fest. - -### Verwendung - -Nachdem ihr euch für eine Unterklasse entschieden habt, erstellt ihr eine neue Instanz von dieser und übergibt ihr die Anzahl der Würfel, die ihr darstellen wollt (diese Zahl kann größer als die erlaubte Anzahl an Würfel sein, dies wird **automatisch korrigiert**, beim Angreifer auf 3, beim Verteidiger auf 2). Bei zu kleinen Zahlen wird auf 1 korrigiert. -```java -DicesList offenders = new OffenderDices(5); // Wird korrigiert auf '3' -DicesList defenders = new DefenderDices(-3); // Wird korrigiert auf '1' -``` -Die nun erstellte Instanz solltet ihr einer Welt hinzufügen, um die Würfel sehen zu können. Achtet dabei auf die Position, die ihr der Welt übergibt. -```java -addObject(offenders,200,800); -``` -Nun könnt ihr mit den Methoden **getNumbers** und **roll** alle Würfel parallel steuern. -```java -int[] zahlenAng = offenders.roll(); -int[] zahlenVer = defenders.getNumbers(); -if(zahlenAng[1] > zahlenVer[1]) { - // Angreifer gewinnt -} else { - // Verteidiger gewinnt -} -``` -Solltet ihr die Würfel nicht mehr brauchen und ihr möchtet sie entfernen, reicht ein simpler Aufruf von **removeAll**. -```java -offenders.removeAll(); -offenders = null; // muss nicht sein, gehört aber zum sauberen Programmieren dazu -``` - -### Konstruktorparameter - -1. Anzahl der Würfel als *int* (Weiterleitung des Konstruktors von den Unterklassen) -2. Maximale Anzahl als *int* (fester Wert der Unterklasse) -3. Hintergundfarbe als *java.awt.Color* (fester Wert der Unterklasse) -4. Vordergrundfarbe als *java.awt.Color* (fester Wert der Unterklasse) - -### Protected Methoden - -- *void* **addedToWorld** ( *World* world ) - -#### addedToWorld() - -Diese Methode wird von Greenfoot selbst aufgerufen, sobald dieser Actor einer Welt hinzugefügt wurde und kümmert sich folgend darum, seine eigenen Würfel auch der Welt hinzuzufügen an derselben Position. - -### Public Methoden - -- *int[]* **getNumbers** () -- *int[]* **roll** () - -- *void* **removeAll** () - -#### getNumbers() - -Gibt die Augenzahlen aller Würfel in sortierter Reihenfolge (absteigend) aus. - -#### roll() - -Würfelt alle Würfel erneut und gibt die neuen Augenzahlen in sortierter Reihenfolge (absteigend) aus. - -#### removeAll() - -Entfernt alle Würfel aus ihrer Welt und löscht anschließend die Liste. Die Instanz ist danach nicht mehr zu verwenden. - -## OffendersDices -*extends DicesList* - -Erstellt eine Liste von Würfeln mit roter Hintergrundfarbe. Es sind maximal 3 Würfel erlaubt. Zur Verwendung, siehe *DicesList*. - -### Konstruktorparamter - -1. Anzahl der Würfel als *int* (wird korrigiert; siehe *DicesList*-Konstruktor) - -## DefenderDices -*extends DicesList* - -Erstellt eine Liste von Würfeln mit schwarzer Hintergrundfarbe. Es sind maximal 2 Würfel erlaubt. Zur Verwendung, siehe *DicesList*. - -### Konstruktorparamter - -1. Anzahl der Würfel als *int* (wird korrigiert; siehe *DicesList*-Konstruktor) - ---- - -## GUI_Interface -*extends Actor* - -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 -*extends GUI_Interface* - -Zeigt einen Text auf dem Bildschirm an. Zuvor wurde dieses Objekt "Text" genannt, "Label" ist der fachlichere Ausdruck dafür. - -### Konstruktorparameter - -0. Anzeigetext als *String* -0. Textgröße als *int* - -#### 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. - -### 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* - -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: - -Methode 1: -1. Anzeigetext als *String* -2. Textgröße als *int* - -Methode 2: -1. EventHandler als *ButtonEvent* - -Methode 3: -1. Anzeigetext als *String* -2. Textgröße als *int* -3. 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. - ---- - -## Dice -*extends GUI_Interface* - -### Konstruktorparameter - -Methode 1: **keine Parameter** - -Methode 2: -1. Startwert für die gespeicherte Augenzahl als *int* - -#### Startwert - -Dieser Wert wird im Voraus beim Dice hinterlegt, damit er diese direkt anzeigen kann. Wird dieser Wert nicht angegeben, wird als Augenzahl **0** hinterlegt, stehend für: noch nicht gewürfelt. - -### Private Eigenschaften - -- Augenzahl - -#### Augenzahl - -Der Wert, der beim letzten Würfeln gewürfelt wurde. Dieser Wert wird vom Würfel auch visuell dargestellt. - -### Public Methoden - -- *int* **getNumber** () - -- *void* **setSizeAsSquare** ( *int* length ) - -- *int* **roll** () - -- *void* **redraw** () - -#### getNumber() - -Gibt die aktuell gespeicherte und somit auch visuell sichtbare Augenzahl zurück. - -#### setSizeAsSquare() - -Legt die Größe des Würfels als Quadraht fest. Nur beim Verhältnis 1:1 von Länge:Breite kann eine verzerrungsfreie Darstellung garantiert werden. Vergleichbar mit folgender Zeile: -```java -dice.setSize(length,length) -``` - -#### roll() - -Würfelt den Würfel, speichert die neue Augenzahl ab und erneurt die visuelle Darstellung des Dice. - -#### redraw() - -Erneuert die visuelle Darstellung des Dice. - ---- - -## 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. Alle Methoden dieser Klasse sollen *public* und *static* sein. - -### Static Methoden - -- *boolean[]* **copyArray** ( *boolean[]* array ) -- *int[]* **copyArray** ( *int[]* array ) -- *String[]* **copyArray** ( *String[]* array ) - -- *void* **drawInsideRectangle** ( *GreenfootImage* i, *Color* c, *int* b ) - -- *void* **sortDesc** ( **int[]** array ) - -#### copyArray() - -Kopiert ein Array des Types *boolean*, *int* oder *String* mit identischer Größe. - -#### 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. - -#### sortDesc() - +Gibt die in der Provinz hinterlegte Y-Position zurück. + +#### 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. + +#### 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. + +#### hasClicked() + +Gibt zurück, ob seid dem letzten Aufruf dieser Methode diese Provinz von der Maus angeklickt wurde. + +#### redrawProvince() + +Wird von der Karte oder von internen Methoden aufgerurfen, um alle sichtbaren Eigenschaften erneut zu zeichnen. + +--- + +## Player +*extends Actor* + +Stellt die Spieler da, speichert Informationen zu diesen ab. + +### Konstruktorparameter + +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 dar. + +#### Anzeigename + +Ist der lesbare Name des Spielers, damit nicht nur "Spieler 1", ... usw. zu sehen ist. + +#### "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. + +#### Statistik + +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: + +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) + +### Public Methoden + +- *int* **getID** () +- *String* **getDisplayName** () + +- *int* **getStars** () +- *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* 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. + +Diese Methode muss zwingend mit der Welt interagieren, um diese Informationen zu bekommen. + +#### getProvinceCount() + +Gibt die Anzahl der Provinzen, die der Spieler hat, zurück. Gut für die Statistik und die Anzeigen. + +#### redrawPlayer() + +Erzwingt das erneute Zeichnen des Player Objekts, um alle sichtbaren Eigenschaften erneut zu zeichnen. + +--- + +## DicesList +*extends Actor* + +Erstellt die gegebene Anzahl an Würfeln nebeneinander und bietet die gemeinsame Verwaltung dieser. Diese Klasse ist nur als *abstract* Oberklasse zu *OffenderDices* & *DefenderDices* gedacht und ist daher selbst nicht verwendbar, dennoch sich hier alle Methoden, die ihr braucht, definiert. Die Unterklassen legen nur die Farbe der Würfel und die maximale Anzahl fest. + +### Verwendung + +Nachdem ihr euch für eine Unterklasse entschieden habt, erstellt ihr eine neue Instanz von dieser und übergibt ihr die Anzahl der Würfel, die ihr darstellen wollt (diese Zahl kann größer als die erlaubte Anzahl an Würfel sein, dies wird **automatisch korrigiert**, beim Angreifer auf 3, beim Verteidiger auf 2). Bei zu kleinen Zahlen wird auf 1 korrigiert. +```java +DicesList offenders = new OffenderDices(5); // Wird korrigiert auf '3' +DicesList defenders = new DefenderDices(-3); // Wird korrigiert auf '1' +``` +Die nun erstellte Instanz solltet ihr einer Welt hinzufügen, um die Würfel sehen zu können. Achtet dabei auf die Position, die ihr der Welt übergibt. +```java +addObject(offenders,200,800); +``` +Nun könnt ihr mit den Methoden **getNumbers** und **roll** alle Würfel parallel steuern. +```java +int[] zahlenAng = offenders.roll(); +int[] zahlenVer = defenders.getNumbers(); +if(zahlenAng[1] > zahlenVer[1]) { + // Angreifer gewinnt +} else { + // Verteidiger gewinnt +} +``` +Solltet ihr die Würfel nicht mehr brauchen und ihr möchtet sie entfernen, reicht ein simpler Aufruf von **removeAll**. +```java +offenders.removeAll(); +offenders = null; // muss nicht sein, gehört aber zum sauberen Programmieren dazu +``` + +### Konstruktorparameter + +1. Anzahl der Würfel als *int* (Weiterleitung des Konstruktors von den Unterklassen) +2. Maximale Anzahl als *int* (fester Wert der Unterklasse) +3. Hintergundfarbe als *java.awt.Color* (fester Wert der Unterklasse) +4. Vordergrundfarbe als *java.awt.Color* (fester Wert der Unterklasse) + +### Protected Methoden + +- *void* **addedToWorld** ( *World* world ) + +#### addedToWorld() + +Diese Methode wird von Greenfoot selbst aufgerufen, sobald dieser Actor einer Welt hinzugefügt wurde und kümmert sich folgend darum, seine eigenen Würfel auch der Welt hinzuzufügen an derselben Position. + +### Public Methoden + +- *int[]* **getNumbers** () +- *int[]* **roll** () + +- *void* **removeAll** () + +#### getNumbers() + +Gibt die Augenzahlen aller Würfel in sortierter Reihenfolge (absteigend) aus. + +#### roll() + +Würfelt alle Würfel erneut und gibt die neuen Augenzahlen in sortierter Reihenfolge (absteigend) aus. + +#### removeAll() + +Entfernt alle Würfel aus ihrer Welt und löscht anschließend die Liste. Die Instanz ist danach nicht mehr zu verwenden. + +## OffendersDices +*extends DicesList* + +Erstellt eine Liste von Würfeln mit roter Hintergrundfarbe. Es sind maximal 3 Würfel erlaubt. Zur Verwendung, siehe *DicesList*. + +### Konstruktorparamter + +1. Anzahl der Würfel als *int* (wird korrigiert; siehe *DicesList*-Konstruktor) + +## DefenderDices +*extends DicesList* + +Erstellt eine Liste von Würfeln mit schwarzer Hintergrundfarbe. Es sind maximal 2 Würfel erlaubt. Zur Verwendung, siehe *DicesList*. + +### Konstruktorparamter + +1. Anzahl der Würfel als *int* (wird korrigiert; siehe *DicesList*-Konstruktor) + +--- + +## GUI_Interface +*extends Actor* + +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 +*extends GUI_Interface* + +Zeigt einen Text auf dem Bildschirm an. Zuvor wurde dieses Objekt "Text" genannt, "Label" ist der fachlichere Ausdruck dafür. + +### Konstruktorparameter + +0. Anzeigetext als *String* +0. Textgröße als *int* + +#### 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. + +### 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* + +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: + +Methode 1: +1. Anzeigetext als *String* +2. Textgröße als *int* + +Methode 2: +1. EventHandler als *ButtonEvent* + +Methode 3: +1. Anzeigetext als *String* +2. Textgröße als *int* +3. 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. + +--- + +## Dice +*extends GUI_Interface* + +### Konstruktorparameter + +Methode 1: **keine Parameter** + +Methode 2: +1. Startwert für die gespeicherte Augenzahl als *int* + +#### Startwert + +Dieser Wert wird im Voraus beim Dice hinterlegt, damit er diese direkt anzeigen kann. Wird dieser Wert nicht angegeben, wird als Augenzahl **0** hinterlegt, stehend für: noch nicht gewürfelt. + +### Private Eigenschaften + +- Augenzahl + +#### Augenzahl + +Der Wert, der beim letzten Würfeln gewürfelt wurde. Dieser Wert wird vom Würfel auch visuell dargestellt. + +### Public Methoden + +- *int* **getNumber** () + +- *void* **setSizeAsSquare** ( *int* length ) + +- *int* **roll** () + +- *void* **redraw** () + +#### getNumber() + +Gibt die aktuell gespeicherte und somit auch visuell sichtbare Augenzahl zurück. + +#### setSizeAsSquare() + +Legt die Größe des Würfels als Quadraht fest. Nur beim Verhältnis 1:1 von Länge:Breite kann eine verzerrungsfreie Darstellung garantiert werden. Vergleichbar mit folgender Zeile: +```java +dice.setSize(length,length) +``` + +#### roll() + +Würfelt den Würfel, speichert die neue Augenzahl ab und erneurt die visuelle Darstellung des Dice. + +#### redraw() + +Erneuert die visuelle Darstellung des Dice. + +--- + +## 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. Alle Methoden dieser Klasse sollen *public* und *static* sein. + +### Static Methoden + +- *boolean[]* **copyArray** ( *boolean[]* array ) +- *int[]* **copyArray** ( *int[]* array ) +- *String[]* **copyArray** ( *String[]* array ) + +- *void* **drawInsideRectangle** ( *GreenfootImage* i, *Color* c, *int* b ) + +- *void* **sortDesc** ( **int[]** array ) + +#### copyArray() + +Kopiert ein Array des Types *boolean*, *int* oder *String* mit identischer Größe. + +#### 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. + +#### sortDesc() + Sortiert ein *int[]*-Array absteigend. \ No newline at end of file diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index a5b91ce..5e63337 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -1,165 +1,165 @@ -# Funktionsliste Zweiundvierzig - -**Letztes Update: 15.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 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 verwenden, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt. - -## GeneralMap (extends World) - -- *GeneralMap* ( *String* backgroundImage, *String[]* playerList, *int[]* colorList ) - -- protected *void* **addProvinceToMap** ( *Province* province ) - -- *int* **getPlayerCount** () -- *String* **getPlayerName** () -- *String* **getPlayerName** ( *int* playerID ) -- *int* **getPlayerStars** () - -- *int* **getProvinceOwner** ( *int* provinceID ) -- *int[]* **getProvinceOwners** () -- *int* **getProvinceEntityCount** ( *int* playerID ) - -## Province (extends Actor) - -- *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces ) +# Funktionsliste Zweiundvierzig + +**Letztes Update: 15.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 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 verwenden, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt. + +## GeneralMap (extends World) + +- *GeneralMap* ( *String* backgroundImage, *String[]* playerList, *int[]* colorList ) + +- protected *void* **initProvinces** () + +- *int* **getPlayerCount** () +- *String* **getPlayerName** () +- *String* **getPlayerName** ( *int* playerID ) +- *int* **getPlayerStars** () + +- *int* **getProvinceOwner** ( *int* provinceID ) +- *int[]* **getProvinceOwners** () +- *int* **getProvinceEntityCount** ( *int* playerID ) + +## Province (extends Actor) + +- *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces ) - *int* **getXPos** () -- *int* **getYPos** () -- *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) - -- *boolean* **hasClicked** () - -- *void* **redrawProvince** () - -## Player (extends Actor) - -- *Player* ( *int* playerID, *String* displayName, *int* playerColor ) - -- *int* **getID** () -- *String* **getDisplayName** () - -- *int* **getStars** () -- *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* addedEntities ) - - *void* **lostEntity** () - -- *boolean[]* **getMyProvinces** () -- *int* **getProvinceCount** () -- *void* **redrawPlayer** () - -## DicesList (extends Actor) - -- *DicesList* ( *int* count, *int* maxCount, *java.awt.Color* backColor, *java.awt.Color* foreColor ) - -- *int[]* **getNumbers** () -- *int[]* **roll** () - -- *void* **removeAll** () - -## OffenderDices (extends Actor) - -- *OffenderDices* ( *int* count ) - -## DefenderDices (extends Actor) - -- *DefenderDices* ( *int* count ) - -## GUI_Interface (extends Actor) - -- protected *int* **sx** -- protected *int* **sy** - -- *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) - -- abstract *void* **redraw** () - -## Label (extends GUI_Interface) - -- *Label* ( *String* text, *int* textSize ) - -- *boolean* **getAutoSize** () -- *void* **setAutoSize** ( *boolean* newValue ) -- *int* **getTextSize** () -- *boolean* **setTextSize** ( *int* newSize ) -- *String* **getText** () -- *boolean* **setText** ( *String* newText ) - -- *void* **redraw** () - -## Button (extends GUI_Interface) - -- *Button* ( *String* text, *int* textSize ) -- *Button* ( *ButtonEvent* eventHandler ) -- *Button* ( *String* text, *int* textSize, *ButtonEvent* eventHandler ) - -- *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** () - -## Dice (extends GUI_Interface) - -- *Dice* () -- *Dice* ( *int* startNumber ) - -- *int* **getNumber** () - -- *void* **setSizeAsSquare** ( *int* length ) - -- *int* **roll** () - -- *void* **redraw** () - -## Utils - -- static *boolean[]* **copyArray** ( *boolean[]* array ) -- static *int[]* **copyArray** ( *int[]* array ) -- static *String[]* **copyArray** ( *String[]* array ) - -- static *void* **drawInsideRectangle** ( *GreenfootImage* i, *Color* c, *int* b ) - +- *int* **getYPos** () +- *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) + +- *boolean* **hasClicked** () + +- *void* **redrawProvince** () + +## Player (extends Actor) + +- *Player* ( *int* playerID, *String* displayName, *int* playerColor ) + +- *int* **getID** () +- *String* **getDisplayName** () + +- *int* **getStars** () +- *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* addedEntities ) + - *void* **lostEntity** () + +- *boolean[]* **getMyProvinces** () +- *int* **getProvinceCount** () +- *void* **redrawPlayer** () + +## DicesList (extends Actor) + +- *DicesList* ( *int* count, *int* maxCount, *java.awt.Color* backColor, *java.awt.Color* foreColor ) + +- *int[]* **getNumbers** () +- *int[]* **roll** () + +- *void* **removeAll** () + +## OffenderDices (extends Actor) + +- *OffenderDices* ( *int* count ) + +## DefenderDices (extends Actor) + +- *DefenderDices* ( *int* count ) + +## GUI_Interface (extends Actor) + +- protected *int* **sx** +- protected *int* **sy** + +- *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) + +- abstract *void* **redraw** () + +## Label (extends GUI_Interface) + +- *Label* ( *String* text, *int* textSize ) + +- *boolean* **getAutoSize** () +- *void* **setAutoSize** ( *boolean* newValue ) +- *int* **getTextSize** () +- *boolean* **setTextSize** ( *int* newSize ) +- *String* **getText** () +- *boolean* **setText** ( *String* newText ) + +- *void* **redraw** () + +## Button (extends GUI_Interface) + +- *Button* ( *String* text, *int* textSize ) +- *Button* ( *ButtonEvent* eventHandler ) +- *Button* ( *String* text, *int* textSize, *ButtonEvent* eventHandler ) + +- *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** () + +## Dice (extends GUI_Interface) + +- *Dice* () +- *Dice* ( *int* startNumber ) + +- *int* **getNumber** () + +- *void* **setSizeAsSquare** ( *int* length ) + +- *int* **roll** () + +- *void* **redraw** () + +## Utils + +- static *boolean[]* **copyArray** ( *boolean[]* array ) +- static *int[]* **copyArray** ( *int[]* array ) +- static *String[]* **copyArray** ( *String[]* array ) + +- static *void* **drawInsideRectangle** ( *GreenfootImage* i, *Color* c, *int* b ) + - static *void* **sortDesc** ( **int[]** array ) \ No newline at end of file From aa59110993cc7a0b2b99cad303d8517c47393b0a Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 21:13:57 +0200 Subject: [PATCH 5/6] =?UTF-8?q?Fehlerbehebungen=20Offset=20-=20SCALE=5FVAL?= =?UTF-8?q?UE=20ist=20nun=20eine=20Kommazahl=20als=20double,=20dies=20hat?= =?UTF-8?q?=20sich=20eher=20angeboten,=20um=20Fehler=20zu=20vermeiden=20-?= =?UTF-8?q?=20**getX**=20und=20**getY**=20waren=20hierf=C3=BCr=20die=20fal?= =?UTF-8?q?schen=20Methoden=20zum=20Abfragen=20der=20hinterlegten=20Positi?= =?UTF-8?q?on=20(sie=20geben=20n=C3=A4mlich=20die=20aktuelle=20Position=20?= =?UTF-8?q?des=20Actors=20zur=C3=BCck,=20was=20bisher=20noch=20nicht=20geh?= =?UTF-8?q?t=20an=20dieser=20Stelle,=20da=20die=20Provinzen=20noch=20nicht?= =?UTF-8?q?=20einer=20Welt=20hinzugef=C3=BCgt=20wurden)=20-=20Expliziter?= =?UTF-8?q?=20Cast=20f=C3=BCr=20das=20Umwandeln=20in=20die=20verschiedenen?= =?UTF-8?q?=20Typen=20fehlte=20noch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeneralMap.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/GeneralMap.java b/GeneralMap.java index 707becf..9fca0a4 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -1,4 +1,5 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.lang.Math; /** Oberklasse für verschiedene Maps; @@ -20,11 +21,9 @@ public abstract class GeneralMap extends World /* Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert. Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist. - Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 8000 einzutragen. - - Die vorherige Erhöhung des Skalars ist mit der höheren Genauigkeit bei der Arbeit mit dem int-Basistyp zu erklären. + Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen. */ - private final int SCALE_VALUE = 10000; // SCALE_VALUE/10000 wird verwendet + private final double SCALE_VALUE = 0.8; protected Province[] provinces; protected Player[] players; @@ -52,11 +51,10 @@ public abstract class GeneralMap extends World protected void initProvinces() { for(int i = 1; i < provinces.length; i++) { Province p = provinces[i]; - int s = SCALE_VALUE/10000; - int x = p.getX(); - int y = p.getY(); - x = (x * s) + X_OFFSET; - y = (y * s) + y_OFFSET; + int x = p.getXPos(); + int y = p.getYPos(); + x = ((int) Math.floor(x * SCALE_VALUE)) + X_OFFSET; + y = ((int) Math.floor(y * SCALE_VALUE)) + Y_OFFSET; addObject(p,x,y); } } From a6ce6e63258e072a39ba28cbbedb0babd50bf292 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sun, 19 Jun 2016 21:18:27 +0200 Subject: [PATCH 6/6] =?UTF-8?q?Abschluss=20der=20Arbeiten=20an=20dem=20Off?= =?UTF-8?q?set=20-=20**SCALE=5FVALUE**=20wurde=20wieder=20auf=201=20erh?= =?UTF-8?q?=C3=B6ht=20-=20In=20der=20Methode=20**initProvinces**=20wurden?= =?UTF-8?q?=20die=20Befehle=20nun=20so=20kompakt=20und=20performant=20wie?= =?UTF-8?q?=20m=C3=B6glich=20gestaltet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeneralMap.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/GeneralMap.java b/GeneralMap.java index 9fca0a4..28de775 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -23,7 +23,7 @@ public abstract class GeneralMap extends World Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist. Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen. */ - private final double SCALE_VALUE = 0.8; + private final double SCALE_VALUE = 1; protected Province[] provinces; protected Player[] players; @@ -50,12 +50,7 @@ public abstract class GeneralMap extends World */ protected void initProvinces() { for(int i = 1; i < provinces.length; i++) { - Province p = provinces[i]; - int x = p.getXPos(); - int y = p.getYPos(); - x = ((int) Math.floor(x * SCALE_VALUE)) + X_OFFSET; - y = ((int) Math.floor(y * SCALE_VALUE)) + Y_OFFSET; - addObject(p,x,y); + addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET); } }