From ac59341638ae1cff54d54a1fd5040fd4b7440d75 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 18 Apr 2016 19:30:09 +0200 Subject: [PATCH] =?UTF-8?q?Anpassung=20Architektur=20und=20Provice-Class?= =?UTF-8?q?=20Umsortierung=20der=20Parameter=20des=20Konstruktors=20Umbene?= =?UTF-8?q?nnung=20der=20Methoden=20Hinzuf=C3=BCgen=20der=20(nach=20der=20?= =?UTF-8?q?Architektur=20nach)=20fehlenden=20Methoden=20=C3=9Cberpr=C3=BCf?= =?UTF-8?q?ung=20der=20Argumente=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Province.java | 103 +++++++++++++++++++++++++++++--------- Utils.java | 34 +++++++++++++ planung/architektur.md | 42 +++++++++++----- planung/funktionsliste.md | 4 +- 4 files changed, 144 insertions(+), 39 deletions(-) create mode 100644 Utils.java diff --git a/Province.java b/Province.java index d8dc8fd..368aad7 100644 --- a/Province.java +++ b/Province.java @@ -4,7 +4,7 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) * Write a description of class Province here. * * @author GruenerWal - * @version 0.0.1 + * @version 0.0.2 */ public class Province extends Actor { @@ -14,6 +14,9 @@ public class Province extends Actor private int owner; private boolean[] nextProvinces; private int continentID; + private int xPos; + private int yPos; + private int eCount; /** * leere Act-Methode @@ -24,70 +27,120 @@ public class Province extends Actor // GruenerWal war hier :3 } - // Konstruktor, benötigt Sterne - public Province(int i1, int i2, int i3, String s1, int[] ia1) + // Haupt-Konstruktor + public Province(int pID, int cID, int x, int y, int st, String s1, int[] ia1) { - provinceID = i1; - continentID = i2; - stars = i3; + provinceID = pID; + continentID = cID; + xPos = x; + yPos = y; + if(st > 0) { + stars = st; + } displayName = s1; // Der Teil, der sich um die Konvertierung des int-Array in ein boolean-Array kümmert. int maxNum = 0; - for(int i = 0; i < ia1.length(); i++) { + for(int i = 0; i >= ia1.length(); i++) { if(maxNum < ia1[i]) { maxNum = ia1[i]; } } nextProvinces = new boolean[ia1.length]; - for(int i = 0; i < ia1.length(); i++) { + for(int i = 0; i >= ia1.length(); i++) { if(ia1[i] >= 0) { nextProvinces = ia1[i]; } } } - // Liefert die Sterne als Integer - public int getStars() + // Zweiter Konstruktor, um auch das boolean-Array gegebenenfalls verwenden zu könnnen. + public Province(int pID, int cID, int x, int y, int st, String s1, boolean[] ba1) { - return stars; + provinceID = pID; + continentID = cID; + xPos = x; + yPos = y; + if(st > 0) { + stars = st; + } + displayName = s1; + nextProvinces = Utils.copyArray(ba1); } // Liefert die Provinz-ID als Integer - public int getProvinceID() + public int getID() { return provinceID; } + // Liefert die Kontinent-ID als Integer + public int getContinentID() + { + return continentID; + } + + // Fragt ab, ob die angegebene Provinz in der Nähe von dieser liegt. + public boolean isProvinceNear(int i) { + if(i >= nextProvinces.length()) { + return false; + } + return nearProvinces[i]; + } + // Liefert den Anzeigenamen als String public String getDisplayName() { return displayName; } + // Liefert die Sterne als Integer + public int getStars() + { + return stars; + } + // Liefert den Owner als String public int getOwner() { return owner; } - // Fragt ab, ob die angegebene Provinz in der Nähe von dieser liegt. - public boolean isProvinceNear(int i) { - if(i >= nextProvinces.length()) { - return false; + // Setzt den Owner, benötigt String + public void setOwner(int o) + { + if(o < -1) { + o = -1; } - return nearProvinces[i]; + owner = o; } - // Liefert die Kontinent-ID als Integer - public int getContinentID() - { - return continentID; + public int getEntityCount() { + return eCount; } - // Setzt den Owner, benötigt String - public void setOwner(int o) - { - owner = o; + private void checkEntityCount() { + if(eCount < 0) { + eCount = 0; + } + } + + public int addToEntities(int a) { + eCount = eCount + a; + checkEntityCount(); + } + + public int removeFromEntities(int a) { + eCount = eCount - a; + checkEntityCount(); + } + + public int setEntityCount(int a) { + eCount = a; + checkEntityCount(); + } + + public void redrawProvince() { + //Platzhalter } } diff --git a/Utils.java b/Utils.java new file mode 100644 index 0000000..1866213 --- /dev/null +++ b/Utils.java @@ -0,0 +1,34 @@ +import greenfoot.*; + +/** + * Diese Klasse enthält nur statische Funktionen, welche für euch als Unterstützung gedacht sind. Damit könnt ihr dann hoffentlich viele Code-Zeilen sparen. :) + * + * @author Zocker1999_NET + * @version 1 + */ +public final class Utils { + + //Kopiert ein Array eines (annäherend) beliebigen Types. + public static boolean[] copyArray(boolean[] a) { + boolean[] b = new boolean[a.length()]; + for(int i = 0; i >= a.length(); i++) { + b[i] = a[i]; + } + return b; + } + public static int[] copyArray(int[] a) { + int[] b = new int[a.length()]; + for(int i = 0; i >= a.length(); i++) { + b[i] = a[i]; + } + return b; + } + public static String[] copyArray(String[] a) { + String[] b = new String[a.length()]; + for(int i = 0; i >= a.length(); i++) { + b[i] = a[i]; + } + return b; + } + +} \ No newline at end of file diff --git a/planung/architektur.md b/planung/architektur.md index 1869653..0a321bc 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -34,6 +34,8 @@ Die englischen Begriffe *World* und *Actor* stehen für die gegebenen Oberklasse return (GeneralMap) super.getWorld(); } +- Schaut bitte in die *Utils*-Klasse hinein, diese kann euch den Code übersichtlicher gestalten, da häufige Methoden in dieser gebündelt werden sollen. + ### Explizite Eigenschaften Explizite Eigenschaften sind speziell Eigenschaften, die von der Klasse selbst gehalten werden und bevorzugt auch nur von ihr festgehalten werden. @@ -70,7 +72,7 @@ Der Spieler kann mithilfe der Welt dann herausfinden, welche Provinzen ihm gehö ### Sonstige -Noch keine geplant. +- *Utils* --- @@ -180,30 +182,24 @@ Speichert Informationen zu den einzelnen Provinzen ab und stellt diese später a ### Explizite Eigenschaften - Provinznummer (über Konstruktor festgelegt, **int**) +- Kontinentnummer (über Konstruktor festgelegt, **int**) - X/Y-Position auf der Karte (über Konstruktor festgelegt; **int**,**int**) -- Angrenzende Provinzen (über Konstruktor festgelegt, **boolean[]**) - Anzeigename (über Konstruktor festgelegt, **String**) - Sterne (über Konstruktor festgelegt, **int**) +- Angrenzende Provinzen (über Konstruktor als **int[]** festgelegt, als **boolean[]** gespeichert) - Besitzer - Einheitenanzahl -#### Provinznummer +#### Provinz-ID und Kontinent-ID -Stellt die ID der Provinz dar und ist mit **int getID()** abrufbar. +- Stellt die ID der Provinz dar und ist mit **int getID()** abrufbar. +- Stellt die ID des Kontinentes dar und ist mit **int getContinentID()** abrufbar. #### Position Diese zwei Werte legen fest, wo die sichtbaren Eigenschaften der Provinz angezeigt werden sollen. Sind nach dem Erstellen der Provinz nicht mehr abrufbar. -#### 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. - - boolean[] nearProvinces; - -Über die Methode **boolean isProvinceNear(int)** kann man sich die Einträge einzeln als Booleans ausgeben lassen. - #### Anzeigename Dies ist der Name, der auf der Karte und bei Events im Zusammenhang mit dieser Provinz angezeigt wird. @@ -216,6 +212,16 @@ Dieser Wert wird für die zufällige Verteilung von Einheiten benötigt (laut Ac Über **int getStars()** soll dieser Wert abrufbar sein. +#### 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. + + boolean[] nearProvinces; + +Dem Konstruktor kann stattdessen auch ein **int[]** mit allen angrenzenden Provinzen als Werte übergeben werden, dieses wird dann automatisch konvertiert. + +Über die Methode **boolean isProvinceNear(int)** kann man sich die Einträge einzeln als Booleans ausgeben lassen. + #### Besitzer Über die Methode **int getOwner()** bekommt ihr den aktuellen Besitzer zurück (-1 = keiner, 0 = Spieler 1, ...). @@ -353,4 +359,14 @@ Mit **String getText()** und **String setText(String)** bekommt Zugriff darauf. ## Button -Die Hauptklasse für Buttons, wird durch Erbung spezifiziert. \ No newline at end of file +Die Hauptklasse für Buttons, wird durch Erbung spezifiziert. + +--- + +## 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. + +### copyArray() + +Kopiert ein Array des Types **boolean**, **int** oder **String** mit identischer Größe. \ No newline at end of file diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index 9693d42..14c33ac 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -29,9 +29,11 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Funktio ## Province -- **Province(int, int, int, boolean[], String, int)** +- **Province(int, int, int, int, int, String, int[])** +- **Province(int, int, int, int, int, String, boolean[])** - **int getID()** +- **int getContinentID()** - **boolean isProvinceNear(int)** - **String getDisplayName()** - **int getStars()**