From 7027ff806f996a050a214ff7e5e93676a060a271 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Sat, 30 Jul 2016 15:21:37 +0200 Subject: [PATCH] Zuweisung zu Packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Um eine bessere Sortierung zu erhalten und um identisch benannte Klassen von unserem Projekt und von JavaFX unterscheiden zu können. --- .../Bildbutton.java | 286 ++-- Button.java => zweiundvierzig/Button.java | 218 +-- .../ButtonEvent.java | 4 + Colours.java => zweiundvierzig/Colours.java | 450 ++--- Debug3.java => zweiundvierzig/Debug3.java | 4 + Debug4.java => zweiundvierzig/Debug4.java | 4 + Debug5.java => zweiundvierzig/Debug5.java | 4 + .../DefenderDices.java | 4 + Dice.java => zweiundvierzig/Dice.java | 4 + .../Dice_Defender.java | 4 + .../Dice_Offender.java | 4 + .../DicesList.java | 4 + .../GUI_Interface.java | 216 +-- .../GeneralMap.java | 1446 +++++++++-------- .../InputDialogWorld.java | 4 + Label.java => zweiundvierzig/Label.java | 4 + Map.java => zweiundvierzig/Map.java | 2 + .../Map_World.java | 4 + .../Menue_Button.java | 62 +- .../OffenderDices.java | 4 + Player.java => zweiundvierzig/Player.java | 584 +++---- Province.java => zweiundvierzig/Province.java | 1132 ++++++------- .../Roll_Button.java | 4 + .../Spielanleitung.java | 44 +- .../Start_Load.java | 130 +- Utils.java => zweiundvierzig/Utils.java | 4 + 26 files changed, 2365 insertions(+), 2265 deletions(-) rename Bildbutton.java => zweiundvierzig/Bildbutton.java (96%) rename Button.java => zweiundvierzig/Button.java (96%) rename ButtonEvent.java => zweiundvierzig/ButtonEvent.java (92%) rename Colours.java => zweiundvierzig/Colours.java (97%) rename Debug3.java => zweiundvierzig/Debug3.java (87%) rename Debug4.java => zweiundvierzig/Debug4.java (88%) rename Debug5.java => zweiundvierzig/Debug5.java (89%) rename DefenderDices.java => zweiundvierzig/DefenderDices.java (93%) rename Dice.java => zweiundvierzig/Dice.java (98%) rename Dice_Defender.java => zweiundvierzig/Dice_Defender.java (98%) rename Dice_Offender.java => zweiundvierzig/Dice_Offender.java (98%) rename DicesList.java => zweiundvierzig/DicesList.java (98%) rename GUI_Interface.java => zweiundvierzig/GUI_Interface.java (96%) rename GeneralMap.java => zweiundvierzig/GeneralMap.java (97%) rename InputDialogWorld.java => zweiundvierzig/InputDialogWorld.java (98%) rename Label.java => zweiundvierzig/Label.java (98%) rename Map.java => zweiundvierzig/Map.java (98%) rename Map_World.java => zweiundvierzig/Map_World.java (99%) rename Menue_Button.java => zweiundvierzig/Menue_Button.java (96%) rename OffenderDices.java => zweiundvierzig/OffenderDices.java (93%) rename Player.java => zweiundvierzig/Player.java (96%) rename Province.java => zweiundvierzig/Province.java (97%) rename Roll_Button.java => zweiundvierzig/Roll_Button.java (96%) rename Spielanleitung.java => zweiundvierzig/Spielanleitung.java (92%) rename Start_Load.java => zweiundvierzig/Start_Load.java (96%) rename Utils.java => zweiundvierzig/Utils.java (98%) diff --git a/Bildbutton.java b/zweiundvierzig/Bildbutton.java similarity index 96% rename from Bildbutton.java rename to zweiundvierzig/Bildbutton.java index cb88c12..25a0b7d 100644 --- a/Bildbutton.java +++ b/zweiundvierzig/Bildbutton.java @@ -1,142 +1,144 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.awt.Color; -import java.awt.Graphics2D; - -/** - Diese Klasse stellt einen Button dar. - Als funktionelles Vorbild dafuer haelt der Button aus dem .NET-Framework fuer UWP-Apps dar. - - @author Felix Stupp - @version 20.05.2016 -*/ -public class Bildbutton extends GUI_Interface { - - private boolean autoSize = false; - protected GreenfootImage picture = new GreenfootImage(1,1); - - private ButtonEvent handler; - - /** - Erstellt einen Button mit dem gegebenen Text und der zugehoerigen Textgroeße. - @param txt Der Text, den der Button darstellen soll. - @param size Die Textgroeße, in der der Button den Text darstellen soll. - */ - public Bildbutton(GreenfootImage pict) { - picture = pict; - redrawInternal(); - } - /** - Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. - @param h Der Handler mit dem Interface ButtonEvent implementiert. - */ - public Bildbutton(ButtonEvent h) { - handler = h; - redrawInternal(); - } - /** - Erstellt einen Button mit dem gegebenen Text, der zugehoerigen Textgroeße und dem gegebenen Objekt als Event-Handler. - @param txt Der Text, den der Button darstellen soll. - @param size Die Textgroeße, in der der Button den Text darstellen soll. - @param h Der Handler mit dem Interface ButtonEvent implementiert. - */ - public Bildbutton(GreenfootImage pict, ButtonEvent h) { - picture = pict; - handler = h; - redrawInternal(); - } - - /** - Fragt ab, ob ein Klick auf den Button gekommen ist. - Wird intern von Greenfoot benoetigt. - */ - public void act() { - if(Greenfoot.mouseClicked(this) && handler != this) { - handler.buttonClicked(this); - } - } - - /** - Gibt zurueck, ob die Groeße des Buttons von dem Text bestimmt werden soll. - @return Wert der AutoSize-Eigenschaft - */ - public boolean getAutoSize() { - return autoSize; - } - /** - Legt fest, ob die Groeße des Buttons von dem Text bestimmt werden soll. - Wird der Wert auf TRUE geaendert, erfolgt automatisch ein Redraw des Objekts. - @param b Der neue Wert der AutoSize-Eigenschaft. - */ - public void setAutoSize(boolean b) { - autoSize = b; - if(autoSize) { - redraw(); - } - } - - /** - Gibt den aktuellen Text zurueck. - @return Der aktuelle Text - */ - public GreenfootImage getPicture() { - return picture; - } - /** - Setzt den darzustellenden Text auf den neuen Wert. - @param s Der neue Text - @return Gibt an, ob sich der Text geaendert hat. Bei TRUE erfolgte bereits ein Redraw. - */ - public boolean setPicture(GreenfootImage s) { - if(picture != s) { - picture = s; - redraw(); - return true; - } - return false; - } - - /** - Gibt den aktuellen EventHandler des Buttons zurueck. - @return Der Handler als ButtonEvent - */ - public ButtonEvent getHandler() { - return handler; - } - /** - Setzt den EventHandler auf ein neues Objekt. - @param h Der Handler mit implementiertem ButtonEvent-Interface - */ - public void setHandler(ButtonEvent h) { - handler = h; - } - /** - Entfernt den aktuellen EventHandler, um die Ausfuehrung zukuenftiger Events zu verhindern. - */ - public void removeHandler() { - handler = null; - } - - protected void redrawInternal() { - GreenfootImage tI = picture; - if(autoSize) { - sx = tI.getWidth() + (6 * 2) + 4; - sy = tI.getHeight() + (6 * 2) + 4; - } - GreenfootImage all = new GreenfootImage(sx,sy); - Color trans = new Color(0,0,0,0); - all.setColor(trans); - all.fill(); - Graphics2D g = all.getAwtImage().createGraphics(); - g.setColor(backC); - g.fillRoundRect(0,0,sx,sy,24,24); - all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2); - setImage(all); - } - - /** - Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. - */ - public void redraw() { - redrawInternal(); - } -} +package zweiundvierzig; + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; +import java.awt.Graphics2D; + +/** + Diese Klasse stellt einen Button dar. + Als funktionelles Vorbild dafuer haelt der Button aus dem .NET-Framework fuer UWP-Apps dar. + + @author Felix Stupp + @version 20.05.2016 +*/ +public class Bildbutton extends GUI_Interface { + + private boolean autoSize = false; + protected GreenfootImage picture = new GreenfootImage(1,1); + + private ButtonEvent handler; + + /** + Erstellt einen Button mit dem gegebenen Text und der zugehoerigen Textgroeße. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgroeße, in der der Button den Text darstellen soll. + */ + public Bildbutton(GreenfootImage pict) { + picture = pict; + redrawInternal(); + } + /** + Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ + public Bildbutton(ButtonEvent h) { + handler = h; + redrawInternal(); + } + /** + Erstellt einen Button mit dem gegebenen Text, der zugehoerigen Textgroeße und dem gegebenen Objekt als Event-Handler. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgroeße, in der der Button den Text darstellen soll. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ + public Bildbutton(GreenfootImage pict, ButtonEvent h) { + picture = pict; + handler = h; + redrawInternal(); + } + + /** + Fragt ab, ob ein Klick auf den Button gekommen ist. + Wird intern von Greenfoot benoetigt. + */ + public void act() { + if(Greenfoot.mouseClicked(this) && handler != this) { + handler.buttonClicked(this); + } + } + + /** + Gibt zurueck, ob die Groeße des Buttons von dem Text bestimmt werden soll. + @return Wert der AutoSize-Eigenschaft + */ + public boolean getAutoSize() { + return autoSize; + } + /** + Legt fest, ob die Groeße des Buttons von dem Text bestimmt werden soll. + Wird der Wert auf TRUE geaendert, erfolgt automatisch ein Redraw des Objekts. + @param b Der neue Wert der AutoSize-Eigenschaft. + */ + public void setAutoSize(boolean b) { + autoSize = b; + if(autoSize) { + redraw(); + } + } + + /** + Gibt den aktuellen Text zurueck. + @return Der aktuelle Text + */ + public GreenfootImage getPicture() { + return picture; + } + /** + Setzt den darzustellenden Text auf den neuen Wert. + @param s Der neue Text + @return Gibt an, ob sich der Text geaendert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setPicture(GreenfootImage s) { + if(picture != s) { + picture = s; + redraw(); + return true; + } + return false; + } + + /** + Gibt den aktuellen EventHandler des Buttons zurueck. + @return Der Handler als ButtonEvent + */ + public ButtonEvent getHandler() { + return handler; + } + /** + Setzt den EventHandler auf ein neues Objekt. + @param h Der Handler mit implementiertem ButtonEvent-Interface + */ + public void setHandler(ButtonEvent h) { + handler = h; + } + /** + Entfernt den aktuellen EventHandler, um die Ausfuehrung zukuenftiger Events zu verhindern. + */ + public void removeHandler() { + handler = null; + } + + protected void redrawInternal() { + GreenfootImage tI = picture; + if(autoSize) { + sx = tI.getWidth() + (6 * 2) + 4; + sy = tI.getHeight() + (6 * 2) + 4; + } + GreenfootImage all = new GreenfootImage(sx,sy); + Color trans = new Color(0,0,0,0); + all.setColor(trans); + all.fill(); + Graphics2D g = all.getAwtImage().createGraphics(); + g.setColor(backC); + g.fillRoundRect(0,0,sx,sy,24,24); + all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2); + setImage(all); + } + + /** + Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. + */ + public void redraw() { + redrawInternal(); + } +} diff --git a/Button.java b/zweiundvierzig/Button.java similarity index 96% rename from Button.java rename to zweiundvierzig/Button.java index 3424b03..f90dd8b 100644 --- a/Button.java +++ b/zweiundvierzig/Button.java @@ -1,107 +1,111 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.awt.Color; -import java.awt.Graphics2D; - -/** - Diese Klasse stellt einen Button dar. - Als funktionelles Vorbild dafuer haelt der Button aus dem .NET-Framework fuer UWP-Apps dar. - - @author Felix Stupp - @version 20.05.2016 -*/ -public class Button extends Bildbutton { - - private int textSize = 32; // as default text size - private String text = ""; - - /** - Erstellt einen Button mit dem gegebenen Text und der zugehoerigen Textgroeße. - @param txt Der Text, den der Button darstellen soll. - @param size Die Textgroeße, in der der Button den Text darstellen soll. - */ - public Button(String txt, int size) { - super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK)); - text = txt; - textSize = size; - redraw(); - } - /** - Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. - @param h Der Handler mit dem Interface ButtonEvent implementiert. - */ - public Button(ButtonEvent h) { - super(h); - redraw(); - } - /** - Erstellt einen Button mit dem gegebenen Text, der zugehoerigen Textgroeße und dem gegebenen Objekt als Event-Handler. - @param txt Der Text, den der Button darstellen soll. - @param size Die Textgroeße, in der der Button den Text darstellen soll. - @param h Der Handler mit dem Interface ButtonEvent implementiert. - */ - public Button(String txt, int size, ButtonEvent h) { - super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK),h); - text = txt; - textSize = size; - redraw(); - } - - /** - Gibt die aktelle Textgroeße zurueck. - @return Aktuelle Textgroeße - */ - public int getTextSize() { - return textSize; - } - /** - Legt eine neue Textgroeße fest. - @param s Neue Textgroeße - @return Gibt an, ob sich die Textgroeße geaendert hat. Bei TRUE erfolgte bereits ein Redraw. - */ - public boolean setTextSize(int s) { - if(textSize != s && s > 0) { - textSize = s; - redraw(); - return true; - } - return false; - } - - /** - Gibt den aktuellen Text zurueck. - @return Der aktuelle Text - */ - public String getText() { - return text; - } - /** - Setzt den darzustellenden Text auf den neuen Wert. - @param s Der neue Text - @return Gibt an, ob sich der Text geaendert hat. Bei TRUE erfolgte bereits ein Redraw. - */ - public boolean setText(String s) { - if(text != s) { - text = s; - redraw(); - return true; - } - return false; - } - - public GreenfootImage getPicture() { - return null; - } - - public boolean setPicture(GreenfootImage i) { - return false; - } - - /** - Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. - */ - public void redraw() { - //picture = new GreenfootImage(text,textSize,Color.BLACK,Color.WHITE); - picture = new GreenfootImage(text,textSize,foreC,backC); - super.redraw(); - } -} +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; +import java.awt.Graphics2D; + +/** + Diese Klasse stellt einen Button dar. + Als funktionelles Vorbild dafuer haelt der Button aus dem .NET-Framework fuer UWP-Apps dar. + + @author Felix Stupp + @version 20.05.2016 +*/ +public class Button extends Bildbutton { + + private int textSize = 32; // as default text size + private String text = ""; + + /** + Erstellt einen Button mit dem gegebenen Text und der zugehoerigen Textgroeße. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgroeße, in der der Button den Text darstellen soll. + */ + public Button(String txt, int size) { + super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK)); + text = txt; + textSize = size; + redraw(); + } + /** + Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ + public Button(ButtonEvent h) { + super(h); + redraw(); + } + /** + Erstellt einen Button mit dem gegebenen Text, der zugehoerigen Textgroeße und dem gegebenen Objekt als Event-Handler. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgroeße, in der der Button den Text darstellen soll. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ + public Button(String txt, int size, ButtonEvent h) { + super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK),h); + text = txt; + textSize = size; + redraw(); + } + + /** + Gibt die aktelle Textgroeße zurueck. + @return Aktuelle Textgroeße + */ + public int getTextSize() { + return textSize; + } + /** + Legt eine neue Textgroeße fest. + @param s Neue Textgroeße + @return Gibt an, ob sich die Textgroeße geaendert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setTextSize(int s) { + if(textSize != s && s > 0) { + textSize = s; + redraw(); + return true; + } + return false; + } + + /** + Gibt den aktuellen Text zurueck. + @return Der aktuelle Text + */ + public String getText() { + return text; + } + /** + Setzt den darzustellenden Text auf den neuen Wert. + @param s Der neue Text + @return Gibt an, ob sich der Text geaendert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setText(String s) { + if(text != s) { + text = s; + redraw(); + return true; + } + return false; + } + + public GreenfootImage getPicture() { + return null; + } + + public boolean setPicture(GreenfootImage i) { + return false; + } + + /** + Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. + */ + public void redraw() { + //picture = new GreenfootImage(text,textSize,Color.BLACK,Color.WHITE); + picture = new GreenfootImage(text,textSize,foreC,backC); + super.redraw(); + } +} diff --git a/ButtonEvent.java b/zweiundvierzig/ButtonEvent.java similarity index 92% rename from ButtonEvent.java rename to zweiundvierzig/ButtonEvent.java index 9a60fc6..f26d6ba 100644 --- a/ButtonEvent.java +++ b/zweiundvierzig/ButtonEvent.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; /** diff --git a/Colours.java b/zweiundvierzig/Colours.java similarity index 97% rename from Colours.java rename to zweiundvierzig/Colours.java index db56fb9..affcfac 100644 --- a/Colours.java +++ b/zweiundvierzig/Colours.java @@ -1,223 +1,227 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.awt.Color; -import javax.swing.JOptionPane; - -/** - * Write a description of class Colors here. - * - * @author (your name) - * @version (a version number or a date) - */ -public class Colours extends World implements ButtonEvent -{ - Bildbutton schwarz = new Bildbutton (new GreenfootImage("SchwarzeArmeeSkal.png"), this); - Bildbutton blau = new Bildbutton (new GreenfootImage("BlaueArmeeSkal.png"), this); - Bildbutton rot = new Bildbutton (new GreenfootImage("RoteArmeeSkal.png"), this); - Bildbutton gelb = new Bildbutton (new GreenfootImage("GelbeArmeeSkal.png"), this); - Bildbutton lila = new Bildbutton (new GreenfootImage("LilaArmeeSkal.png"), this); - Bildbutton gruen = new Bildbutton (new GreenfootImage("GrueneArmeeSkal.png"), this); - Button weiter = new Button ("Weiter", 16, this); - int[] color = new int [5]; - String[] pn = new String [5]; - int x = 0; - boolean possw = true; // schwarz - boolean posbl = true; // blau - boolean posgr = true; // gruen - boolean posrt = true; // rot - boolean posgb = true; // gelb - boolean posli = true; // lila - int sw = 1; - int bl = 2; - int gr = 3; - int rt = 4; - int gb = 5; - int li = 6; - - Label header = new Label("Klicke auf eine Farbe, um einen Spieler hinzuzufuegen:",16); - Button remove = new Button("Rueckgaengig",16,this); - Label pl1 = new Label("",22); - Label pl2 = new Label("",22); - Label pl3 = new Label("",22); - Label pl4 = new Label("",22); - Label pl5 = new Label("",22); - - /** - * Constructor for objects of class Colors. - * - */ - public Colours(int x, int y, int z) - { - super(x, y, z); - setBackground(Start_Load.backgroundImage); - - Bildbutton[] bList = new Bildbutton[] {schwarz,gelb,blau,gruen,rot,lila,weiter,remove}; - Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5}; - - addObject(header,200,15); - - addObject(schwarz, 80, 50); - addObject ( blau, 240, 50); - addObject ( gruen, 400, 50); - addObject ( rot, 560, 50); - addObject(gelb, 720, 50); - addObject(lila, 880, 50); - addObject(remove,300,160); - addObject (weiter, 510,160); - - addObject(pl1,355,360); - addObject(pl2,355,380); - addObject(pl3,355,400); - addObject(pl4,355,420); - addObject(pl5,355,440); - - //schwarz.setForeColor(Color.black); - //gelb.setForeColor(Color.yellow); - //blau.setForeColor(Color.blue); - //gruen.setForeColor(Color.green); - //rot.setForeColor(Color.red); - //lila.setForeColor(new Color(161,70,255)); - - pl1.setForeColor(Color.black); - pl2.setForeColor(Color.black); - pl3.setForeColor(Color.black); - pl4.setForeColor(Color.black); - pl5.setForeColor(Color.black); - - for(int i = 0; i < bList.length; i++) { - bList[i].setSize(164,100); - } - for(int i = 0; i < lList.length; i++) { - lList[i].setBackColor(new Color(0,0,0,0)); - } - - redraw(); - } - // ueberprueft, ob ein Farbbutton geklickt wurde - //ueberprueft, ob die Farbe noch nicht ausgewaehlt wurde - // Wenn alle Bedingungen erfuellt wurden: - // Setzt die aktuelle Stelle des Farbarrays gleich der Zahl der aktuellen Farbe - // erhoeht die Variable zum Durchzaehlen um eins - // verhindert durch falschsetzten einer Variable die Wiederauswahl einer Farbe - // wenn Weiter geklickt wurde und x groeßer 1 ist wird eine neue Welt Map erzeugt, - //der per Konstruktor die Daten der Colorklasse uebertragen werden, dannach wird die Map die aktive Welt - public void buttonClicked (Bildbutton b) - { - if (x < 5) { - if (b == schwarz && possw == true) { - color[x] = sw; - pn[x]=getName(x,"Schwarz"); - if(pn[x].length() > 0) { - x+=1; - possw = false; - } - } else if (b == blau && posbl == true) { - color[x] = bl; - pn[x]=getName(x,"Blau"); - if(pn[x].length() > 0) { - x+=1; - posbl = false; - } - } else if (b == gruen && posgr == true ) { - color[x] = gr; - pn[x]=getName(x,"Gruen"); - if(pn[x].length() > 0) { - x+=1; - posgr = false; - } - } else if (b == rot && posrt == true) { - color[x] = rt; - pn[x]=getName(x,"Rot"); - if(pn[x].length() > 0) { - x+=1; - posrt = false; - } - } else if (b == gelb && posgb == true) { - color [x] = gb; - pn[x]=getName(x,"Gelb"); - if(pn[x].length() > 0) { - x+=1; - posgb = false; - } - } else if (b == lila && posli == true) { - color [x] = li; - pn[x]=getName(x,"Lila"); - if(pn[x].length() > 0) { - x+=1; - posli = false; - } - } - } - if(b == remove && x > 0) { - x -= 1; - switch(color[x]) { - case 1: possw = true; break; - case 2: posbl = true; break; - case 3: posgr = true; break; - case 4: posrt = true; break; - case 5: posgb = true; break; - case 6: posli = true; break; - } - } - if ( b == weiter && x > 2 ) - { - String[] newpn = new String[x]; - int[] newcolor = new int[x]; - for (int i = 0; i< x; i++) - { - newpn[i] = pn[i]; - newcolor[i] = color[i]; - } - World m = new Map(newcolor,x,newpn); - Greenfoot.setWorld(m); - } - redraw(); - } - - private Color getC(boolean pos) { - if(x >= 5) { - return Color.gray; - } - return (pos) ? Color.lightGray : Color.gray; - } - - /** - Passt alle adaptiven Parameter automatisch an. - */ - private void redraw() { - schwarz.setBackColor(getC(possw)); - blau.setBackColor(getC(posbl)); - gruen.setBackColor(getC(posgr)); - rot.setBackColor(getC(posrt)); - lila.setBackColor(getC(posli)); - gelb.setBackColor(getC(posgb)); - remove.setBackColor((x > 0) ? Color.black : Color.gray); - weiter.setBackColor((x > 2) ? Color.black : Color.gray); - pl1.setText(""); - pl2.setText(""); - pl3.setText(""); - pl4.setText(""); - pl5.setText(""); - switch(x) { - case 5: - pl5.setText(pn[4]); - case 4: - pl4.setText(pn[3]); - case 3: - pl3.setText(pn[2]); - case 2: - pl2.setText(pn[1]); - case 1: - pl1.setText(pn[0]); - } - } - - private String getName(int id, String col) { - String name = JOptionPane.showInputDialog(null, "Wie soll Spieler Nr. "+(id+1)+" mit der Farbe "+col+" heißen?"); - if(name == null) { - name = ""; - } - return name; - } -} - - +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; +import javax.swing.JOptionPane; + +/** + * Write a description of class Colors here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class Colours extends World implements ButtonEvent +{ + Bildbutton schwarz = new Bildbutton (new GreenfootImage("SchwarzeArmeeSkal.png"), this); + Bildbutton blau = new Bildbutton (new GreenfootImage("BlaueArmeeSkal.png"), this); + Bildbutton rot = new Bildbutton (new GreenfootImage("RoteArmeeSkal.png"), this); + Bildbutton gelb = new Bildbutton (new GreenfootImage("GelbeArmeeSkal.png"), this); + Bildbutton lila = new Bildbutton (new GreenfootImage("LilaArmeeSkal.png"), this); + Bildbutton gruen = new Bildbutton (new GreenfootImage("GrueneArmeeSkal.png"), this); + Button weiter = new Button ("Weiter", 16, this); + int[] color = new int [5]; + String[] pn = new String [5]; + int x = 0; + boolean possw = true; // schwarz + boolean posbl = true; // blau + boolean posgr = true; // gruen + boolean posrt = true; // rot + boolean posgb = true; // gelb + boolean posli = true; // lila + int sw = 1; + int bl = 2; + int gr = 3; + int rt = 4; + int gb = 5; + int li = 6; + + Label header = new Label("Klicke auf eine Farbe, um einen Spieler hinzuzufuegen:",16); + Button remove = new Button("Rueckgaengig",16,this); + Label pl1 = new Label("",22); + Label pl2 = new Label("",22); + Label pl3 = new Label("",22); + Label pl4 = new Label("",22); + Label pl5 = new Label("",22); + + /** + * Constructor for objects of class Colors. + * + */ + public Colours(int x, int y, int z) + { + super(x, y, z); + setBackground(Start_Load.backgroundImage); + + Bildbutton[] bList = new Bildbutton[] {schwarz,gelb,blau,gruen,rot,lila,weiter,remove}; + Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5}; + + addObject(header,200,15); + + addObject(schwarz, 80, 50); + addObject ( blau, 240, 50); + addObject ( gruen, 400, 50); + addObject ( rot, 560, 50); + addObject(gelb, 720, 50); + addObject(lila, 880, 50); + addObject(remove,300,160); + addObject (weiter, 510,160); + + addObject(pl1,355,360); + addObject(pl2,355,380); + addObject(pl3,355,400); + addObject(pl4,355,420); + addObject(pl5,355,440); + + //schwarz.setForeColor(Color.black); + //gelb.setForeColor(Color.yellow); + //blau.setForeColor(Color.blue); + //gruen.setForeColor(Color.green); + //rot.setForeColor(Color.red); + //lila.setForeColor(new Color(161,70,255)); + + pl1.setForeColor(Color.black); + pl2.setForeColor(Color.black); + pl3.setForeColor(Color.black); + pl4.setForeColor(Color.black); + pl5.setForeColor(Color.black); + + for(int i = 0; i < bList.length; i++) { + bList[i].setSize(164,100); + } + for(int i = 0; i < lList.length; i++) { + lList[i].setBackColor(new Color(0,0,0,0)); + } + + redraw(); + } + // ueberprueft, ob ein Farbbutton geklickt wurde + //ueberprueft, ob die Farbe noch nicht ausgewaehlt wurde + // Wenn alle Bedingungen erfuellt wurden: + // Setzt die aktuelle Stelle des Farbarrays gleich der Zahl der aktuellen Farbe + // erhoeht die Variable zum Durchzaehlen um eins + // verhindert durch falschsetzten einer Variable die Wiederauswahl einer Farbe + // wenn Weiter geklickt wurde und x groeßer 1 ist wird eine neue Welt Map erzeugt, + //der per Konstruktor die Daten der Colorklasse uebertragen werden, dannach wird die Map die aktive Welt + public void buttonClicked (Bildbutton b) + { + if (x < 5) { + if (b == schwarz && possw == true) { + color[x] = sw; + pn[x]=getName(x,"Schwarz"); + if(pn[x].length() > 0) { + x+=1; + possw = false; + } + } else if (b == blau && posbl == true) { + color[x] = bl; + pn[x]=getName(x,"Blau"); + if(pn[x].length() > 0) { + x+=1; + posbl = false; + } + } else if (b == gruen && posgr == true ) { + color[x] = gr; + pn[x]=getName(x,"Gruen"); + if(pn[x].length() > 0) { + x+=1; + posgr = false; + } + } else if (b == rot && posrt == true) { + color[x] = rt; + pn[x]=getName(x,"Rot"); + if(pn[x].length() > 0) { + x+=1; + posrt = false; + } + } else if (b == gelb && posgb == true) { + color [x] = gb; + pn[x]=getName(x,"Gelb"); + if(pn[x].length() > 0) { + x+=1; + posgb = false; + } + } else if (b == lila && posli == true) { + color [x] = li; + pn[x]=getName(x,"Lila"); + if(pn[x].length() > 0) { + x+=1; + posli = false; + } + } + } + if(b == remove && x > 0) { + x -= 1; + switch(color[x]) { + case 1: possw = true; break; + case 2: posbl = true; break; + case 3: posgr = true; break; + case 4: posrt = true; break; + case 5: posgb = true; break; + case 6: posli = true; break; + } + } + if ( b == weiter && x > 2 ) + { + String[] newpn = new String[x]; + int[] newcolor = new int[x]; + for (int i = 0; i< x; i++) + { + newpn[i] = pn[i]; + newcolor[i] = color[i]; + } + World m = new Map(newcolor,x,newpn); + Greenfoot.setWorld(m); + } + redraw(); + } + + private Color getC(boolean pos) { + if(x >= 5) { + return Color.gray; + } + return (pos) ? Color.lightGray : Color.gray; + } + + /** + Passt alle adaptiven Parameter automatisch an. + */ + private void redraw() { + schwarz.setBackColor(getC(possw)); + blau.setBackColor(getC(posbl)); + gruen.setBackColor(getC(posgr)); + rot.setBackColor(getC(posrt)); + lila.setBackColor(getC(posli)); + gelb.setBackColor(getC(posgb)); + remove.setBackColor((x > 0) ? Color.black : Color.gray); + weiter.setBackColor((x > 2) ? Color.black : Color.gray); + pl1.setText(""); + pl2.setText(""); + pl3.setText(""); + pl4.setText(""); + pl5.setText(""); + switch(x) { + case 5: + pl5.setText(pn[4]); + case 4: + pl4.setText(pn[3]); + case 3: + pl3.setText(pn[2]); + case 2: + pl2.setText(pn[1]); + case 1: + pl1.setText(pn[0]); + } + } + + private String getName(int id, String col) { + String name = JOptionPane.showInputDialog(null, "Wie soll Spieler Nr. "+(id+1)+" mit der Farbe "+col+" heißen?"); + if(name == null) { + name = ""; + } + return name; + } +} + + diff --git a/Debug3.java b/zweiundvierzig/Debug3.java similarity index 87% rename from Debug3.java rename to zweiundvierzig/Debug3.java index 29f797d..9a4340b 100644 --- a/Debug3.java +++ b/zweiundvierzig/Debug3.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + public class Debug3 extends Map_World { public Debug3() { super( diff --git a/Debug4.java b/zweiundvierzig/Debug4.java similarity index 88% rename from Debug4.java rename to zweiundvierzig/Debug4.java index b9f47c7..45be536 100644 --- a/Debug4.java +++ b/zweiundvierzig/Debug4.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + public class Debug4 extends Map_World { public Debug4() { super( diff --git a/Debug5.java b/zweiundvierzig/Debug5.java similarity index 89% rename from Debug5.java rename to zweiundvierzig/Debug5.java index ef84538..6e96e26 100644 --- a/Debug5.java +++ b/zweiundvierzig/Debug5.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + public class Debug5 extends Map_World { public Debug5() { super( diff --git a/DefenderDices.java b/zweiundvierzig/DefenderDices.java similarity index 93% rename from DefenderDices.java rename to zweiundvierzig/DefenderDices.java index b3a5c4a..78b26f3 100644 --- a/DefenderDices.java +++ b/zweiundvierzig/DefenderDices.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; diff --git a/Dice.java b/zweiundvierzig/Dice.java similarity index 98% rename from Dice.java rename to zweiundvierzig/Dice.java index 75454e2..992b3d8 100644 --- a/Dice.java +++ b/zweiundvierzig/Dice.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** diff --git a/Dice_Defender.java b/zweiundvierzig/Dice_Defender.java similarity index 98% rename from Dice_Defender.java rename to zweiundvierzig/Dice_Defender.java index e61981d..5f144c9 100644 --- a/Dice_Defender.java +++ b/zweiundvierzig/Dice_Defender.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + /* Hinweis zum Verbleib der Klasse: Diese Klasse soll, da sie zurzeit weder vollstaendig, noch in Verwendung, noch in der Architektur definiert ist, zum Beta-Meilenstein entfernt werden. diff --git a/Dice_Offender.java b/zweiundvierzig/Dice_Offender.java similarity index 98% rename from Dice_Offender.java rename to zweiundvierzig/Dice_Offender.java index ef59072..9519ed8 100644 --- a/Dice_Offender.java +++ b/zweiundvierzig/Dice_Offender.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + /* Hinweis zum Verbleib der Klasse: Diese Klasse soll, da sie zurzeit weder vollstaendig, noch in Verwendung, noch in der Architektur definiert ist, zum Beta-Meilenstein entfernt werden. diff --git a/DicesList.java b/zweiundvierzig/DicesList.java similarity index 98% rename from DicesList.java rename to zweiundvierzig/DicesList.java index 934a74d..4b5fce7 100644 --- a/DicesList.java +++ b/zweiundvierzig/DicesList.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; /** diff --git a/GUI_Interface.java b/zweiundvierzig/GUI_Interface.java similarity index 96% rename from GUI_Interface.java rename to zweiundvierzig/GUI_Interface.java index 137a1aa..7a79fec 100644 --- a/GUI_Interface.java +++ b/zweiundvierzig/GUI_Interface.java @@ -1,106 +1,110 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.awt.Color; - -/** - Oberklasse fuer saemtliche GUI Objekte, wie Labels und Buttons - - @author Felix Stupp - @version 04.06.2016 -*/ -public abstract class GUI_Interface extends Actor -{ - /** - Die Breite des Objektes - */ - protected int sx = 20; - /** - Die Hoehe des Objektes - */ - protected int sy = 20; - /** - Die Hintergrundfarbe des Objektes - */ - protected Color backC = Color.BLACK; - /** - Die Vordergrundfarbe (meist die Textfarbe) des Objektes - */ - protected Color foreC = Color.WHITE; - - /** - Gibt die Breite des Objektes zurueck. - @return Die aktuelle Breite - */ - public int getWidth() { - return sx; - } - /** - Gibt die Hoehe des Objektes zurueck. - @return Die aktuelle Hoehe - */ - public int getHeight() { - return sy; - } - /** - Legt die Groeße des Objektes neu fest und zeichnet es danach damit neu. - Je nach Objekttyp kann diese Groeße wieder vom Objekt selbst angepasst werden, falls noetig. - @param w Die neue Breite - @param h Die neue Hoehe - */ - public void setSize(int w, int h) { - if(w < 1 || h < 1) { - return; - } - sx = w; - sy = h; - redraw(); - } - - /** - Gibt die aktuelle Hintergrundfarbe des Objektes zurueck. - @return Die aktuelle Hintergrundfarbe als System.awt.Color - */ - public Color getBackColor() { - return backC; - } - /** - Legt die Hintergrundfarbe des Objektes fest. - @param c Die neue Hintergrundfarbe als System.awt.Color - @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. - */ - public boolean setBackColor(Color c) { - if(!c.equals(backC)) { - backC = c; - redraw(); - return true; - } - return false; - } - - /** - Gibt die aktuelle Vordergrundfarbe (meist die Textfarbe) des Objektes zurueck. - @return Die aktuelle Vordergrundfarbe als System.awt.Color - */ - public Color getForeColor() { - return foreC; - } - /** - Legt die Vordergrundfarbe (meist die Textfarbe) des Objektes fest. - @param c Die neue Vordergrundfarbe als System.awt.Color - @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. - */ - public boolean setForeColor(Color c) { - if(!c.equals(foreC)) { - foreC = c; - redraw(); - return true; - } - return false; - } - - public void act() {} - - /** - Diese Funktion soll die erneute Zeichnung des Objekts erzwingen und wird daher auch von (fast) allen set-Methoden aufgerufen, sollte der neue Wert sich von dem alten unterscheiden. - */ - public abstract void redraw(); -} +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; + +/** + Oberklasse fuer saemtliche GUI Objekte, wie Labels und Buttons + + @author Felix Stupp + @version 04.06.2016 +*/ +public abstract class GUI_Interface extends Actor +{ + /** + Die Breite des Objektes + */ + protected int sx = 20; + /** + Die Hoehe des Objektes + */ + protected int sy = 20; + /** + Die Hintergrundfarbe des Objektes + */ + protected Color backC = Color.BLACK; + /** + Die Vordergrundfarbe (meist die Textfarbe) des Objektes + */ + protected Color foreC = Color.WHITE; + + /** + Gibt die Breite des Objektes zurueck. + @return Die aktuelle Breite + */ + public int getWidth() { + return sx; + } + /** + Gibt die Hoehe des Objektes zurueck. + @return Die aktuelle Hoehe + */ + public int getHeight() { + return sy; + } + /** + Legt die Groeße des Objektes neu fest und zeichnet es danach damit neu. + Je nach Objekttyp kann diese Groeße wieder vom Objekt selbst angepasst werden, falls noetig. + @param w Die neue Breite + @param h Die neue Hoehe + */ + public void setSize(int w, int h) { + if(w < 1 || h < 1) { + return; + } + sx = w; + sy = h; + redraw(); + } + + /** + Gibt die aktuelle Hintergrundfarbe des Objektes zurueck. + @return Die aktuelle Hintergrundfarbe als System.awt.Color + */ + public Color getBackColor() { + return backC; + } + /** + Legt die Hintergrundfarbe des Objektes fest. + @param c Die neue Hintergrundfarbe als System.awt.Color + @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setBackColor(Color c) { + if(!c.equals(backC)) { + backC = c; + redraw(); + return true; + } + return false; + } + + /** + Gibt die aktuelle Vordergrundfarbe (meist die Textfarbe) des Objektes zurueck. + @return Die aktuelle Vordergrundfarbe als System.awt.Color + */ + public Color getForeColor() { + return foreC; + } + /** + Legt die Vordergrundfarbe (meist die Textfarbe) des Objektes fest. + @param c Die neue Vordergrundfarbe als System.awt.Color + @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setForeColor(Color c) { + if(!c.equals(foreC)) { + foreC = c; + redraw(); + return true; + } + return false; + } + + public void act() {} + + /** + Diese Funktion soll die erneute Zeichnung des Objekts erzwingen und wird daher auch von (fast) allen set-Methoden aufgerufen, sollte der neue Wert sich von dem alten unterscheiden. + */ + public abstract void redraw(); +} diff --git a/GeneralMap.java b/zweiundvierzig/GeneralMap.java similarity index 97% rename from GeneralMap.java rename to zweiundvierzig/GeneralMap.java index 5455ecc..b8adebe 100644 --- a/GeneralMap.java +++ b/zweiundvierzig/GeneralMap.java @@ -1,722 +1,726 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.lang.Math; -import java.util.Arrays; -import java.awt.Color; -import greenfoot.MouseInfo.*; -import javax.swing.JOptionPane; -import java.awt.Color; - -/** -Oberklasse fuer verschiedene Maps; -neue Maps werden als Unterklasse dieser Klasse eingefuegt. - -@author GruenerWal, MaxiJohl, Felix Stupp, Samuel -@version 0.3.0 - */ -public abstract class GeneralMap extends World implements ButtonEvent -{ - /* - Felder, im Moment nur Anzahl der Provinzen - Spaeter evtl. weitere Werte wie Schwierigkeit denkbar - */ - Button modus = new Button("Kampf\nbeginnen",25,this); - - private final int X_OFFSET = 200; // 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 nuetzlich, wenn die Karte beispielsweise nur noch 80% der Originalgroeße bei ihrer Darstellung groß ist. - Bei diesem Beispiel waere hier, neben dem Offset oben, der Wert 0.8 einzutragen. - */ - private final double SCALE_VALUE = 1; - - protected enum GameStates { - SETZEN, - KAMPF, - VERSCHIEBEN - } - - protected Province[] provinces = new Province[] {null}; - protected int[] continentBoni; - protected Player[] players; - - protected int currentPlayer = 0; - private int statPlayer = -1; - protected GameStates status = GameStates.SETZEN; - - protected int provinceCount; - protected int armyMinimum; - - private Label statLabel1 = new Label("Lade Statistiken ...",20); - private Label statLabel2 = new Label("Lade Statistiken ...",20); - - /** - Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays fuer 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[] playerList, int[] colorList) - { - super(1600,900,1); - players = new Player[playerList.length]; - modus.setSize(100,100); - modus.setBackColor(Color.white); - modus.setForeColor(Color.black); - addObject(statLabel1, 270, 800); - addObject(statLabel2, 500, 800); - addObject( modus, 1500, 808); - for (int i = 0; i < playerList.length; i++) { - players[i] = new Player(i,playerList[i],colorList[i]); - addObject(players[i],0,0); - } - - createPlayerObjects(playerList.length); - - players[2].addToStars(1); - - if ( playerList.length > 3 ) - { - players[3].addToStars(1); - } - if ( playerList.length > 4 ) - { - players[4].addToStars(2); - } - } - - public int currentPlayer() - { - return currentPlayer; - } - - public void redrawGameStates() - { - int textSize = 20; - int X = 422; - int Y = 677; - - if(status == GameStates.KAMPF) - { - GreenfootImage GameStates = new GreenfootImage("KAMPF!!! Waehle die Provinzen aus, die kaempfen sollen, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); - GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); - GameStatesEmpty.drawImage(GameStates,0,0); - GreenfootImage States = new GreenfootImage("MapWorldFight.png"); - States.drawImage(GameStatesEmpty,X,Y); - setBackground(States); - } - if(status == GameStates.VERSCHIEBEN) - { - GreenfootImage GameStates = new GreenfootImage("VERSCHIEBEN! Waehle die Provinzen aus, bei denen du schubsen moechtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); - GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); - - GameStatesEmpty.drawImage(GameStates,0,0); - GreenfootImage States = new GreenfootImage("MapWorldMove.png"); - States.drawImage(GameStatesEmpty,X,Y); - setBackground(States); - } - if(status == GameStates.SETZEN) - { - GreenfootImage GameStates = new GreenfootImage("SETZEN! Waehle die Provinz aus, der du schenken moechtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); // "Setzten" Lern Deutsch, Samuel - GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); - GameStatesEmpty.drawImage(GameStates,0,0); - GreenfootImage States = new GreenfootImage("MapWorld.png"); - States.drawImage(GameStatesEmpty,X,Y); - setBackground(States); - } - - } - - private void createPlayerObjects(int playerCount) - { - if(playerCount > 6) { - playerCount = 6; // Um denselben Effekt wie beim Code zuvor zu erzeugen - } - switch (playerCount) { - case 6: - players[5].setLocation(1512,450); - case 5: - players[4].setLocation(1512,280); - case 4: - players[3].setLocation(1512,110); - case 3: - players[2].setLocation(82,450); - case 2: - players[1].setLocation(82,280); - } - players[0].setLocation(82,110); - } - - /** - Fuegt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu. - */ - protected void initProvinces() { - for(int i = 1; i < provinces.length; i++) { - addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET); - } - } - - private void redrawProvinces() { - for(int i = 1; i < provinces.length; i++) { - provinces[i].redrawProvince(); - } - } - - protected void redrawPlayers() { - for(int i = 0; i < players.length; i++) { - players[i].reloadMaxInfluence(); - players[i].reloadMaxEntities(); - players[i].redrawPlayer(); - } - } - - /** - Zeigt die angegebene Nachricht in einem JOptionPane Dialogfeld an. - @param msg Die anzuzeigend e Nachricht - */ - private void showDialog(String msg) { - JOptionPane.showMessageDialog(null,msg); - } - - public void act() { - if (status == GameStates.SETZEN) { - actPlace(); - } else if(status == GameStates.KAMPF) { - actFight(); - } else if (status == GameStates.VERSCHIEBEN) { - actMove(); - } - redrawGameStates(); - } - - /** - Gibt die Anzahl der vorhandenen Spieler aus. - */ - public int getPlayerCount() - { - return players.length; - } - - /** - * Gibt die Farbe des angefragten Spielers heraus. - * @param int pID -> Farbe des Spielers - */ - public int getPlayerColor(int pID) - { - return players[pID].getColor(); - } - - /** - Gibt die PlayerID des aktuellen Spielers an. - @return PlayerID des aktuellen Spielers - */ - public int getCurrentPlayerID() { - return currentPlayer; - } - - /** - 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 gehoert. - @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 zurueck. - @return Die Anzahl der Sterne des aktuellen Spielers - */ - public int getPlayerStars() - { - return players[currentPlayer].getStars(); - } - - /** - Gibt die ID des Spielers zurueck, dem die gefragte Provinz gehoert. - @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 zurueck. - @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; - } - - /** - Zaehlt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehoert. - @param playerID Die ID des Spielers, fuer den die Einheiten gezaehlt werden sollen. - @return Die Anzahl der Einheiten, die dem Spieler gehoeren. - */ - public int getPlayerEntityCount(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; - } - - private void resetClicked() { - for(int i = 1; i <= (provinces.length - 1); i++) { - provinces[i].hasClicked(); - } - } - - public void reloadPlayerStat() { - Player cP = players[(statPlayer == -1) ? currentPlayer : statPlayer]; - cP.reloadMaxInfluence(); - cP.reloadMaxEntities(); - int[] stats = cP.getStatistics(); - statLabel1.setText( - "Provinz-Statistik" + - "\nAktuell: " + cP.getProvinceCount() + - "\nErobert: " + stats[0] + - "\nVerloren: " + stats[1] + - "\nMaximum: " + stats[2] - ); - statLabel2.setLocation(statLabel1.getX() + statLabel1.getWidth() + 20, statLabel2.getY()); - statLabel2.setText( - "Einheiten-Statistik" + - "\nAktuell: " + cP.getEntitiesCount() + - "\nAusgebildet: " + stats[3] + - "\nGefallen: " + stats[4] + - "\nMaximum: " + stats[5] - ); - } - - public void buttonClicked(Bildbutton b) { - if ( modus == b ) { - if(status==GameStates.SETZEN && freeArmies == 0 ) { - status=GameStates.KAMPF; - offenderProvince = null; - defenderProvince = null; - maxDiceOffender = ""; - maxDiceDefender = ""; - modus.setBackColor(Color.white); - modus.setForeColor(Color.black); - modus.setText("Kampf\nbeenden"); - } else if (status==GameStates.KAMPF) { - giveRandomStars(players[currentPlayer]); - status=GameStates.VERSCHIEBEN; - savedProvince = null; - modus.setText("Naechster\nSpieler"); - } else if (status==GameStates.VERSCHIEBEN) { - freeArmies = -1; - if(currentPlayer >= players.length-1) - { - currentPlayer=0; - } - else - { - currentPlayer+=1; - } - status=GameStates.SETZEN; - modus.setText("Kampf\nbeginnen"); - } - redrawProvinces(); - redrawPlayers(); - reloadPlayerStat(); - } - } - - // Kampfsystem - - Province offenderProvince; - Province defenderProvince; - String maxDiceOffender = ""; - String maxDiceDefender = ""; - - private void actFight() { - for(int i = 1; i <= (provinces.length - 1); i++) { - if (provinces[i].hasClicked() == true) { - if(provinces[i].getOwner() == currentPlayer) { - OffenderProvince(provinces[i]); - } else { - DefenderProvince(provinces[i]); - } - } - } - } - - private void OffenderProvince(Province p) - { - if(p.getEntityCount() > 1) { - if(offenderProvince != null) { - offenderProvince.redrawProvince(); - } - offenderProvince = p; - p.redrawProvince(2); - // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als angreifende Provinz ausgewaehlt! Sie gehoert Spieler" + provinces[i].getOwner()); - chooser(); - } - } - - private void DefenderProvince(Province p) - { - if(defenderProvince != null) { - defenderProvince.redrawProvince(); - } - defenderProvince = p; - p.redrawProvince(3); - // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als verteidigende Provinz ausgewaehlt! Sie gehoert Spieler" + provinces[i].getOwner()); - chooser(); - } - - private void chooser() - { - if(offenderProvince == null || defenderProvince == null) { - return; - } - if(!offenderProvince.isProvinceNear(defenderProvince.getID())) { - JOptionPane.showMessageDialog(null,"Die Provinzen liegen nicht mal ansatzweise nebeneinander!"); - offenderProvince.redrawProvince(); - defenderProvince.redrawProvince(); - offenderProvince = null; - defenderProvince = null; - return; - } - //System.out.println("Es wird gewuerfelt!"); - Dice_Offender diceOffender = new Dice_Offender(); - // System.out.println("Der Angreifer ereichte folgende Wuerfelzahlen:"); - int[] maxDiceOffenderArray = diceOffender.dice_offender(offenderProvince.getEntityCount()); - Dice_Defender diceDefender = new Dice_Defender(); - // System.out.println("Der Verteidiger ereichte folgende Wuerfelzahlen:"); - int[] maxDiceDefenderArray = diceDefender.dice_defender(defenderProvince.getEntityCount()); - Arrays.sort(maxDiceOffenderArray); - Arrays.sort(maxDiceDefenderArray); - maxDiceOffender = ""; - for(int i = 0;i<3;i++) - { - if(maxDiceOffenderArray[i] != 0) { - if(i == 0) - { - maxDiceOffender = "" + maxDiceOffenderArray[i]; - } - else - { - maxDiceOffender = maxDiceOffender + ", " + maxDiceOffenderArray[i]; - } - } - } - maxDiceDefender = ""; - for(int i = 0;i<2;i++) - { - if(maxDiceDefenderArray[i] != 0) { - if(i == 0) - { - maxDiceDefender = "" + maxDiceDefenderArray[i]; - } - else - { - maxDiceDefender = maxDiceDefender + ", " + maxDiceDefenderArray[i]; - } - } - } - JOptionPane.showMessageDialog(null,"Es wurde gewuerfelt. Der Angreifer erreichte folgende Wuerfelzahlen: " + maxDiceOffender + "\nDer Verteidiger erreichte diese Wuerfelzahlen: " + maxDiceDefender); - diceOffender = null; - diceDefender = null; - decider(maxDiceOffenderArray, maxDiceDefenderArray); - } - - // berechnet Zahlen und findet Gewinner; fuehrt Konsequenz aus - private void decider(int[] maxDiceOffender, int [] maxDiceDefender) - { - Player offPl = players[offenderProvince.getOwner()]; - Player defPl = players[defenderProvince.getOwner()]; - - int maxDefender = maxDiceDefender[1]; - int maxOffender = maxDiceOffender[2]; - if (maxOffender > maxDefender) - { - defenderProvince.removeFromEntities(1); - defPl.lostEntity(); - if (defenderProvince.getEntityCount() <= 0) { - defenderProvince.setOwner(offenderProvince.getOwner()); - offenderProvince.removeFromEntities(1); - defenderProvince.setEntityCount(1); - offPl.gotProvince(); - defPl.lostProvince(); - JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Die Provinz gehoert fortan dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ")."); - } else { - JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Dem Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + defenderProvince.getEntityCount() + " Einheiten."); - } - } - - if (maxOffender < maxDefender && offenderProvince.getEntityCount()>1) - { - offenderProvince.removeFromEntities(1); - offPl.lostEntity(); - JOptionPane.showMessageDialog(null,"Somit gewinnt der Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + "). Dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten."); - } - - if (maxOffender == maxDefender && offenderProvince.getEntityCount()>1) - { - offenderProvince.removeFromEntities(1); - offPl.lostEntity(); - JOptionPane.showMessageDialog(null,"Da es unentschieden ist, gewinnt der Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + "). Dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten."); - } - - offenderProvince.redrawProvince(); - defenderProvince.redrawProvince(); - offenderProvince = null; - defenderProvince = null; - } - - // Einheiten verschieben - - Province savedProvince = null; - - private void actMove() { - for ( int i = 1; i <= (provinces.length - 1); i++) { - if (provinces[i].hasClicked() == true) { - useProvincesToMove(provinces[i]); - break; - } - } - } - - /** - Nimmt zwei Provinzen entgegen, und fragt, wieviele Einheiten vom ersten zum zweiten Eintrag verschoben werden sollen. - ueberprueft, ob eine Verschiebung moeglich ist und fuehrt sie bei Erfolg aus. - */ - private void moveEntities(Province sourceProvince, Province destinationProvince) - { - String toMoveString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du verschieben?"); - int entitiesToMove = Utils.StringToInt(toMoveString); - - if (entitiesToMove == 0) { - JOptionPane.showMessageDialog(null,"Bitte eine Zahl eingeben, Kommandant " + getPlayerName() + "."); - return; - } - - if ( (sourceProvince.getEntityCount() - entitiesToMove) > 0) - { - sourceProvince.removeFromEntities(entitiesToMove); - destinationProvince.addToEntities(entitiesToMove); - JOptionPane.showMessageDialog(null,"Einheiten erfolgreich verschoben, Kommandant " + getPlayerName() + "."); - } - - else if ( (sourceProvince.getEntityCount() - entitiesToMove) <= 0) - { - JOptionPane.showMessageDialog(null,"Du hast nicht genuegend Einheiten, um die gewuenschte Anzahl von " + sourceProvince.getDisplayName() + " nach " + destinationProvince.getDisplayName() + " zu verschieben, Koehler."); - } - } - - /** - Speichert ein gegebene Provinz als savedProvince ein, insofern dieser Platz nicht bereits belegt ist. - Ist er das, so wird ueberprueft, ob eine neue, an savedProvince angrenzende Provinz angeklickt wurde. - Ist dies der Fall, werden beide Provinzen an moveEntities uebergeben. - */ - private void useProvincesToMove(Province givenProvince) - { - if(givenProvince.getOwner() != currentPlayer) { - return; - } - if (savedProvince == null) - { - savedProvince = givenProvince; - givenProvince.redrawProvince(2); - } - else if ((savedProvince != null) && (givenProvince != savedProvince)) - { - if (givenProvince.isProvinceNear(savedProvince.getID()) == true) - { - moveEntities(savedProvince,givenProvince); - } - savedProvince.redrawProvince(); - savedProvince = null; - } - } - - // Einheiten setzen - - int freeArmies = -1; - - private void actPlace() - { - if ( freeArmies == -1 ) { - freeArmies = calculateArmies(); - players[currentPlayer].gotEntities(freeArmies); - } else if ( freeArmies == 0 ) { - modus.setBackColor(Color.white); - modus.setForeColor(Color.black); - } else { - modus.setBackColor(Color.black); - modus.setForeColor(Color.black); - } - for ( int i = 1; i <= (provinces.length - 1); i++) { - if (provinces[i].hasClicked() == true && provinces[i].getOwner() == currentPlayer) - { - String toUseString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du setzen? Du hast noch " + freeArmies + " freie Einheiten."); - int armiesToUse = Utils.StringToInt(toUseString); - if ( armiesToUse <= freeArmies ) - { - if ( armiesToUse > 0 ) - { - provinces[i].addToEntities(armiesToUse); - freeArmies = freeArmies- armiesToUse; - JOptionPane.showMessageDialog(null,"Einheiten erfolgreich gesetzt, Kommandant " + getPlayerName() + "."); - } - if ( armiesToUse < 0 ) - { - JOptionPane.showMessageDialog(null,"Willst du mich verarschen?"); - } - } - else - { - JOptionPane.showMessageDialog(null,"Nicht genuegend freie Einheiten."); - } - } - } - } - - private int calculateArmies() - { - int armiesToPlace; - Province[] continentArray; - boolean continentChecked = false; - - // 1. ArmyMinimum einbeziehen - armiesToPlace = armyMinimum; - - // 2. Einheiten durch Provinzen einbeziehen - armiesToPlace = armiesToPlace + Math.round(players[currentPlayer].getProvinceCount() / 3); - - // 3. Einheiten durch Kontinente - - // Kontinente durchgehen - for ( int i = 1; i < continentBoni.length; i++ ) - { - continentArray = giveContinentArray(i); - // Provinzen des aktuellen Kontinents durchgehen - for ( int p = 1; p >= continentArray.length; p++ ) - { - // Pruefen, ob eine Provinz NICHT dem aktuellen Spieler gehoert - if ( continentArray[p].getOwner() != currentPlayer ) - { - break; - } - // Wenn nicht, wird der Kontinent als gecheckt markiert - else - { - continentChecked = true; - } - } - if ( continentChecked == true ) - { - armiesToPlace = armiesToPlace + continentBoni[i]; - continentChecked = false; - } - } - - // 4. Einheiten durch Sterne - if ( players[currentPlayer].getStars() > 0) - { - String toUseString; - - if ( players[currentPlayer].getStars() == 1 ) - { - toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden? \n Du besitzt noch 1 Stern."); - } - else - { - toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden? \n Du besitzt noch " + players[currentPlayer].getStars() + " Sterne."); - } - - int starsToUse = Utils.StringToInt(toUseString); - - if ( starsToUse <= players[currentPlayer].getStars() ) - { - int[] starBoni = new int [] {1,2,4,7,10,13,17,21,25,30}; - if ( starsToUse > 0 && starsToUse < 11 ) - { - armiesToPlace = armiesToPlace + starBoni[starsToUse -1]; - } - if ( starsToUse < 0 && starsToUse > 10 ) - { - JOptionPane.showMessageDialog(null,"Ungueltige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben"); - } - } - else - { - JOptionPane.showMessageDialog(null,"Du besitzt nicht die erforderliche Anzahl an Sternen! \n Verarschen kannst du jemand anderen."); - } - } - return armiesToPlace; - } - - private Province[] giveContinentArray(int cID) - { - Province[] savedProvinces = new Province[provinceCount +1]; - Province[] continentProvinces; - int c = 0; - for (int i = 1; i <= provinceCount; i++) - { - if (provinces[i].getContinentID() == cID) - { - savedProvinces[i] = provinces[i]; - c++; - } - } - if ( c < 1 ) - { - return null; - } - else - { - return Utils.cutArray(savedProvinces); - } - } - - /** - * Gibt einem Spieler eine zufaellige Anzahl an Sternen zwischen 1 und 3. - * - * @param player Der Spieler, dem die Sterne gegeben werden - */ - - protected void giveRandomStars (Player player) - { - double zufallszahl = Math.random(); - - if ( zufallszahl <= 0.6 ) - { - players[currentPlayer].addToStars(1); - } - else if ( zufallszahl <= 0.9 ) - { - players[currentPlayer].addToStars(2); - } - else - { - players[currentPlayer].addToStars(3); - } - } +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.lang.Math; +import java.util.Arrays; +import java.awt.Color; +import greenfoot.MouseInfo.*; +import javax.swing.JOptionPane; +import java.awt.Color; + +/** +Oberklasse fuer verschiedene Maps; +neue Maps werden als Unterklasse dieser Klasse eingefuegt. + +@author GruenerWal, MaxiJohl, Felix Stupp, Samuel +@version 0.3.0 + */ +public abstract class GeneralMap extends World implements ButtonEvent +{ + /* + Felder, im Moment nur Anzahl der Provinzen + Spaeter evtl. weitere Werte wie Schwierigkeit denkbar + */ + Button modus = new Button("Kampf\nbeginnen",25,this); + + private final int X_OFFSET = 200; // 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 nuetzlich, wenn die Karte beispielsweise nur noch 80% der Originalgroeße bei ihrer Darstellung groß ist. + Bei diesem Beispiel waere hier, neben dem Offset oben, der Wert 0.8 einzutragen. + */ + private final double SCALE_VALUE = 1; + + protected enum GameStates { + SETZEN, + KAMPF, + VERSCHIEBEN + } + + protected Province[] provinces = new Province[] {null}; + protected int[] continentBoni; + protected Player[] players; + + protected int currentPlayer = 0; + private int statPlayer = -1; + protected GameStates status = GameStates.SETZEN; + + protected int provinceCount; + protected int armyMinimum; + + private Label statLabel1 = new Label("Lade Statistiken ...",20); + private Label statLabel2 = new Label("Lade Statistiken ...",20); + + /** + Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays fuer 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[] playerList, int[] colorList) + { + super(1600,900,1); + players = new Player[playerList.length]; + modus.setSize(100,100); + modus.setBackColor(Color.white); + modus.setForeColor(Color.black); + addObject(statLabel1, 270, 800); + addObject(statLabel2, 500, 800); + addObject( modus, 1500, 808); + for (int i = 0; i < playerList.length; i++) { + players[i] = new Player(i,playerList[i],colorList[i]); + addObject(players[i],0,0); + } + + createPlayerObjects(playerList.length); + + players[2].addToStars(1); + + if ( playerList.length > 3 ) + { + players[3].addToStars(1); + } + if ( playerList.length > 4 ) + { + players[4].addToStars(2); + } + } + + public int currentPlayer() + { + return currentPlayer; + } + + public void redrawGameStates() + { + int textSize = 20; + int X = 422; + int Y = 677; + + if(status == GameStates.KAMPF) + { + GreenfootImage GameStates = new GreenfootImage("KAMPF!!! Waehle die Provinzen aus, die kaempfen sollen, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); + GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); + GameStatesEmpty.drawImage(GameStates,0,0); + GreenfootImage States = new GreenfootImage("MapWorldFight.png"); + States.drawImage(GameStatesEmpty,X,Y); + setBackground(States); + } + if(status == GameStates.VERSCHIEBEN) + { + GreenfootImage GameStates = new GreenfootImage("VERSCHIEBEN! Waehle die Provinzen aus, bei denen du schubsen moechtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); + GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); + + GameStatesEmpty.drawImage(GameStates,0,0); + GreenfootImage States = new GreenfootImage("MapWorldMove.png"); + States.drawImage(GameStatesEmpty,X,Y); + setBackground(States); + } + if(status == GameStates.SETZEN) + { + GreenfootImage GameStates = new GreenfootImage("SETZEN! Waehle die Provinz aus, der du schenken moechtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); // "Setzten" Lern Deutsch, Samuel + GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); + GameStatesEmpty.drawImage(GameStates,0,0); + GreenfootImage States = new GreenfootImage("MapWorld.png"); + States.drawImage(GameStatesEmpty,X,Y); + setBackground(States); + } + + } + + private void createPlayerObjects(int playerCount) + { + if(playerCount > 6) { + playerCount = 6; // Um denselben Effekt wie beim Code zuvor zu erzeugen + } + switch (playerCount) { + case 6: + players[5].setLocation(1512,450); + case 5: + players[4].setLocation(1512,280); + case 4: + players[3].setLocation(1512,110); + case 3: + players[2].setLocation(82,450); + case 2: + players[1].setLocation(82,280); + } + players[0].setLocation(82,110); + } + + /** + Fuegt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu. + */ + protected void initProvinces() { + for(int i = 1; i < provinces.length; i++) { + addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET); + } + } + + private void redrawProvinces() { + for(int i = 1; i < provinces.length; i++) { + provinces[i].redrawProvince(); + } + } + + protected void redrawPlayers() { + for(int i = 0; i < players.length; i++) { + players[i].reloadMaxInfluence(); + players[i].reloadMaxEntities(); + players[i].redrawPlayer(); + } + } + + /** + Zeigt die angegebene Nachricht in einem JOptionPane Dialogfeld an. + @param msg Die anzuzeigend e Nachricht + */ + private void showDialog(String msg) { + JOptionPane.showMessageDialog(null,msg); + } + + public void act() { + if (status == GameStates.SETZEN) { + actPlace(); + } else if(status == GameStates.KAMPF) { + actFight(); + } else if (status == GameStates.VERSCHIEBEN) { + actMove(); + } + redrawGameStates(); + } + + /** + Gibt die Anzahl der vorhandenen Spieler aus. + */ + public int getPlayerCount() + { + return players.length; + } + + /** + * Gibt die Farbe des angefragten Spielers heraus. + * @param int pID -> Farbe des Spielers + */ + public int getPlayerColor(int pID) + { + return players[pID].getColor(); + } + + /** + Gibt die PlayerID des aktuellen Spielers an. + @return PlayerID des aktuellen Spielers + */ + public int getCurrentPlayerID() { + return currentPlayer; + } + + /** + 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 gehoert. + @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 zurueck. + @return Die Anzahl der Sterne des aktuellen Spielers + */ + public int getPlayerStars() + { + return players[currentPlayer].getStars(); + } + + /** + Gibt die ID des Spielers zurueck, dem die gefragte Provinz gehoert. + @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 zurueck. + @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; + } + + /** + Zaehlt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehoert. + @param playerID Die ID des Spielers, fuer den die Einheiten gezaehlt werden sollen. + @return Die Anzahl der Einheiten, die dem Spieler gehoeren. + */ + public int getPlayerEntityCount(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; + } + + private void resetClicked() { + for(int i = 1; i <= (provinces.length - 1); i++) { + provinces[i].hasClicked(); + } + } + + public void reloadPlayerStat() { + Player cP = players[(statPlayer == -1) ? currentPlayer : statPlayer]; + cP.reloadMaxInfluence(); + cP.reloadMaxEntities(); + int[] stats = cP.getStatistics(); + statLabel1.setText( + "Provinz-Statistik" + + "\nAktuell: " + cP.getProvinceCount() + + "\nErobert: " + stats[0] + + "\nVerloren: " + stats[1] + + "\nMaximum: " + stats[2] + ); + statLabel2.setLocation(statLabel1.getX() + statLabel1.getWidth() + 20, statLabel2.getY()); + statLabel2.setText( + "Einheiten-Statistik" + + "\nAktuell: " + cP.getEntitiesCount() + + "\nAusgebildet: " + stats[3] + + "\nGefallen: " + stats[4] + + "\nMaximum: " + stats[5] + ); + } + + public void buttonClicked(Bildbutton b) { + if ( modus == b ) { + if(status==GameStates.SETZEN && freeArmies == 0 ) { + status=GameStates.KAMPF; + offenderProvince = null; + defenderProvince = null; + maxDiceOffender = ""; + maxDiceDefender = ""; + modus.setBackColor(Color.white); + modus.setForeColor(Color.black); + modus.setText("Kampf\nbeenden"); + } else if (status==GameStates.KAMPF) { + giveRandomStars(players[currentPlayer]); + status=GameStates.VERSCHIEBEN; + savedProvince = null; + modus.setText("Naechster\nSpieler"); + } else if (status==GameStates.VERSCHIEBEN) { + freeArmies = -1; + if(currentPlayer >= players.length-1) + { + currentPlayer=0; + } + else + { + currentPlayer+=1; + } + status=GameStates.SETZEN; + modus.setText("Kampf\nbeginnen"); + } + redrawProvinces(); + redrawPlayers(); + reloadPlayerStat(); + } + } + + // Kampfsystem + + Province offenderProvince; + Province defenderProvince; + String maxDiceOffender = ""; + String maxDiceDefender = ""; + + private void actFight() { + for(int i = 1; i <= (provinces.length - 1); i++) { + if (provinces[i].hasClicked() == true) { + if(provinces[i].getOwner() == currentPlayer) { + OffenderProvince(provinces[i]); + } else { + DefenderProvince(provinces[i]); + } + } + } + } + + private void OffenderProvince(Province p) + { + if(p.getEntityCount() > 1) { + if(offenderProvince != null) { + offenderProvince.redrawProvince(); + } + offenderProvince = p; + p.redrawProvince(2); + // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als angreifende Provinz ausgewaehlt! Sie gehoert Spieler" + provinces[i].getOwner()); + chooser(); + } + } + + private void DefenderProvince(Province p) + { + if(defenderProvince != null) { + defenderProvince.redrawProvince(); + } + defenderProvince = p; + p.redrawProvince(3); + // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als verteidigende Provinz ausgewaehlt! Sie gehoert Spieler" + provinces[i].getOwner()); + chooser(); + } + + private void chooser() + { + if(offenderProvince == null || defenderProvince == null) { + return; + } + if(!offenderProvince.isProvinceNear(defenderProvince.getID())) { + JOptionPane.showMessageDialog(null,"Die Provinzen liegen nicht mal ansatzweise nebeneinander!"); + offenderProvince.redrawProvince(); + defenderProvince.redrawProvince(); + offenderProvince = null; + defenderProvince = null; + return; + } + //System.out.println("Es wird gewuerfelt!"); + Dice_Offender diceOffender = new Dice_Offender(); + // System.out.println("Der Angreifer ereichte folgende Wuerfelzahlen:"); + int[] maxDiceOffenderArray = diceOffender.dice_offender(offenderProvince.getEntityCount()); + Dice_Defender diceDefender = new Dice_Defender(); + // System.out.println("Der Verteidiger ereichte folgende Wuerfelzahlen:"); + int[] maxDiceDefenderArray = diceDefender.dice_defender(defenderProvince.getEntityCount()); + Arrays.sort(maxDiceOffenderArray); + Arrays.sort(maxDiceDefenderArray); + maxDiceOffender = ""; + for(int i = 0;i<3;i++) + { + if(maxDiceOffenderArray[i] != 0) { + if(i == 0) + { + maxDiceOffender = "" + maxDiceOffenderArray[i]; + } + else + { + maxDiceOffender = maxDiceOffender + ", " + maxDiceOffenderArray[i]; + } + } + } + maxDiceDefender = ""; + for(int i = 0;i<2;i++) + { + if(maxDiceDefenderArray[i] != 0) { + if(i == 0) + { + maxDiceDefender = "" + maxDiceDefenderArray[i]; + } + else + { + maxDiceDefender = maxDiceDefender + ", " + maxDiceDefenderArray[i]; + } + } + } + JOptionPane.showMessageDialog(null,"Es wurde gewuerfelt. Der Angreifer erreichte folgende Wuerfelzahlen: " + maxDiceOffender + "\nDer Verteidiger erreichte diese Wuerfelzahlen: " + maxDiceDefender); + diceOffender = null; + diceDefender = null; + decider(maxDiceOffenderArray, maxDiceDefenderArray); + } + + // berechnet Zahlen und findet Gewinner; fuehrt Konsequenz aus + private void decider(int[] maxDiceOffender, int [] maxDiceDefender) + { + Player offPl = players[offenderProvince.getOwner()]; + Player defPl = players[defenderProvince.getOwner()]; + + int maxDefender = maxDiceDefender[1]; + int maxOffender = maxDiceOffender[2]; + if (maxOffender > maxDefender) + { + defenderProvince.removeFromEntities(1); + defPl.lostEntity(); + if (defenderProvince.getEntityCount() <= 0) { + defenderProvince.setOwner(offenderProvince.getOwner()); + offenderProvince.removeFromEntities(1); + defenderProvince.setEntityCount(1); + offPl.gotProvince(); + defPl.lostProvince(); + JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Die Provinz gehoert fortan dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ")."); + } else { + JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Dem Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + defenderProvince.getEntityCount() + " Einheiten."); + } + } + + if (maxOffender < maxDefender && offenderProvince.getEntityCount()>1) + { + offenderProvince.removeFromEntities(1); + offPl.lostEntity(); + JOptionPane.showMessageDialog(null,"Somit gewinnt der Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + "). Dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten."); + } + + if (maxOffender == maxDefender && offenderProvince.getEntityCount()>1) + { + offenderProvince.removeFromEntities(1); + offPl.lostEntity(); + JOptionPane.showMessageDialog(null,"Da es unentschieden ist, gewinnt der Verteidiger (" + getPlayerName(defenderProvince.getOwner()) + "). Dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten."); + } + + offenderProvince.redrawProvince(); + defenderProvince.redrawProvince(); + offenderProvince = null; + defenderProvince = null; + } + + // Einheiten verschieben + + Province savedProvince = null; + + private void actMove() { + for ( int i = 1; i <= (provinces.length - 1); i++) { + if (provinces[i].hasClicked() == true) { + useProvincesToMove(provinces[i]); + break; + } + } + } + + /** + Nimmt zwei Provinzen entgegen, und fragt, wieviele Einheiten vom ersten zum zweiten Eintrag verschoben werden sollen. + ueberprueft, ob eine Verschiebung moeglich ist und fuehrt sie bei Erfolg aus. + */ + private void moveEntities(Province sourceProvince, Province destinationProvince) + { + String toMoveString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du verschieben?"); + int entitiesToMove = Utils.StringToInt(toMoveString); + + if (entitiesToMove == 0) { + JOptionPane.showMessageDialog(null,"Bitte eine Zahl eingeben, Kommandant " + getPlayerName() + "."); + return; + } + + if ( (sourceProvince.getEntityCount() - entitiesToMove) > 0) + { + sourceProvince.removeFromEntities(entitiesToMove); + destinationProvince.addToEntities(entitiesToMove); + JOptionPane.showMessageDialog(null,"Einheiten erfolgreich verschoben, Kommandant " + getPlayerName() + "."); + } + + else if ( (sourceProvince.getEntityCount() - entitiesToMove) <= 0) + { + JOptionPane.showMessageDialog(null,"Du hast nicht genuegend Einheiten, um die gewuenschte Anzahl von " + sourceProvince.getDisplayName() + " nach " + destinationProvince.getDisplayName() + " zu verschieben, Koehler."); + } + } + + /** + Speichert ein gegebene Provinz als savedProvince ein, insofern dieser Platz nicht bereits belegt ist. + Ist er das, so wird ueberprueft, ob eine neue, an savedProvince angrenzende Provinz angeklickt wurde. + Ist dies der Fall, werden beide Provinzen an moveEntities uebergeben. + */ + private void useProvincesToMove(Province givenProvince) + { + if(givenProvince.getOwner() != currentPlayer) { + return; + } + if (savedProvince == null) + { + savedProvince = givenProvince; + givenProvince.redrawProvince(2); + } + else if ((savedProvince != null) && (givenProvince != savedProvince)) + { + if (givenProvince.isProvinceNear(savedProvince.getID()) == true) + { + moveEntities(savedProvince,givenProvince); + } + savedProvince.redrawProvince(); + savedProvince = null; + } + } + + // Einheiten setzen + + int freeArmies = -1; + + private void actPlace() + { + if ( freeArmies == -1 ) { + freeArmies = calculateArmies(); + players[currentPlayer].gotEntities(freeArmies); + } else if ( freeArmies == 0 ) { + modus.setBackColor(Color.white); + modus.setForeColor(Color.black); + } else { + modus.setBackColor(Color.black); + modus.setForeColor(Color.black); + } + for ( int i = 1; i <= (provinces.length - 1); i++) { + if (provinces[i].hasClicked() == true && provinces[i].getOwner() == currentPlayer) + { + String toUseString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du setzen? Du hast noch " + freeArmies + " freie Einheiten."); + int armiesToUse = Utils.StringToInt(toUseString); + if ( armiesToUse <= freeArmies ) + { + if ( armiesToUse > 0 ) + { + provinces[i].addToEntities(armiesToUse); + freeArmies = freeArmies- armiesToUse; + JOptionPane.showMessageDialog(null,"Einheiten erfolgreich gesetzt, Kommandant " + getPlayerName() + "."); + } + if ( armiesToUse < 0 ) + { + JOptionPane.showMessageDialog(null,"Willst du mich verarschen?"); + } + } + else + { + JOptionPane.showMessageDialog(null,"Nicht genuegend freie Einheiten."); + } + } + } + } + + private int calculateArmies() + { + int armiesToPlace; + Province[] continentArray; + boolean continentChecked = false; + + // 1. ArmyMinimum einbeziehen + armiesToPlace = armyMinimum; + + // 2. Einheiten durch Provinzen einbeziehen + armiesToPlace = armiesToPlace + Math.round(players[currentPlayer].getProvinceCount() / 3); + + // 3. Einheiten durch Kontinente + + // Kontinente durchgehen + for ( int i = 1; i < continentBoni.length; i++ ) + { + continentArray = giveContinentArray(i); + // Provinzen des aktuellen Kontinents durchgehen + for ( int p = 1; p >= continentArray.length; p++ ) + { + // Pruefen, ob eine Provinz NICHT dem aktuellen Spieler gehoert + if ( continentArray[p].getOwner() != currentPlayer ) + { + break; + } + // Wenn nicht, wird der Kontinent als gecheckt markiert + else + { + continentChecked = true; + } + } + if ( continentChecked == true ) + { + armiesToPlace = armiesToPlace + continentBoni[i]; + continentChecked = false; + } + } + + // 4. Einheiten durch Sterne + if ( players[currentPlayer].getStars() > 0) + { + String toUseString; + + if ( players[currentPlayer].getStars() == 1 ) + { + toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden? \n Du besitzt noch 1 Stern."); + } + else + { + toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden? \n Du besitzt noch " + players[currentPlayer].getStars() + " Sterne."); + } + + int starsToUse = Utils.StringToInt(toUseString); + + if ( starsToUse <= players[currentPlayer].getStars() ) + { + int[] starBoni = new int [] {1,2,4,7,10,13,17,21,25,30}; + if ( starsToUse > 0 && starsToUse < 11 ) + { + armiesToPlace = armiesToPlace + starBoni[starsToUse -1]; + } + if ( starsToUse < 0 && starsToUse > 10 ) + { + JOptionPane.showMessageDialog(null,"Ungueltige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben"); + } + } + else + { + JOptionPane.showMessageDialog(null,"Du besitzt nicht die erforderliche Anzahl an Sternen! \n Verarschen kannst du jemand anderen."); + } + } + return armiesToPlace; + } + + private Province[] giveContinentArray(int cID) + { + Province[] savedProvinces = new Province[provinceCount +1]; + Province[] continentProvinces; + int c = 0; + for (int i = 1; i <= provinceCount; i++) + { + if (provinces[i].getContinentID() == cID) + { + savedProvinces[i] = provinces[i]; + c++; + } + } + if ( c < 1 ) + { + return null; + } + else + { + return Utils.cutArray(savedProvinces); + } + } + + /** + * Gibt einem Spieler eine zufaellige Anzahl an Sternen zwischen 1 und 3. + * + * @param player Der Spieler, dem die Sterne gegeben werden + */ + + protected void giveRandomStars (Player player) + { + double zufallszahl = Math.random(); + + if ( zufallszahl <= 0.6 ) + { + players[currentPlayer].addToStars(1); + } + else if ( zufallszahl <= 0.9 ) + { + players[currentPlayer].addToStars(2); + } + else + { + players[currentPlayer].addToStars(3); + } + } } \ No newline at end of file diff --git a/InputDialogWorld.java b/zweiundvierzig/InputDialogWorld.java similarity index 98% rename from InputDialogWorld.java rename to zweiundvierzig/InputDialogWorld.java index 8ac7a4f..3dd845f 100644 --- a/InputDialogWorld.java +++ b/zweiundvierzig/InputDialogWorld.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; import java.awt.Color; diff --git a/Label.java b/zweiundvierzig/Label.java similarity index 98% rename from Label.java rename to zweiundvierzig/Label.java index 3affb80..0d09d1c 100644 --- a/Label.java +++ b/zweiundvierzig/Label.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; diff --git a/Map.java b/zweiundvierzig/Map.java similarity index 98% rename from Map.java rename to zweiundvierzig/Map.java index ab02a25..bce8d8b 100644 --- a/Map.java +++ b/zweiundvierzig/Map.java @@ -1,3 +1,5 @@ +package zweiundvierzig; + import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** diff --git a/Map_World.java b/zweiundvierzig/Map_World.java similarity index 99% rename from Map_World.java rename to zweiundvierzig/Map_World.java index d7d0971..bd52f91 100644 --- a/Map_World.java +++ b/zweiundvierzig/Map_World.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** diff --git a/Menue_Button.java b/zweiundvierzig/Menue_Button.java similarity index 96% rename from Menue_Button.java rename to zweiundvierzig/Menue_Button.java index 7d4aef9..fc5c404 100644 --- a/Menue_Button.java +++ b/zweiundvierzig/Menue_Button.java @@ -1,29 +1,33 @@ -/* - Hinweis zum Verbleib der Klasse: - Diese Klasse soll, da sie zurzeit weder vollstaendig, noch in Verwendung, noch in der Architektur definiert ist, zum Beta-Meilenstein entfernt werden. - Sollte die Klasse jedoch zuvor noch Verwendung finden, wird sie nach Absprache mit den jeweiligen Autoren/Benutzern in die Architektur aufgenommen. -*/ - -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - -/** - * Write a description of class Menue_Button here. - * - * @author (your name) - * @version (a version number or a date) - */ -public class Menue_Button extends Button -{ - public Menue_Button(ButtonEvent h) { - super(h); - } - - /** - * Act - do whatever the Menue_Button wants to do. This method is called whenever - * the 'Act' or 'Run' button gets pressed in the environment. - */ - public void act() - { - setLocation(100,38);// Add your action code here. - } -} +package zweiundvierzig; + +/* + Hinweis zum Verbleib der Klasse: + Diese Klasse soll, da sie zurzeit weder vollstaendig, noch in Verwendung, noch in der Architektur definiert ist, zum Beta-Meilenstein entfernt werden. + Sollte die Klasse jedoch zuvor noch Verwendung finden, wird sie nach Absprache mit den jeweiligen Autoren/Benutzern in die Architektur aufgenommen. +*/ + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class Menue_Button here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class Menue_Button extends Button +{ + public Menue_Button(ButtonEvent h) { + super(h); + } + + /** + * Act - do whatever the Menue_Button wants to do. This method is called whenever + * the 'Act' or 'Run' button gets pressed in the environment. + */ + public void act() + { + setLocation(100,38);// Add your action code here. + } +} diff --git a/OffenderDices.java b/zweiundvierzig/OffenderDices.java similarity index 93% rename from OffenderDices.java rename to zweiundvierzig/OffenderDices.java index a7ac781..b26f619 100644 --- a/OffenderDices.java +++ b/zweiundvierzig/OffenderDices.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; diff --git a/Player.java b/zweiundvierzig/Player.java similarity index 96% rename from Player.java rename to zweiundvierzig/Player.java index c8f83b0..0c35854 100644 --- a/Player.java +++ b/zweiundvierzig/Player.java @@ -1,291 +1,295 @@ -import greenfoot.*; -import java.awt.Color; - -/** - * Write a description of class Player here. - * - * @author (Genosse Betakevin und Genosse Julien und Genosse GruenerWal) - * @version 6.6.6-build2 - */ -public class Player extends Actor -{ - @Override public GeneralMap getWorld(){ - return (GeneralMap) super.getWorld(); - } - int stars=0; - int add=0; - int id=0; - int provZahl=0; - int provVgl=0; - int[] stats = new int [6]; - String n; - int color; - int textsize; - int c; - public int active; - boolean starsNeeded = false; - - //definiert die ID und Namens Variable - public Player(int identity,String name, int c) - { - n = name; - id = identity; - color = c; - // redrawPlayer(); - } - //gibt die Spieler ID zurueck - public int getID() - { - return id; - } - // gibt den Spielernamen zurueck - public String getDisplayName () - { - return n; - } - //gibt die Sternenanzahl zurueck - public int getStars() - { - return stars; - } - - /** - * Gibt die Farbe des Spielers als int-Wert heraus. - * Wahnsinn, dass du dir den Scheiß hier grad durchliest. - * ~GruenerWal - */ - public int getColor() - { - return color; - } - - // Von Felix: Methode nicht architektur-konform - - /* // erhoeht die Sternenzahl um eine random ausgewaehlte Anzahl von 1-3 - public void addToStars() - { - int rand; - int pre; - rand = (int)(1+6*Math.random()); - if (rand == 1 || rand == 2|| rand == 3) - { - add = 1; - redrawPlayer(); - } - if (rand == 4|| rand == 5) - { - add = 2; - redrawPlayer(); - } - if (rand == 6) - { - add = 3; - redrawPlayer(); - } - if (gotProv== true) - { - pre = stars; - stars+=add; - System.out.println("Deine vorherige Sternenanzahl betrug " + pre + "."); - System.out.println("Du hast " + add + " Sterne erhalten."); - System.out.println("Deine aktuelle Sternenanzahl betraegt " + stars + "."); - redrawPlayer(); - } - } */ - - private void checkStars() { - if(stars < 0) { - stars = 0; - } - } - - // Von Felix: Architektur-konforme Funktion - public int addToStars(int s) { - stars += s; - checkStars(); - redrawPlayer(); - return stars; - } - //eine fuer das Testen gedachte Methode, die die Anzahl der Sterne auf ein gewuenschtes Maß setzt - public int setStars (int set) - { - stars = set; - checkStars(); - redrawPlayer(); - return stars; - } - //eine Methode, die das Abziehen von Sternen testet und, wenn das Ergebnis >= 0 ist, die Sternenanzahl um eine gewaehlte Anzahl verringert - public int removeFromStars(int sub) - { - stars -= sub; - checkStars(); - redrawPlayer(); - return stars; - } - - public boolean canStarsRemoved(int s) { - return (stars - s) >= 0; - } - - public int getProvinceCount() - { - int p = 0; - int[] provinces = getWorld().getProvinceOwners(); - for (int x=1; x < provinces.length; x++) - { - if (provinces[x] == id) - { - p++; - } - } - return p; - } - - public int getEntitiesCount() { - return getWorld().getPlayerEntityCount(id); - } - - public void gotEntities(int gotEnt) - { - stats[3]+= gotEnt; - reloadMaxEntities(); - redrawPlayer(); - } - - public void lostEntity() - { - stats[4]+=1; - redrawPlayer(); - } - - public void gotProvince() { - stats[0]++; - reloadMaxInfluence(); - redrawPlayer(); - starsNeeded = true; - } - - public void lostProvince() { - stats[1]++; - redrawPlayer(); - } - - public void reloadMaxInfluence() - { - int c = getProvinceCount(); - if(stats[2]< c) - { - stats[2]=c; - redrawPlayer(); - } - } - - public void reloadMaxEntities() - { - int c = getEntitiesCount(); - if (stats[5]< c) - { - stats[5]=c; - redrawPlayer(); - } - } - - public boolean[] getMyProvinces() - { - int[] provinces = getWorld().getProvinceOwners(); - boolean[] myProvinces = new boolean[provinces.length]; - for (int x=0; x < provinces.length; x++) - { - if (provinces[x]== id) - { - myProvinces[x]=true; - } - else - { - myProvinces[x]=false; - } - - } - redrawPlayer(); - return myProvinces; - } - - public int[] getStatistics() - { - return stats; - } - - public int setColor(int c) - { - color = c; - redrawPlayer(); - return color; - - } - - private Color getTextCol() { - return (getWorld().getCurrentPlayerID() == id) ? new Color(0,0,0) : new Color(255,255,255); - } - - private Color getTransBackCol() { - return (getWorld().getCurrentPlayerID() == id) ? new Color(255,255,255) : new Color(0,0,0); - } - - public void redrawPlayer() - { - getWorld().reloadPlayerStat(); - int textSize = 20; - if(n == null) - { - n = "leererSpieler"; - } - GreenfootImage statistics = new GreenfootImage(137,120); - if(getWorld().getCurrentPlayerID() == id) { - statistics.setColor(new Color(255,255,255)); - statistics.fill(); - } - GreenfootImage name = new GreenfootImage(n,textSize,getTextCol(),getTransBackCol()); - statistics.drawImage(name,0,0); - - setImage(statistics); - oDecide(statistics,textSize); - } - - private void oDecide(GreenfootImage statistics,int textSize) - { - GreenfootImage flag = new GreenfootImage("images\\BlaueArmee.jpg"); - switch(color) - { - case 2: - flag = new GreenfootImage("images\\BlaueArmee.jpg"); - break; - case 5: - flag = new GreenfootImage("images\\GelbeArmee.jpg"); - break; - case 6: - flag = new GreenfootImage("images\\LilaArmee.jpg"); - break; - case 4: - flag = new GreenfootImage("images\\RoteArmee.jpg"); - break; - case 1: - flag = new GreenfootImage("images\\SchwarzeArmee.jpg"); - break; - case 3: - flag = new GreenfootImage("images\\GrueneArmee.jpg"); - break; - } - redraw(statistics,flag,textSize); - } - - private void redraw(GreenfootImage statistics,GreenfootImage flag, int textSize) - { - flag.scale(137,83); - statistics.drawImage(flag,0,textSize); - String statTxt = (getWorld().getCurrentPlayerID() == id) ? "Du bist dran!" : stats[0] + " | " + stats[1] + " | " + stats[2] + " | " +stats[3] + " | " + stats[4] + " | " + stats[5]; - GreenfootImage playerStatistics = new GreenfootImage(statTxt,textSize,getTextCol(),getTransBackCol()); - statistics.drawImage(playerStatistics, 0, 103); - - setImage(statistics); - } +package zweiundvierzig; + + + +import greenfoot.*; +import java.awt.Color; + +/** + * Write a description of class Player here. + * + * @author (Genosse Betakevin und Genosse Julien und Genosse GruenerWal) + * @version 6.6.6-build2 + */ +public class Player extends Actor +{ + @Override public GeneralMap getWorld(){ + return (GeneralMap) super.getWorld(); + } + int stars=0; + int add=0; + int id=0; + int provZahl=0; + int provVgl=0; + int[] stats = new int [6]; + String n; + int color; + int textsize; + int c; + public int active; + boolean starsNeeded = false; + + //definiert die ID und Namens Variable + public Player(int identity,String name, int c) + { + n = name; + id = identity; + color = c; + // redrawPlayer(); + } + //gibt die Spieler ID zurueck + public int getID() + { + return id; + } + // gibt den Spielernamen zurueck + public String getDisplayName () + { + return n; + } + //gibt die Sternenanzahl zurueck + public int getStars() + { + return stars; + } + + /** + * Gibt die Farbe des Spielers als int-Wert heraus. + * Wahnsinn, dass du dir den Scheiß hier grad durchliest. + * ~GruenerWal + */ + public int getColor() + { + return color; + } + + // Von Felix: Methode nicht architektur-konform + + /* // erhoeht die Sternenzahl um eine random ausgewaehlte Anzahl von 1-3 + public void addToStars() + { + int rand; + int pre; + rand = (int)(1+6*Math.random()); + if (rand == 1 || rand == 2|| rand == 3) + { + add = 1; + redrawPlayer(); + } + if (rand == 4|| rand == 5) + { + add = 2; + redrawPlayer(); + } + if (rand == 6) + { + add = 3; + redrawPlayer(); + } + if (gotProv== true) + { + pre = stars; + stars+=add; + System.out.println("Deine vorherige Sternenanzahl betrug " + pre + "."); + System.out.println("Du hast " + add + " Sterne erhalten."); + System.out.println("Deine aktuelle Sternenanzahl betraegt " + stars + "."); + redrawPlayer(); + } + } */ + + private void checkStars() { + if(stars < 0) { + stars = 0; + } + } + + // Von Felix: Architektur-konforme Funktion + public int addToStars(int s) { + stars += s; + checkStars(); + redrawPlayer(); + return stars; + } + //eine fuer das Testen gedachte Methode, die die Anzahl der Sterne auf ein gewuenschtes Maß setzt + public int setStars (int set) + { + stars = set; + checkStars(); + redrawPlayer(); + return stars; + } + //eine Methode, die das Abziehen von Sternen testet und, wenn das Ergebnis >= 0 ist, die Sternenanzahl um eine gewaehlte Anzahl verringert + public int removeFromStars(int sub) + { + stars -= sub; + checkStars(); + redrawPlayer(); + return stars; + } + + public boolean canStarsRemoved(int s) { + return (stars - s) >= 0; + } + + public int getProvinceCount() + { + int p = 0; + int[] provinces = getWorld().getProvinceOwners(); + for (int x=1; x < provinces.length; x++) + { + if (provinces[x] == id) + { + p++; + } + } + return p; + } + + public int getEntitiesCount() { + return getWorld().getPlayerEntityCount(id); + } + + public void gotEntities(int gotEnt) + { + stats[3]+= gotEnt; + reloadMaxEntities(); + redrawPlayer(); + } + + public void lostEntity() + { + stats[4]+=1; + redrawPlayer(); + } + + public void gotProvince() { + stats[0]++; + reloadMaxInfluence(); + redrawPlayer(); + starsNeeded = true; + } + + public void lostProvince() { + stats[1]++; + redrawPlayer(); + } + + public void reloadMaxInfluence() + { + int c = getProvinceCount(); + if(stats[2]< c) + { + stats[2]=c; + redrawPlayer(); + } + } + + public void reloadMaxEntities() + { + int c = getEntitiesCount(); + if (stats[5]< c) + { + stats[5]=c; + redrawPlayer(); + } + } + + public boolean[] getMyProvinces() + { + int[] provinces = getWorld().getProvinceOwners(); + boolean[] myProvinces = new boolean[provinces.length]; + for (int x=0; x < provinces.length; x++) + { + if (provinces[x]== id) + { + myProvinces[x]=true; + } + else + { + myProvinces[x]=false; + } + + } + redrawPlayer(); + return myProvinces; + } + + public int[] getStatistics() + { + return stats; + } + + public int setColor(int c) + { + color = c; + redrawPlayer(); + return color; + + } + + private Color getTextCol() { + return (getWorld().getCurrentPlayerID() == id) ? new Color(0,0,0) : new Color(255,255,255); + } + + private Color getTransBackCol() { + return (getWorld().getCurrentPlayerID() == id) ? new Color(255,255,255) : new Color(0,0,0); + } + + public void redrawPlayer() + { + getWorld().reloadPlayerStat(); + int textSize = 20; + if(n == null) + { + n = "leererSpieler"; + } + GreenfootImage statistics = new GreenfootImage(137,120); + if(getWorld().getCurrentPlayerID() == id) { + statistics.setColor(new Color(255,255,255)); + statistics.fill(); + } + GreenfootImage name = new GreenfootImage(n,textSize,getTextCol(),getTransBackCol()); + statistics.drawImage(name,0,0); + + setImage(statistics); + oDecide(statistics,textSize); + } + + private void oDecide(GreenfootImage statistics,int textSize) + { + GreenfootImage flag = new GreenfootImage("images\\BlaueArmee.jpg"); + switch(color) + { + case 2: + flag = new GreenfootImage("images\\BlaueArmee.jpg"); + break; + case 5: + flag = new GreenfootImage("images\\GelbeArmee.jpg"); + break; + case 6: + flag = new GreenfootImage("images\\LilaArmee.jpg"); + break; + case 4: + flag = new GreenfootImage("images\\RoteArmee.jpg"); + break; + case 1: + flag = new GreenfootImage("images\\SchwarzeArmee.jpg"); + break; + case 3: + flag = new GreenfootImage("images\\GrueneArmee.jpg"); + break; + } + redraw(statistics,flag,textSize); + } + + private void redraw(GreenfootImage statistics,GreenfootImage flag, int textSize) + { + flag.scale(137,83); + statistics.drawImage(flag,0,textSize); + String statTxt = (getWorld().getCurrentPlayerID() == id) ? "Du bist dran!" : stats[0] + " | " + stats[1] + " | " + stats[2] + " | " +stats[3] + " | " + stats[4] + " | " + stats[5]; + GreenfootImage playerStatistics = new GreenfootImage(statTxt,textSize,getTextCol(),getTransBackCol()); + statistics.drawImage(playerStatistics, 0, 103); + + setImage(statistics); + } } \ No newline at end of file diff --git a/Province.java b/zweiundvierzig/Province.java similarity index 97% rename from Province.java rename to zweiundvierzig/Province.java index 2c91d69..f345ead 100644 --- a/Province.java +++ b/zweiundvierzig/Province.java @@ -1,564 +1,568 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import java.awt.Color; - -/** - * Write a description of class Province here. - * - * @author GruenerWal, Felix Stupp - * @version 1.1.0 - */ -public class Province extends Actor -{ - @Override public GeneralMap getWorld() { - return (GeneralMap) super.getWorld(); - } - - private int stars = 1; - private int provinceID; - private String displayName; - private int owner = 0; - private boolean[] nextProvinces; - private int continentID; - private int xPos; - private int yPos; - private int eCount; - public int textSize; - private GreenfootImage province; - private boolean clicked = false; - /** - * ueberprueft, ob die Provinz angeklickt wurde. - */ - public void act() - { - if(Greenfoot.mouseClicked(this)) { - clicked = true; - } - } - - // Haupt-Konstruktor - public Province(int pID, int cID, int x, int y, int st, String s1, int[] ia1) - { - 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++) { - if(maxNum < ia1[i]) { - maxNum = ia1[i]; - } - } - nextProvinces = new boolean[maxNum+1]; - for(int i = 0; i < ia1.length; i++) { - if(ia1[i] >= 0) { - nextProvinces[ia1[i]] = true; - } - } - } - - // 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) - { - provinceID = pID; - continentID = cID; - xPos = x; - yPos = y; - if(st > 0) { - stars = st; - } - displayName = s1; - nextProvinces = Utils.copyArray(ba1); - } - - // Liefert die X-Position als Integer - public int getXPos() - { - return xPos; - } - - // Liefert die Y-Position als Integer - public int getYPos() - { - return yPos; - } - - // Liefert die Provinz-ID als Integer - 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 nextProvinces[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; - } - - // Setzt den Owner, ben�tigt String - public void setOwner(int o) - { - if(o < -1) { - o = -1; - } - owner = o; - } - - public int getEntityCount() { - return eCount; - } - - private void checkEntityCount() { - if(eCount < 0) { - eCount = 0; - } - } - - public int addToEntities(int a) { - eCount = eCount + a; - checkEntityCount(); - redrawProvince(1); - return eCount; - } - - public int removeFromEntities(int a) { - eCount = eCount - a; - checkEntityCount(); - redrawProvince(1); - return eCount; - } - - public int setEntityCount(int a) { - eCount = a; - checkEntityCount(); - redrawProvince(1); - return eCount; - } - - public void redrawProvince() - { - redrawProvince(1); - } - - public void redrawProvince(int ColorInt) - { - textSize = 20; - GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f)); - int eCountTanks = eCount / 5; - GreenfootImage LenghtCalculate = new GreenfootImage((eCount / 5) + "x",textSize, new Color(0,0,0), new Color(0,0,0)); - int lenght = LenghtCalculate.getWidth() + (textSize *3); - - if(lenght < provinceName.getWidth()) - { - province = new GreenfootImage(provinceName.getWidth(),2*textSize); - } - else - { - province = new GreenfootImage(lenght,2*textSize); - } - - if(ColorInt ==1) - { - province.drawImage(provinceName,0,0); - setImage(province); - oDecide(province,textSize,owner,eCount); - } - if(ColorInt ==2) - { - provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.GREEN); - province.drawImage(provinceName,0,0); - setImage(province); - oDecide(province,textSize,owner,eCount); - } - if(ColorInt == 3) - { - provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.RED); - province.drawImage(provinceName,0,0); - setImage(province); - oDecide(province,textSize,owner,eCount); - } - - } - - /** - * Weist dem Owner der Provinz sein entsprechendes Color-Tag zu. - */ - public void oDecide(GreenfootImage province,int textSize, int owner, int eCount) - { - String ownerString; - if(getWorld().getPlayerColor(owner) == 0) - { - ownerString = "schwarz"; - eCalculate(province,ownerString,textSize); - } - else - { - switch(getWorld().getPlayerColor(owner)) - { - case 1: - ownerString = "schwarz"; - eCalculate(province,ownerString,textSize); - break; - case 2: - ownerString = "blau"; - eCalculate(province,ownerString,textSize); - break; - case 3: - ownerString = "gruen"; - eCalculate(province,ownerString,textSize); - break; - case 4: - ownerString = "rot"; - eCalculate(province,ownerString,textSize); - break; - case 5: - ownerString = "gelb"; - eCalculate(province,ownerString,textSize); - break; - case 6: - ownerString = "lila"; - eCalculate(province,ownerString,textSize); - break; - - } - } - } - - private void eCalculate(GreenfootImage province, String ownerString,int textSize) - { - int eCountTanks = eCount / 5; - int eCountHorse = (eCount - (eCountTanks * 5))/3; - int eCountInf = eCount - (eCountTanks * 5) - (eCountHorse * 3); - - if(eCountTanks >= 1 && eCountInf == 0 && eCountHorse == 0) - { - OnlyTanks(province,eCountTanks,ownerString,textSize); - } - if(eCountTanks == 0 && eCountInf == 0 && eCountHorse != 0) - { - OnlyHorses(province,eCountHorse,ownerString,textSize); - } - if(eCountTanks == 0 && eCountInf != 0 && eCountHorse == 0) - { - OnlyInf(province,eCountInf,ownerString,textSize); - } - if(eCountTanks == 0 && eCountInf != 0 && eCountHorse != 0) - { - NoTanks(province,eCountInf,eCountHorse, ownerString, textSize); - } - if(eCountTanks != 0 && eCountInf != 0 && eCountHorse == 0) - { - NoHorse(province,eCountInf,eCountTanks, ownerString, textSize); - } - if(eCountTanks != 0 && eCountInf == 0 && eCountHorse != 0) - { - NoInf(province,eCountInf,eCountTanks, ownerString, textSize); - } - if(eCountTanks == 0 && eCountInf == 0 && eCountHorse == 0) - { - NoEntity(province, ownerString, textSize); - } - if(eCountTanks != 0 && eCountInf != 0 && eCountHorse != 0) - { - AllEntity(province, ownerString,eCountTanks, eCountHorse, eCountInf, textSize); - } - - } - - private void NoEntity(GreenfootImage province, String ownerString, int textSize) - { - - } - - private void OnlyTanks(GreenfootImage province,int eCountTanks, String ownerString, int textSize) - { - GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); - tank.scale(textSize,textSize); - if(eCountTanks <= 3) - { - if(eCountTanks == 1) - { - province.drawImage(tank,0,textSize); - } - if(eCountTanks == 2) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - } - if(eCountTanks == 3) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - province.drawImage(tank,textSize*2,textSize); - } - } - else - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(eCountTanksImage,0,textSize); - province.drawImage(tank,eCountTanksImage.getWidth(),textSize); - } - setImage(province); - } - - private void OnlyHorses(GreenfootImage province,int eCountHorse, String ownerString, int textSize) - { - GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); - horse.scale(textSize,textSize); - province.drawImage(horse,0,textSize); - setImage(province); - } - - private void OnlyInf(GreenfootImage province,int eCountInf, String ownerString, int textSize) - { - GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); - Inf.scale(textSize,textSize); - if(eCountInf == 1) - { - province.drawImage(Inf,0,textSize); - } - if(eCountInf == 2) - { - province.drawImage(Inf,0,textSize); - province.drawImage(Inf,textSize,textSize); - } - setImage(province); - } - - private void NoTanks(GreenfootImage province,int eCountInf,int eCountHorse, String ownerString, int textSize) - { - GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); - Inf.scale(textSize,textSize); - GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); - horse.scale(textSize,textSize); - province.drawImage(horse,0,textSize); - setImage(province); - if(eCountInf == 1) - { - province.drawImage(Inf,textSize,textSize); - } - if(eCountInf == 2) - { - province.drawImage(Inf,textSize,textSize); - province.drawImage(Inf,2*textSize,textSize); - } - setImage(province); - } - - private void NoHorse(GreenfootImage province,int eCountInf,int eCountTanks, String ownerString, int textSize) - { - GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); - Inf.scale(textSize,textSize); - GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); - tank.scale(textSize,textSize); - if(eCountTanks <= 3) - { - if(eCountTanks == 1) - { - province.drawImage(tank,0,textSize); - } - if(eCountTanks == 2) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - } - if(eCountTanks == 3) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - province.drawImage(tank,textSize*2,textSize); - } - } - else - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(eCountTanksImage,0,textSize); - province.drawImage(tank,eCountTanksImage.getWidth(),textSize); - } - if(eCountTanks<=3) - { - if(eCountInf == 1) - { - province.drawImage(Inf,eCountTanks * textSize,textSize); - } - if(eCountInf == 2) - { - province.drawImage(Inf,eCountTanks * textSize,textSize); - province.drawImage(Inf,eCountTanks * 2 *textSize,textSize); - } - } - if(eCountTanks>3) - { - if(eCountInf == 1) - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize); - } - if(eCountInf == 2) - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize); - province.drawImage(Inf,eCountTanksImage.getWidth() + (2 *textSize),textSize); - } - } - setImage(province); - } - - private void NoInf(GreenfootImage province,int eCountHorse,int eCountTanks, String ownerString, int textSize) - { - - GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); - tank.scale(textSize,textSize); - GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); - horse.scale(textSize,textSize); - - if(eCountTanks <= 3) - { - if(eCountTanks == 1) - { - province.drawImage(tank,0,textSize); - } - if(eCountTanks == 2) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - } - if(eCountTanks == 3) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - province.drawImage(tank,textSize*2,textSize); - } - } - else - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(eCountTanksImage,0,textSize); - province.drawImage(tank,eCountTanksImage.getWidth(),textSize); - } - if(eCountTanks<=3) - { - - province.drawImage(horse,eCountTanks * textSize,textSize); - setImage(province); - - } - if(eCountTanks>3) - { - - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize); - setImage(province); - - } - setImage(province); - } - - private void AllEntity(GreenfootImage province, String ownerString,int eCountTanks, int eCountHorse, int eCountInf,int textSize) - { - GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); - tank.scale(textSize,textSize); - GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); - horse.scale(textSize,textSize); - GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); - Inf.scale(textSize,textSize); - if(eCountTanks <= 3) - { - if(eCountTanks == 1) - { - province.drawImage(tank,0,textSize); - } - if(eCountTanks == 2) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - } - if(eCountTanks == 3) - { - province.drawImage(tank,0,textSize); - province.drawImage(tank,textSize,textSize); - province.drawImage(tank,textSize*2,textSize); - } - } - else - { - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(eCountTanksImage,0,textSize); - province.drawImage(tank,eCountTanksImage.getWidth(),textSize); - } - if(eCountHorse == 1) - { - if(eCountTanks<=3) - { - - province.drawImage(horse,eCountTanks * textSize,textSize); - if(eCountInf == 1) - { - province.drawImage(Inf,eCountTanks * textSize + textSize,textSize); - } - if(eCountInf == 2) - { - province.drawImage(Inf,eCountTanks * textSize + textSize + textSize,textSize); - } - setImage(province); - - } - if(eCountTanks>3) - { - - GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); - province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize); - if(eCountInf == 1) - { - province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize,textSize); - } - if(eCountInf == 2) - { - province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize + textSize + textSize,textSize); - } - setImage(province); - - } - } - setImage(province); - } - - public boolean hasClicked() - { - boolean b = clicked; - clicked = false; - return b; - } - -} - +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; + +/** + * Write a description of class Province here. + * + * @author GruenerWal, Felix Stupp + * @version 1.1.0 + */ +public class Province extends Actor +{ + @Override public GeneralMap getWorld() { + return (GeneralMap) super.getWorld(); + } + + private int stars = 1; + private int provinceID; + private String displayName; + private int owner = 0; + private boolean[] nextProvinces; + private int continentID; + private int xPos; + private int yPos; + private int eCount; + public int textSize; + private GreenfootImage province; + private boolean clicked = false; + /** + * ueberprueft, ob die Provinz angeklickt wurde. + */ + public void act() + { + if(Greenfoot.mouseClicked(this)) { + clicked = true; + } + } + + // Haupt-Konstruktor + public Province(int pID, int cID, int x, int y, int st, String s1, int[] ia1) + { + 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++) { + if(maxNum < ia1[i]) { + maxNum = ia1[i]; + } + } + nextProvinces = new boolean[maxNum+1]; + for(int i = 0; i < ia1.length; i++) { + if(ia1[i] >= 0) { + nextProvinces[ia1[i]] = true; + } + } + } + + // 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) + { + provinceID = pID; + continentID = cID; + xPos = x; + yPos = y; + if(st > 0) { + stars = st; + } + displayName = s1; + nextProvinces = Utils.copyArray(ba1); + } + + // Liefert die X-Position als Integer + public int getXPos() + { + return xPos; + } + + // Liefert die Y-Position als Integer + public int getYPos() + { + return yPos; + } + + // Liefert die Provinz-ID als Integer + 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 nextProvinces[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; + } + + // Setzt den Owner, ben�tigt String + public void setOwner(int o) + { + if(o < -1) { + o = -1; + } + owner = o; + } + + public int getEntityCount() { + return eCount; + } + + private void checkEntityCount() { + if(eCount < 0) { + eCount = 0; + } + } + + public int addToEntities(int a) { + eCount = eCount + a; + checkEntityCount(); + redrawProvince(1); + return eCount; + } + + public int removeFromEntities(int a) { + eCount = eCount - a; + checkEntityCount(); + redrawProvince(1); + return eCount; + } + + public int setEntityCount(int a) { + eCount = a; + checkEntityCount(); + redrawProvince(1); + return eCount; + } + + public void redrawProvince() + { + redrawProvince(1); + } + + public void redrawProvince(int ColorInt) + { + textSize = 20; + GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f)); + int eCountTanks = eCount / 5; + GreenfootImage LenghtCalculate = new GreenfootImage((eCount / 5) + "x",textSize, new Color(0,0,0), new Color(0,0,0)); + int lenght = LenghtCalculate.getWidth() + (textSize *3); + + if(lenght < provinceName.getWidth()) + { + province = new GreenfootImage(provinceName.getWidth(),2*textSize); + } + else + { + province = new GreenfootImage(lenght,2*textSize); + } + + if(ColorInt ==1) + { + province.drawImage(provinceName,0,0); + setImage(province); + oDecide(province,textSize,owner,eCount); + } + if(ColorInt ==2) + { + provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.GREEN); + province.drawImage(provinceName,0,0); + setImage(province); + oDecide(province,textSize,owner,eCount); + } + if(ColorInt == 3) + { + provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.RED); + province.drawImage(provinceName,0,0); + setImage(province); + oDecide(province,textSize,owner,eCount); + } + + } + + /** + * Weist dem Owner der Provinz sein entsprechendes Color-Tag zu. + */ + public void oDecide(GreenfootImage province,int textSize, int owner, int eCount) + { + String ownerString; + if(getWorld().getPlayerColor(owner) == 0) + { + ownerString = "schwarz"; + eCalculate(province,ownerString,textSize); + } + else + { + switch(getWorld().getPlayerColor(owner)) + { + case 1: + ownerString = "schwarz"; + eCalculate(province,ownerString,textSize); + break; + case 2: + ownerString = "blau"; + eCalculate(province,ownerString,textSize); + break; + case 3: + ownerString = "gruen"; + eCalculate(province,ownerString,textSize); + break; + case 4: + ownerString = "rot"; + eCalculate(province,ownerString,textSize); + break; + case 5: + ownerString = "gelb"; + eCalculate(province,ownerString,textSize); + break; + case 6: + ownerString = "lila"; + eCalculate(province,ownerString,textSize); + break; + + } + } + } + + private void eCalculate(GreenfootImage province, String ownerString,int textSize) + { + int eCountTanks = eCount / 5; + int eCountHorse = (eCount - (eCountTanks * 5))/3; + int eCountInf = eCount - (eCountTanks * 5) - (eCountHorse * 3); + + if(eCountTanks >= 1 && eCountInf == 0 && eCountHorse == 0) + { + OnlyTanks(province,eCountTanks,ownerString,textSize); + } + if(eCountTanks == 0 && eCountInf == 0 && eCountHorse != 0) + { + OnlyHorses(province,eCountHorse,ownerString,textSize); + } + if(eCountTanks == 0 && eCountInf != 0 && eCountHorse == 0) + { + OnlyInf(province,eCountInf,ownerString,textSize); + } + if(eCountTanks == 0 && eCountInf != 0 && eCountHorse != 0) + { + NoTanks(province,eCountInf,eCountHorse, ownerString, textSize); + } + if(eCountTanks != 0 && eCountInf != 0 && eCountHorse == 0) + { + NoHorse(province,eCountInf,eCountTanks, ownerString, textSize); + } + if(eCountTanks != 0 && eCountInf == 0 && eCountHorse != 0) + { + NoInf(province,eCountInf,eCountTanks, ownerString, textSize); + } + if(eCountTanks == 0 && eCountInf == 0 && eCountHorse == 0) + { + NoEntity(province, ownerString, textSize); + } + if(eCountTanks != 0 && eCountInf != 0 && eCountHorse != 0) + { + AllEntity(province, ownerString,eCountTanks, eCountHorse, eCountInf, textSize); + } + + } + + private void NoEntity(GreenfootImage province, String ownerString, int textSize) + { + + } + + private void OnlyTanks(GreenfootImage province,int eCountTanks, String ownerString, int textSize) + { + GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); + tank.scale(textSize,textSize); + if(eCountTanks <= 3) + { + if(eCountTanks == 1) + { + province.drawImage(tank,0,textSize); + } + if(eCountTanks == 2) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + } + if(eCountTanks == 3) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + province.drawImage(tank,textSize*2,textSize); + } + } + else + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(eCountTanksImage,0,textSize); + province.drawImage(tank,eCountTanksImage.getWidth(),textSize); + } + setImage(province); + } + + private void OnlyHorses(GreenfootImage province,int eCountHorse, String ownerString, int textSize) + { + GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); + horse.scale(textSize,textSize); + province.drawImage(horse,0,textSize); + setImage(province); + } + + private void OnlyInf(GreenfootImage province,int eCountInf, String ownerString, int textSize) + { + GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); + Inf.scale(textSize,textSize); + if(eCountInf == 1) + { + province.drawImage(Inf,0,textSize); + } + if(eCountInf == 2) + { + province.drawImage(Inf,0,textSize); + province.drawImage(Inf,textSize,textSize); + } + setImage(province); + } + + private void NoTanks(GreenfootImage province,int eCountInf,int eCountHorse, String ownerString, int textSize) + { + GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); + Inf.scale(textSize,textSize); + GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); + horse.scale(textSize,textSize); + province.drawImage(horse,0,textSize); + setImage(province); + if(eCountInf == 1) + { + province.drawImage(Inf,textSize,textSize); + } + if(eCountInf == 2) + { + province.drawImage(Inf,textSize,textSize); + province.drawImage(Inf,2*textSize,textSize); + } + setImage(province); + } + + private void NoHorse(GreenfootImage province,int eCountInf,int eCountTanks, String ownerString, int textSize) + { + GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); + Inf.scale(textSize,textSize); + GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); + tank.scale(textSize,textSize); + if(eCountTanks <= 3) + { + if(eCountTanks == 1) + { + province.drawImage(tank,0,textSize); + } + if(eCountTanks == 2) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + } + if(eCountTanks == 3) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + province.drawImage(tank,textSize*2,textSize); + } + } + else + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(eCountTanksImage,0,textSize); + province.drawImage(tank,eCountTanksImage.getWidth(),textSize); + } + if(eCountTanks<=3) + { + if(eCountInf == 1) + { + province.drawImage(Inf,eCountTanks * textSize,textSize); + } + if(eCountInf == 2) + { + province.drawImage(Inf,eCountTanks * textSize,textSize); + province.drawImage(Inf,eCountTanks * 2 *textSize,textSize); + } + } + if(eCountTanks>3) + { + if(eCountInf == 1) + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize); + } + if(eCountInf == 2) + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize); + province.drawImage(Inf,eCountTanksImage.getWidth() + (2 *textSize),textSize); + } + } + setImage(province); + } + + private void NoInf(GreenfootImage province,int eCountHorse,int eCountTanks, String ownerString, int textSize) + { + + GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); + tank.scale(textSize,textSize); + GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); + horse.scale(textSize,textSize); + + if(eCountTanks <= 3) + { + if(eCountTanks == 1) + { + province.drawImage(tank,0,textSize); + } + if(eCountTanks == 2) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + } + if(eCountTanks == 3) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + province.drawImage(tank,textSize*2,textSize); + } + } + else + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(eCountTanksImage,0,textSize); + province.drawImage(tank,eCountTanksImage.getWidth(),textSize); + } + if(eCountTanks<=3) + { + + province.drawImage(horse,eCountTanks * textSize,textSize); + setImage(province); + + } + if(eCountTanks>3) + { + + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize); + setImage(province); + + } + setImage(province); + } + + private void AllEntity(GreenfootImage province, String ownerString,int eCountTanks, int eCountHorse, int eCountInf,int textSize) + { + GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png"); + tank.scale(textSize,textSize); + GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png"); + horse.scale(textSize,textSize); + GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png"); + Inf.scale(textSize,textSize); + if(eCountTanks <= 3) + { + if(eCountTanks == 1) + { + province.drawImage(tank,0,textSize); + } + if(eCountTanks == 2) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + } + if(eCountTanks == 3) + { + province.drawImage(tank,0,textSize); + province.drawImage(tank,textSize,textSize); + province.drawImage(tank,textSize*2,textSize); + } + } + else + { + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(eCountTanksImage,0,textSize); + province.drawImage(tank,eCountTanksImage.getWidth(),textSize); + } + if(eCountHorse == 1) + { + if(eCountTanks<=3) + { + + province.drawImage(horse,eCountTanks * textSize,textSize); + if(eCountInf == 1) + { + province.drawImage(Inf,eCountTanks * textSize + textSize,textSize); + } + if(eCountInf == 2) + { + province.drawImage(Inf,eCountTanks * textSize + textSize + textSize,textSize); + } + setImage(province); + + } + if(eCountTanks>3) + { + + GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f)); + province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize); + if(eCountInf == 1) + { + province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize,textSize); + } + if(eCountInf == 2) + { + province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize + textSize + textSize,textSize); + } + setImage(province); + + } + } + setImage(province); + } + + public boolean hasClicked() + { + boolean b = clicked; + clicked = false; + return b; + } + +} + diff --git a/Roll_Button.java b/zweiundvierzig/Roll_Button.java similarity index 96% rename from Roll_Button.java rename to zweiundvierzig/Roll_Button.java index 39e226b..cd26ef6 100644 --- a/Roll_Button.java +++ b/zweiundvierzig/Roll_Button.java @@ -1,9 +1,13 @@ +package zweiundvierzig; + /* Hinweis zum Verbleib der Klasse: Diese Klasse soll, da sie zurzeit weder vollstaendig, noch in Verwendung, noch in der Architektur definiert ist, zum Beta-Meilenstein entfernt werden. Sollte die Klasse jedoch zuvor noch Verwendung finden, wird sie nach Absprache mit den jeweiligen Autoren/Benutzern in die Architektur aufgenommen. */ + + import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** diff --git a/Spielanleitung.java b/zweiundvierzig/Spielanleitung.java similarity index 92% rename from Spielanleitung.java rename to zweiundvierzig/Spielanleitung.java index 44ddba4..f9f4eed 100644 --- a/Spielanleitung.java +++ b/zweiundvierzig/Spielanleitung.java @@ -1,20 +1,24 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - -/** - * Write a description of class Spielanleitung here. - * - * @author (your name) - * @version (a version number or a date) - */ -public class Spielanleitung extends Actor -{ - - - public void act() - { - setImage ("Spielanleitung.png"); - - } - - -} +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class Spielanleitung here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class Spielanleitung extends Actor +{ + + + public void act() + { + setImage ("Spielanleitung.png"); + + } + + +} diff --git a/Start_Load.java b/zweiundvierzig/Start_Load.java similarity index 96% rename from Start_Load.java rename to zweiundvierzig/Start_Load.java index 722d19b..82815ba 100644 --- a/Start_Load.java +++ b/zweiundvierzig/Start_Load.java @@ -1,63 +1,67 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - -/** - * Beginnt neues Spiel/ laedt altes Spiel. - * - * @author 4ngelica - * @version 04.07.16 - */ -public class Start_Load extends World implements ButtonEvent -{ - static String backgroundImage = "backgroundLight.png"; // Gibt an, welches Bild in allen Menues als Hintergrund gewaehlt werden soll. - // Light Theme: "backgroundLight.png" - // Dark Theme: "backgroundDark.png" - - Button chulien = new Button("Neues Spiel", 16 , this); - Button spielanleitung = new Button("Spielanleitung", 16, this); - Button zurueck = new Button("zurueck", 16, this); - /** - * Constructor for objects of class Start_Load. - * - */ - public Start_Load() - { - // Create a new world with 600x400 cells with a cell size of 1x1 pixels. - super(1600, 900, 1); - setBackground(backgroundImage); - chulien.setSize(100,50); - spielanleitung.setSize(100,50); - zurueck.setSize(100,50); - addObject (chulien, (1600-chulien.getWidth())/2+100, (900-chulien.getHeight())/2); - addObject (spielanleitung, (1600-spielanleitung.getWidth())/2+100, (900-spielanleitung.getHeight())/2 + 80); - - Greenfoot.setSpeed(100); - Greenfoot.start(); - } - public void buttonClicked ( Bildbutton b) - { - if ( b == chulien) - { - World chean = new Colours (1600, 900, 1); - Greenfoot.setWorld(chean); - - } - - if (b == spielanleitung) - { - addObject (new Spielanleitung(), 800, 410); - addObject (zurueck, 800 , 870); - } - - if (b == zurueck) - { - removeObjects(getObjects(Spielanleitung.class)); - removeObject(zurueck); - } - } - - - public void Load() - { - - } -} +package zweiundvierzig; + + + +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Beginnt neues Spiel/ laedt altes Spiel. + * + * @author 4ngelica + * @version 04.07.16 + */ +public class Start_Load extends World implements ButtonEvent +{ + static String backgroundImage = "backgroundLight.png"; // Gibt an, welches Bild in allen Menues als Hintergrund gewaehlt werden soll. + // Light Theme: "backgroundLight.png" + // Dark Theme: "backgroundDark.png" + + Button chulien = new Button("Neues Spiel", 16 , this); + Button spielanleitung = new Button("Spielanleitung", 16, this); + Button zurueck = new Button("zurueck", 16, this); + /** + * Constructor for objects of class Start_Load. + * + */ + public Start_Load() + { + // Create a new world with 600x400 cells with a cell size of 1x1 pixels. + super(1600, 900, 1); + setBackground(backgroundImage); + chulien.setSize(100,50); + spielanleitung.setSize(100,50); + zurueck.setSize(100,50); + addObject (chulien, (1600-chulien.getWidth())/2+100, (900-chulien.getHeight())/2); + addObject (spielanleitung, (1600-spielanleitung.getWidth())/2+100, (900-spielanleitung.getHeight())/2 + 80); + + Greenfoot.setSpeed(100); + Greenfoot.start(); + } + public void buttonClicked ( Bildbutton b) + { + if ( b == chulien) + { + World chean = new Colours (1600, 900, 1); + Greenfoot.setWorld(chean); + + } + + if (b == spielanleitung) + { + addObject (new Spielanleitung(), 800, 410); + addObject (zurueck, 800 , 870); + } + + if (b == zurueck) + { + removeObjects(getObjects(Spielanleitung.class)); + removeObject(zurueck); + } + } + + + public void Load() + { + + } +} diff --git a/Utils.java b/zweiundvierzig/Utils.java similarity index 98% rename from Utils.java rename to zweiundvierzig/Utils.java index b08c0a1..5128a84 100644 --- a/Utils.java +++ b/zweiundvierzig/Utils.java @@ -1,3 +1,7 @@ +package zweiundvierzig; + + + import greenfoot.*; import java.awt.Color; import java.util.*;