From bb152733c3678634ce1925f9f0568da62fa5fb2c Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Mon, 13 Jun 2016 19:29:26 +0200 Subject: [PATCH 01/11] Dice Entwicklung Anfang Eine erste Version der Dice Klasse, Anpassung der Architektur an abweichende Informationen erfolgt noch. --- Dice.java | 77 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 15 deletions(-) diff --git a/Dice.java b/Dice.java index 08b5c8a..f8e2342 100644 --- a/Dice.java +++ b/Dice.java @@ -1,19 +1,66 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** - * Write a description of class Dice here. - * - * @author (your name) - * @version (a version number or a date) + Stellt einen Würfel (von 1-6) dar, welcher in der Welt sichtbar dargestellt werden soll. + + @author Felix Stupp + @version 13.06.2016 */ -public class Dice extends Actor -{ - /** - * Act - do whatever the Dice wants to do. This method is called whenever - * the 'Act' or 'Run' button gets pressed in the environment. - */ - public void act() - { - // Add your action code here. - } -} +public class Dice extends GUI_Interface { + + private int number = 0; + + /** + Erstellt einen Würfel mit dem Startwert 0 (für noch nicht verwendet). + */ + public Dice() { + redraw(); + } + + /** + Erstellt einen Würfel mit einem bestimmten Startwert, welcher sofort sichtbar ist. + */ + public Dice(int startNumber) { + number = startNumber; + redraw(); + } + + /** + Gibt die aktuelle Zahl, die der Würfel anzeigt, aus. Gibt die Methode 0 zurück, heißt dies, dass der Würfel noch nicht gewürfelt wurde. + @return Die aktuelle Augenzahl oder 0 + */ + public int getNumber() { + return number; + } + + /** + Legt die Größe des Würfels als Quadrat fest. + */ + public void setSizeAsSquare(int l) { + setSize(l,l); + } + + /** + Würfelt den Würfel, erneuert die Darstellung und gibt die neue Augenzahl zurück. + */ + public int roll() { + number = (int) (Math.floor(Math.random()*6)+1) + redraw(); + return number; + } + + /** + Erneuert die Darstellung des Würfels. + */ + public void redraw() { + // einheitliche Größe X und Y + int eX = (int) Math.Round(sx/7); + int eY = (int) Math.Round(sy/7); + // Punktgröße X und Y + int pX = eX*2; + int pY = eY*2; + GreenfootImage i = new GreenfootImage(sx,sy); + + } + +} \ No newline at end of file From f3f88e8ac2adaabeac32d64549814d6b793d17bb Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 13 Jun 2016 20:02:26 +0200 Subject: [PATCH 02/11] =?UTF-8?q?Dice=20in=20der=20Architektur=20angepasst?= =?UTF-8?q?=20Vererbung=20von=20"GUI=5FInterface"=20eingetragen=20Weiteren?= =?UTF-8?q?=20Konstruktor=20hinzuge=C3=BCgt=20Neue=20Methoden=20"redraw"?= =?UTF-8?q?=20&=20"setSizeAsSquare"=20eingetragen=20Beschreibungen=20bishe?= =?UTF-8?q?riger=20Methoden=20erneuert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planung/architektur.md | 82 ++++++++++++++++++++++++++------------- planung/funktionsliste.md | 29 ++++++++------ 2 files changed, 73 insertions(+), 38 deletions(-) diff --git a/planung/architektur.md b/planung/architektur.md index 3713161..1a11e57 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -56,13 +56,13 @@ Hier werden alle Klassen mit deren öffentliche Methoden (**public** und **prote - *Province* - *Player* -- *Dice* ### GUI Objekte - *GUI_Interface* -- *Label* -- *Button* + - *Label* + - *Button* + - *Dice* ### Sonstige @@ -447,29 +447,6 @@ Erzwingt das erneute Zeichnen des Player Objekts, um alle sichtbaren Eigenschaft --- -## Dice -*extends Actor* - -Stellt einen Würfel als *Actor* dar (vergleichbar mit dem Würfel aus unserem Projekt Zehntausend). - -### Private Eigenschaften - -- Augenzahl - -#### Augenzahl - -Diese Zahl zeigt der Würfel gerade an und kann mit **int getNumber()** abgerufen werden. - -### Zusätzliche Methoden - -- *int* **roll** () - -#### roll() - -Berechnet eine Zufallszahl von 1 bis 6, speichert diese ab und gibt sie auch so gleich zurück. Ändert auch die Anzeige des Würfels. - ---- - ## GUI_Interface *extends Actor* @@ -724,6 +701,59 @@ Erneuert die Darstellung des Buttons mit seinem Anzeigetext auf der Welt. Hiermi --- +## 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* sein. diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index 7176b47..826e918 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -13,7 +13,7 @@ Falls euere Aufgabe die Umsetzung einer Methode ist, die hier bereits beschriebe Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt. -## GeneralMap +## GeneralMap (erweitert World) - *GeneralMap* ( *String* backgroundImage, *String[]* playerList, *int[]* colorList ) @@ -28,7 +28,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int[]* **getProvinceOwners** () - *int* **getProvinceEntityCount** ( *int* playerID ) -## Province +## Province (erweitert Actor) - *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces ) @@ -51,7 +51,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *void* **redrawProvince** () -## Player +## Player (erweitert Actor) - *Player* ( *int* playerID, *String* displayName, *int* playerColor ) @@ -74,15 +74,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int* **getProvinceCount** () - *void* **redrawPlayer** () -## Dice - -- *Dice* () - -- *int* **getNumber** () - -- *int* **roll** () - -## GUI_Interface +## GUI_Interface (erweitert Actor) - protected *int* **sx** - protected *int* **sy** @@ -128,4 +120,17 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *void* **setHandler** ( *ButtonEvent* newEventHandler ) - *void* **removeHandler** () +- *void* **redraw** () + +## Dice (erweitert GUI_Interface) + +- *Dice* () +- *Dice* ( *int* startNumber ) + +- *int* **getNumber** () + +- *void* **setSizeAsSquare** () + +- *int* **roll** () + - *void* **redraw** () \ No newline at end of file From 02c69ee90accca4d2587a80d89e351a2dc43bb3a Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 13 Jun 2016 20:03:46 +0200 Subject: [PATCH 03/11] =?UTF-8?q?Architektur=20verbessert=20Fehlenden=20Pa?= =?UTF-8?q?rameter=20in=20der=20Funktionsliste=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planung/funktionsliste.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index 826e918..2817706 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -129,7 +129,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int* **getNumber** () -- *void* **setSizeAsSquare** () +- *void* **setSizeAsSquare** ( *int* length ) - *int* **roll** () From a19ba5443dce593acb004081f017f2254cd16201 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 13 Jun 2016 20:38:30 +0200 Subject: [PATCH 04/11] Dice erweitert um Grafikengine Der Dice sollte nun in der Lage sein, seine aktuelle Augenzahl grafisch darzustellen. --- Dice.java | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/Dice.java b/Dice.java index f8e2342..2cf51a8 100644 --- a/Dice.java +++ b/Dice.java @@ -49,18 +49,40 @@ public class Dice extends GUI_Interface { return number; } + /** + Zeichnet auf dem gegebenen GreenfootImage ein Oval an der gegebenen Stelle multipliziert mit der einheitlichen Größe. + */ + private void fO(GreenfootImage i, int eX, int eY, int x, int y) { + i.fillOval(eX*x,eY*y,eX*2,eY*2) + } + /** Erneuert die Darstellung des Würfels. */ public void redraw() { - // einheitliche Größe X und Y - int eX = (int) Math.Round(sx/7); - int eY = (int) Math.Round(sy/7); - // Punktgröße X und Y - int pX = eX*2; - int pY = eY*2; + // einheitliche Größe X und Y (ein Vierzehntel der gesamten Breite und Höhe) + int eX = (int) Math.Round(sx/8); + int eY = (int) Math.Round(sy/8); + // Vereinfachung für die Augenzahl + int a = number; GreenfootImage i = new GreenfootImage(sx,sy); - + i.setColor(new java.awt.Color(0,0,0,0)); + i.clear(); + i.setColor(backC); + i.fillShape(0,0,sx,sy,eX/2,eY/2); + i.setColor(foreC); + if(a==1||a==3||a==5) { //Mittlerer Punkt + fO(i,eX,eY,3,3); + } else if(a>1) { //Punkte links-oben und rechts-unten + fO(i,eX,eY,1,1); + fO(i,eX,eY,5,5); + } else if(a>3) { //Punkte links-unten und rechts-oben + fO(i,eX,eY,1,5); + fO(i,eX,eY,5,1); + } else if(a>5) { //Punkte links-mitte und rechts-mitte + fO(i,eX,eY,1,3); + fO(i,eX,eY,5,3); + } + setImage(i); } - } \ No newline at end of file From a761c7755281ebb58fbb48de1a496043ce4805a5 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 13 Jun 2016 20:39:50 +0200 Subject: [PATCH 05/11] =?UTF-8?q?Dice=20Fehler=20verbessert=20Fehlende=20S?= =?UTF-8?q?emikolons=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dice.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dice.java b/Dice.java index 2cf51a8..a2c0b6e 100644 --- a/Dice.java +++ b/Dice.java @@ -44,7 +44,7 @@ public class Dice extends GUI_Interface { Würfelt den Würfel, erneuert die Darstellung und gibt die neue Augenzahl zurück. */ public int roll() { - number = (int) (Math.floor(Math.random()*6)+1) + number = (int) (Math.floor(Math.random()*6)+1); redraw(); return number; } @@ -53,7 +53,7 @@ public class Dice extends GUI_Interface { Zeichnet auf dem gegebenen GreenfootImage ein Oval an der gegebenen Stelle multipliziert mit der einheitlichen Größe. */ private void fO(GreenfootImage i, int eX, int eY, int x, int y) { - i.fillOval(eX*x,eY*y,eX*2,eY*2) + i.fillOval(eX*x,eY*y,eX*2,eY*2); } /** From 4f09f512ef9ffb0b538a44e9fa033ea823269e55 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Mon, 13 Jun 2016 21:31:24 +0200 Subject: [PATCH 06/11] =?UTF-8?q?Debug=20Session=20Fehlerbehebungen=20Gene?= =?UTF-8?q?ralMap=2030:=20Konstruktor=20erweitert=2038:=20playerList=20zu?= =?UTF-8?q?=20players=2089:=20provinces[i]=2091:=20pw=20zu=20pr=20107:=20r?= =?UTF-8?q?eturn=20Statement=20hinzugef=C3=BCgt=20Map=5FWorld=2025:=20Kons?= =?UTF-8?q?truktorparamter=20hinzugef=C3=BCgt=20und=20weitergeleitet=2026:?= =?UTF-8?q?=20Konstruktor=20Aufruf=20entfernen=2027:=20Internes=20Array=20?= =?UTF-8?q?nach=20au=C3=9Fen=20verlagert=2029:=20Kommentartyp=20angepasst?= =?UTF-8?q?=2032:=20Kommentar=20verk=C3=BCrzt=20Dice=2064=20&=2065:=20Roun?= =?UTF-8?q?d=20zu=20round=2072:=20Konstruktoraufruf=20von=20java.awt.geom.?= =?UTF-8?q?RoundRectangle2D.Double=2073=20&=2076=20&=2079=20&=2082:=20else?= =?UTF-8?q?=20entfernt=20Player=2025:=20color-Eigenschaft=20als=20private?= =?UTF-8?q?=20Variable=20und=20als=20Konstruktorparameter=20eingef=C3=BChr?= =?UTF-8?q?t=2042=20&=2049=20&=20123=20&=20127=20&=20138=20&=20189:=20Meth?= =?UTF-8?q?oden=20von=20private=20zu=20public=20ArmySchubser=2018:=20Konst?= =?UTF-8?q?ruktorparamter=20hinzugef=C3=BCgt=20und=20weitergeleitet=2028?= =?UTF-8?q?=20&=2037:=20For-Anfang=20auf=201=20erh=C3=B6ht=20GUI=5FInterfa?= =?UTF-8?q?ce=2015=20&=2018:=20Standardgr=C3=B6=C3=9Fe=20erh=C3=B6ht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ArmySchubser.java | 7 ++++--- Dice.java | 13 +++++++------ GUI_Interface.java | 4 ++-- GeneralMap.java | 13 +++++++++---- Map_World.java | 20 +++----------------- Player.java | 16 +++++++++------- 6 files changed, 34 insertions(+), 39 deletions(-) diff --git a/ArmySchubser.java b/ArmySchubser.java index 4691f74..3ba98bf 100644 --- a/ArmySchubser.java +++ b/ArmySchubser.java @@ -15,8 +15,9 @@ public class ArmySchubser extends Map_World * Constructor for objects of class ArmySchubser. * */ - public ArmySchubser() + public ArmySchubser(String[] playerList, int[] colorList) { + super(playerList,colorList); // Hi. } @@ -25,7 +26,7 @@ public class ArmySchubser extends Map_World Province firstProvince = null; Province secondProvince = null; - for ( int i = 0; i <= provinceCount; i++) + for ( int i = 1; i <= provinceCount; i++) { if (provinces[i].hasClicked() == true) { @@ -34,7 +35,7 @@ public class ArmySchubser extends Map_World } } - for ( int i = 0; i <= provinceCount; i++) + for ( int i = 1; i <= provinceCount; i++) { if (provinces[i].hasClicked() == true && provinces[i] != firstProvince) { diff --git a/Dice.java b/Dice.java index a2c0b6e..d4cd8a3 100644 --- a/Dice.java +++ b/Dice.java @@ -61,25 +61,26 @@ public class Dice extends GUI_Interface { */ public void redraw() { // einheitliche Größe X und Y (ein Vierzehntel der gesamten Breite und Höhe) - int eX = (int) Math.Round(sx/8); - int eY = (int) Math.Round(sy/8); + int eX = (int) Math.round(sx/8); + int eY = (int) Math.round(sy/8); // Vereinfachung für die Augenzahl int a = number; GreenfootImage i = new GreenfootImage(sx,sy); i.setColor(new java.awt.Color(0,0,0,0)); i.clear(); i.setColor(backC); - i.fillShape(0,0,sx,sy,eX/2,eY/2); + i.fillShape(new java.awt.geom.RoundRectangle2D.Double(0,0,sx,sy,eX/2,eY/2)); i.setColor(foreC); + // das "else" fehlt absichtlich if(a==1||a==3||a==5) { //Mittlerer Punkt fO(i,eX,eY,3,3); - } else if(a>1) { //Punkte links-oben und rechts-unten + } if(a>1) { //Punkte links-oben und rechts-unten fO(i,eX,eY,1,1); fO(i,eX,eY,5,5); - } else if(a>3) { //Punkte links-unten und rechts-oben + } if(a>3) { //Punkte links-unten und rechts-oben fO(i,eX,eY,1,5); fO(i,eX,eY,5,1); - } else if(a>5) { //Punkte links-mitte und rechts-mitte + } if(a>5) { //Punkte links-mitte und rechts-mitte fO(i,eX,eY,1,3); fO(i,eX,eY,5,3); } diff --git a/GUI_Interface.java b/GUI_Interface.java index 29fd7f0..8b2262e 100644 --- a/GUI_Interface.java +++ b/GUI_Interface.java @@ -12,11 +12,11 @@ public abstract class GUI_Interface extends Actor /** Die Breite des Objektes */ - protected int sx = 1; + protected int sx = 20; /** Die Höhe des Objektes */ - protected int sy = 1; + protected int sy = 20; /** Die Hintergrundfarbe des Objektes */ diff --git a/GeneralMap.java b/GeneralMap.java index 4736d2b..01ce194 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -27,7 +27,11 @@ public abstract class GeneralMap extends World */ 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]); + } } /** @@ -35,7 +39,7 @@ public abstract class GeneralMap extends World */ public int getPlayerCount() { - return playerList.length; + return players.length; } /** @@ -86,9 +90,9 @@ public abstract class GeneralMap extends World { int[] prOwners = new int[provinces.length]; for (int i = 1; i > provinces.length; i++) { - prOwners[i] = provinces.getOwner(); + prOwners[i] = provinces[i].getOwner(); } - return pwOwners; + return prOwners; } /** @@ -104,6 +108,7 @@ public abstract class GeneralMap extends World c = c + provinces[i].getEntityCount(); } } + return c; } } diff --git a/Map_World.java b/Map_World.java index 2a3e5fa..e3f39db 100644 --- a/Map_World.java +++ b/Map_World.java @@ -21,28 +21,14 @@ public class Map_World extends GeneralMap * konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. */ - public Map_World() + public Map_World(String[] playerList, int[] colorList) { - super(1600,900,1); - Province[] provinces; - - /** + super("",playerList,colorList); + /* * Hier werden später sämtliche Provinzen der Standard-Map erstellt. * Dies funktioniert folgendermassen: * ================================================================= * - * VERALTETER KOMMENTAR VON GruenerWal: - * Im Folgenden wird nun jede Provinz einzeln erstellt: - * |--- - * nextProvinces = new int[]; - * - * provinces[] = new Province(,,,,,"",nextProvinces); - * addObject(provinces[],,); - * ---| - * - * ================================================================= - * - * NEUES FORMAT VON FELIX STUPP: * 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[] { }); diff --git a/Player.java b/Player.java index 2fa05c0..3d5d2fe 100644 --- a/Player.java +++ b/Player.java @@ -22,11 +22,13 @@ public class Player extends Actor boolean lostProv = false; private String n; + private int c; //definiert die ID und Namens Variable - public Player( int identity,String name) + public Player( int identity,String name, int color) { n = name; id = identity; + c = color; } //gibt die Spieler ID zurück public int getID() @@ -39,12 +41,12 @@ public class Player extends Actor return n; } //gibt die Sternenanzahl zurück - private int getStars () + public int getStars () { return stars; } // erhöht die Sternenzahl um eine random ausgewählte Anzahl von 1-3 - private void addToStars () + public void addToStars () { int rand; @@ -120,11 +122,11 @@ public class Player extends Actor return provZahl; } - private void gotEntities(int gotEnt) + public void gotEntities(int gotEnt) { stats[3]+= gotEnt; } - private void lostEntity() + public void lostEntity() { stats[4]+=1; } @@ -135,7 +137,7 @@ public class Player extends Actor stats[5]=entNumber; } } - private boolean[] getMyProvinces() + public boolean[] getMyProvinces() { GeneralMap w= getWorld(); int[] provinces = w.getProvinceOwners(); @@ -186,7 +188,7 @@ public class Player extends Actor { return lostProv; } - private int[] getStatistics() + public int[] getStatistics() { return stats; } From 8ab61027ceff873f0bc627fa0da036f1b59d2e5d Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Tue, 14 Jun 2016 08:59:25 +0200 Subject: [PATCH 07/11] =?UTF-8?q?Dice=20grafisch=20angepasst=20Abgerundete?= =?UTF-8?q?=20Ecken=20vergr=C3=B6=C3=9Fert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dice.java b/Dice.java index d4cd8a3..a67d05b 100644 --- a/Dice.java +++ b/Dice.java @@ -69,7 +69,7 @@ public class Dice extends GUI_Interface { i.setColor(new java.awt.Color(0,0,0,0)); i.clear(); i.setColor(backC); - i.fillShape(new java.awt.geom.RoundRectangle2D.Double(0,0,sx,sy,eX/2,eY/2)); + i.fillShape(new java.awt.geom.RoundRectangle2D.Double(0,0,sx,sy,eX,eY)); i.setColor(foreC); // das "else" fehlt absichtlich if(a==1||a==3||a==5) { //Mittlerer Punkt From 1ee7463a33a0ec3c24d70f3a72af7d4407c6dbab Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Tue, 14 Jun 2016 09:00:54 +0200 Subject: [PATCH 08/11] =?UTF-8?q?DicesList=20eingef=C3=BChrt=20Diese=20neu?= =?UTF-8?q?e=20abstrakte=20Klasse=20generiert=20eine=20Liste=20von=20W?= =?UTF-8?q?=C3=BCrfeln,=20welche=20hintereinander=20dargestellt=20werden.?= =?UTF-8?q?=20Die=20Unterklassen=20DefenderDices=20&=20OffenderDices=20pas?= =?UTF-8?q?sen=20jeweils=20nur=20noch=20die=20Farbe=20der=20W=C3=BCrfel=20?= =?UTF-8?q?an.=20Entsprechende=20Eintr=C3=A4ge=20in=20die=20Architektur=20?= =?UTF-8?q?folgen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DefenderDices.java | 16 +++++++++++++ DicesList.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++ OffenderDices.java | 16 +++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 DefenderDices.java create mode 100644 DicesList.java create mode 100644 OffenderDices.java diff --git a/DefenderDices.java b/DefenderDices.java new file mode 100644 index 0000000..d4fd927 --- /dev/null +++ b/DefenderDices.java @@ -0,0 +1,16 @@ +import greenfoot.*; +import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + Erstellt eine gegebene Anzahl an DefenderDice's, welche dann nebeneinander eingereiht werden. + + @author Felix Stupp + @version 14.06.2016 +*/ +public class DefenderDices extends DicesList { + + public DefenderDices(int count) { + genDices(count, 2, new Color(0,0,0), (new Color(255,255,255)); + } + +} diff --git a/DicesList.java b/DicesList.java new file mode 100644 index 0000000..cb0fdfa --- /dev/null +++ b/DicesList.java @@ -0,0 +1,60 @@ +import greenfoot.*; +import java.awt.Color; +import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + Erstellt eine gegebene Anzahl an Dices's, welche dann nebeneinander eingereiht werden. + + @author Felix Stupp + @version 14.06.2016 +*/ +public abstract class DicesList extends Actor { + + private final static int SQUARESIZE = 100; // Anpassbar + private Dice[] dices; + + public DicesList() { + setImage(new GreenfootImage(2,2)); + } + + protected void genDices(int count, int max, Color bC, Color fC) { + if(count < 1) { + count = 1; + } else if (count > max) { + count = max; + } + for(int i = 1; i < count; i++) { + Dice d = new Dice(); + d.setBackColor(bC); + d.setForeColor(fC); + d.setSizeAsSquare(SQUARESIZE); + dices[i] = d; + } + } + + protected void addedToWorld(World w) { + for(int i = 0; i < dices.length; i++) { + w.addObject(dices[i],w.getX()+(SQUARESIZE*(6/5)*i),w.getY()); + } + //w.removeObject(this); // Zeile auskommentieren, wenn die Debug-Phase vorbei ist. + } + + public int[] getNumbers() { + int[] n = new int[dices.length]; + for(int i = 0; i < dices.length; i++) { + n[i] = dices[i].getNumber(); + } + Arrays.sort(n); + return n; + } + + public int[] roll() { + int[] n = new int[dices.length]; + for(int i = 0; i < dices.length; i++) { + n[i] = dices[i].roll(); + } + Arrays.sort(n); + return n; + } + +} diff --git a/OffenderDices.java b/OffenderDices.java new file mode 100644 index 0000000..e2123d5 --- /dev/null +++ b/OffenderDices.java @@ -0,0 +1,16 @@ +import greenfoot.*; +import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + Erstellt eine gegebene Anzahl an OffenderDice's, welche dann nebeneinander eingereiht werden. + + @author Felix Stupp + @version 14.06.2016 +*/ +public class OffenderDices extends DicesList { + + public OffenderDices(int count) { + genDices(count, 3, new Color(255,0,0), (new Color(255,255,255)); + } + +} From 4c0119737dc7004f0084c33fc495bcfd6a72ec01 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Wed, 15 Jun 2016 19:37:03 +0200 Subject: [PATCH 09/11] Architektur Inhaltsangabe angepasst Die Extra Kategorie "GUI Objekte" wurde entfernt, da an der Vererbung von *GUI_Interface* eindeutig erkennbar sein sollte, welche Art von Actoren sich als GUI Objekte eignen. --- planung/architektur.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/planung/architektur.md b/planung/architektur.md index 1a11e57..e63d545 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -57,8 +57,6 @@ Hier werden alle Klassen mit deren öffentliche Methoden (**public** und **prote - *Province* - *Player* -### GUI Objekte - - *GUI_Interface* - *Label* - *Button* From 93c0ccc2055d5bc6676c5ba829b0f776dec62d08 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Wed, 15 Jun 2016 20:49:02 +0200 Subject: [PATCH 10/11] =?UTF-8?q?DicesList=20und=20Unterklassen=20verbesse?= =?UTF-8?q?rt=20Die=20Methode=20**genDices**=20wurde=20direkt=20in=20den?= =?UTF-8?q?=20Konstruktor=20der=20*DicesList*=20integriert.=20Es=20wurde?= =?UTF-8?q?=20ein=20Kompilierungsfehler=20bei=20der=20*DicesList*=20verbes?= =?UTF-8?q?sert.=20Die=20Sortierung=20der=20Augenzahlen=20wurde=20nun=20zu?= =?UTF-8?q?=20absteigend=20ge=C3=A4ndert,=20die=20Funktionsweise=20hierf?= =?UTF-8?q?=C3=BCr=20wurde=20in=20die=20*Utils*=20Klasse=20ausgelagert.=20?= =?UTF-8?q?*DicesList*=20bekam=20die=20Methode=20**removeAll**=20dazu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DefenderDices.java | 4 ++-- DicesList.java | 25 ++++++++++++++----------- OffenderDices.java | 4 ++-- Utils.java | 18 ++++++++++++++---- 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/DefenderDices.java b/DefenderDices.java index d4fd927..a13634f 100644 --- a/DefenderDices.java +++ b/DefenderDices.java @@ -5,12 +5,12 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse Erstellt eine gegebene Anzahl an DefenderDice's, welche dann nebeneinander eingereiht werden. @author Felix Stupp - @version 14.06.2016 + @version 15.06.2016 */ public class DefenderDices extends DicesList { public DefenderDices(int count) { - genDices(count, 2, new Color(0,0,0), (new Color(255,255,255)); + super(count, 2, new Color(0,0,0), (new Color(255,255,255)); } } diff --git a/DicesList.java b/DicesList.java index cb0fdfa..934a74d 100644 --- a/DicesList.java +++ b/DicesList.java @@ -1,23 +1,18 @@ import greenfoot.*; -import java.awt.Color; -import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** Erstellt eine gegebene Anzahl an Dices's, welche dann nebeneinander eingereiht werden. @author Felix Stupp - @version 14.06.2016 + @version 15.06.2016 */ public abstract class DicesList extends Actor { private final static int SQUARESIZE = 100; // Anpassbar private Dice[] dices; - public DicesList() { + public DicesList(int count, int max, java.awt.Color bC, java.awt.Color fC) { setImage(new GreenfootImage(2,2)); - } - - protected void genDices(int count, int max, Color bC, Color fC) { if(count < 1) { count = 1; } else if (count > max) { @@ -30,11 +25,11 @@ public abstract class DicesList extends Actor { d.setSizeAsSquare(SQUARESIZE); dices[i] = d; } - } + } protected void addedToWorld(World w) { for(int i = 0; i < dices.length; i++) { - w.addObject(dices[i],w.getX()+(SQUARESIZE*(6/5)*i),w.getY()); + w.addObject(dices[i],getX()+(SQUARESIZE*(6/5)*i),getY()); } //w.removeObject(this); // Zeile auskommentieren, wenn die Debug-Phase vorbei ist. } @@ -44,7 +39,7 @@ public abstract class DicesList extends Actor { for(int i = 0; i < dices.length; i++) { n[i] = dices[i].getNumber(); } - Arrays.sort(n); + Utils.sortDesc(n); return n; } @@ -53,8 +48,16 @@ public abstract class DicesList extends Actor { for(int i = 0; i < dices.length; i++) { n[i] = dices[i].roll(); } - Arrays.sort(n); + Utils.sortDesc(n); return n; } + public void removeAll() { + for(int i = 0; i < dices.length; i++) { + dices[i].getWorld().removeObject(dices[i]); + } + getWorld().removeObject(this); + dices = new Dice[0]; + } + } diff --git a/OffenderDices.java b/OffenderDices.java index e2123d5..bcc7542 100644 --- a/OffenderDices.java +++ b/OffenderDices.java @@ -5,12 +5,12 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse Erstellt eine gegebene Anzahl an OffenderDice's, welche dann nebeneinander eingereiht werden. @author Felix Stupp - @version 14.06.2016 + @version 15.06.2016 */ public class OffenderDices extends DicesList { public OffenderDices(int count) { - genDices(count, 3, new Color(255,0,0), (new Color(255,255,255)); + super(count, 3, new Color(255,0,0), (new Color(255,255,255)); } } diff --git a/Utils.java b/Utils.java index 5081b61..87a34cd 100644 --- a/Utils.java +++ b/Utils.java @@ -1,11 +1,12 @@ import greenfoot.*; import java.awt.Color; +import java.util.*; /** - * 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 + 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 15.06.2016 */ public final class Utils { @@ -59,4 +60,13 @@ public final class Utils { i.fillRect(b,b,sx-(2*b),sy-(2*b)); } + /** + Sortiert ein int[]-Array absteigend. + @param a Das zu sortierende Array + */ + public static void sortDesc(int[] a) { + Arrays.sort(a); + Collection.sort(a,Collections.reverseOrder()); + } + } From 5d2b6a5caf37f3cd9dffbcf1cb778d5abb1c1c7c Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Wed, 15 Jun 2016 20:53:31 +0200 Subject: [PATCH 11/11] Architektur erweitert Die *DicesList* Klasse und deren Unterklassen wurden aufgenommen. Die Erweiterung der *Utils*-Klasse wurde aufgenommen. Bei der Funktionsliste wurde das Wort "erweitert" durch "extends" ersetzt. --- planung/architektur.md | 114 ++++++++++++++++++++++++++++++++++++-- planung/funktionsliste.md | 47 ++++++++++++---- 2 files changed, 146 insertions(+), 15 deletions(-) diff --git a/planung/architektur.md b/planung/architektur.md index e63d545..4864cc6 100644 --- a/planung/architektur.md +++ b/planung/architektur.md @@ -1,6 +1,6 @@ # Architekturplan Zweiundvierzig -**Letztes Update: 04.06.2016** (TT.MM.JJJJ / DD.MM.YYYY) +**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) @@ -62,6 +62,10 @@ Hier werden alle Klassen mit deren öffentliche Methoden (**public** und **prote - *Button* - *Dice* +- *DicesList* + - *OffenderDices* + - *DefenderDices* + ### Sonstige - *Utils* @@ -445,6 +449,92 @@ Erzwingt das erneute Zeichnen des Player Objekts, um alle sichtbaren Eigenschaft --- +## 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* @@ -754,12 +844,26 @@ 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* sein. +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. -### copyArray() +### 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() +#### 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() -Zeichnet innerhalb eines **GreenfootImage** ein Rechteck gefüllt mit der angegebenen Farbe. Es besitzt zu allen Seiten den gegebenen Abstand zum Rand des Image. \ No newline at end of file +Sortiert ein *int[]*-Array absteigend. \ No newline at end of file diff --git a/planung/funktionsliste.md b/planung/funktionsliste.md index 2817706..09b9f2d 100644 --- a/planung/funktionsliste.md +++ b/planung/funktionsliste.md @@ -1,6 +1,6 @@ # Funktionsliste Zweiundvierzig -**Letztes Update: 04.06.2016** (TT.MM.JJJJ / DD.MM.YYYY) +**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) @@ -11,9 +11,9 @@ Weitere Informationen zu den Methoden findet ihr in der Architektur oder, falls Falls euere Aufgabe die Umsetzung einer Methode ist, die hier bereits beschrieben wird, müsst ihr nicht diesselben Parameterbezeichner verwenden, wie sie hier verwendet wurden. Falls aus diesem Bezeichner jedoch nicht mehr die Bedeutung des Parameters ausgeht, muss dies in einem Java-Documentation Kommentar erklärt werden. -Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt. +Dies könnt auch als Checkliste verwenden, um zu sehen, ob ihr bereits alle Methodenn im Code präsent habt. -## GeneralMap (erweitert World) +## GeneralMap (extends World) - *GeneralMap* ( *String* backgroundImage, *String[]* playerList, *int[]* colorList ) @@ -28,7 +28,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int[]* **getProvinceOwners** () - *int* **getProvinceEntityCount** ( *int* playerID ) -## Province (erweitert Actor) +## Province (extends Actor) - *Province* ( *int* provinceID, *int* continentID, *int* xPos, *int* yPos, *String* displayName, *int* stars, *int[]* neighbourProvinces ) @@ -51,7 +51,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *void* **redrawProvince** () -## Player (erweitert Actor) +## Player (extends Actor) - *Player* ( *int* playerID, *String* displayName, *int* playerColor ) @@ -74,7 +74,24 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int* **getProvinceCount** () - *void* **redrawPlayer** () -## GUI_Interface (erweitert Actor) +## 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** @@ -90,7 +107,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - abstract *void* **redraw** () -## Label (erweitert GUI_Interface) +## Label (extends GUI_Interface) - *Label* ( *String* text, *int* textSize ) @@ -103,7 +120,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *void* **redraw** () -## Button (erweitert GUI_Interface) +## Button (extends GUI_Interface) - *Button* ( *String* text, *int* textSize ) - *Button* ( *ButtonEvent* eventHandler ) @@ -122,7 +139,7 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *void* **redraw** () -## Dice (erweitert GUI_Interface) +## Dice (extends GUI_Interface) - *Dice* () - *Dice* ( *int* startNumber ) @@ -133,4 +150,14 @@ Dies könnt auch als Checkliste nehmen, um zu sehen, ob ihr bereits alle Methode - *int* **roll** () -- *void* **redraw** () \ No newline at end of file +- *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