diff --git a/ArmyPlacer.java b/ArmyPlacer.java deleted file mode 100644 index b603bc7..0000000 --- a/ArmyPlacer.java +++ /dev/null @@ -1,174 +0,0 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -import javax.swing.JOptionPane; - -/** - * Write a description of class ArmyPlacer here. - * - * @author GruenerWal, MaxiJohl - * @version 1.0.0 - */ -public class ArmyPlacer extends Map_World -{ - int freeArmies = -1; - - /** - * Constructor for objects of class ArmyPlacer. - * - */ - public ArmyPlacer(String[] a1, int[] a2) - { - super(a1,a2); - // Hi. - // Dies - // ist - // ein - // unnützer - // Kommentar - // um - // Zeilen - // zu - // farmen - // :) - // Mit - // freundlichen - // Grüßen - // , - // GruenerWal - // - // - // - // I'll be back. - } - - public 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++ ) - { - - // Prüfen, ob eine Provinz NICHT dem aktuellen Spieler gehört - 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 = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden?"); - int starsToUse = Utils.StringToInt(toUseString); - 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,"Ungültige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben"); - } - - } - - - return armiesToPlace; - } - - public 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); - } - - } - - public void placeArmies() - { - if ( freeArmies == -1 ) - { - freeArmies = calculateArmies(); - } - - 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 ) - { - provinces[i].addToEntities(armiesToUse); - freeArmies = freeArmies- armiesToUse; - JOptionPane.showMessageDialog(null,"Einheiten erfolgreich gesetzt, Kommandant " + getPlayerName() + "."); - } - - else if ( armiesToUse > freeArmies ) - { - JOptionPane.showMessageDialog(null,"Nicht genügend freie Einheiten."); - } - - } - } - - } - - public void act() - { - placeArmies(); - } -} diff --git a/Button.java b/Button.java index 0c0975a..ac8a972 100644 --- a/Button.java +++ b/Button.java @@ -1,5 +1,6 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; +import java.awt.Graphics2D; /** Diese Klasse stellt einen Button dar. @@ -149,17 +150,12 @@ public class Button extends GUI_Interface { sy = tI.getHeight() + (6 * 2) + 4; } GreenfootImage all = new GreenfootImage(sx,sy); - Color gray = new Color(133,133,133,255); - Color black = new Color(0,0,0,255); Color trans = new Color(0,0,0,0); - Utils.drawInsideRectangle(all,gray,0); - Utils.drawInsideRectangle(all,black,2); - Utils.drawInsideRectangle(all,gray,6); - Utils.drawInsideRectangle(all,black,7); - all.setColorAt(0,0,trans); - all.setColorAt(sx-1,0,trans); - all.setColorAt(0,sy-1,trans); - all.setColorAt(sx-1,sy-1,trans); + 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); } diff --git a/Colours.java b/Colours.java index 82f15d3..71e997d 100644 --- a/Colours.java +++ b/Colours.java @@ -1,4 +1,6 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; +import javax.swing.JOptionPane; /** * Write a description of class Colors here. @@ -15,46 +17,74 @@ public class Colours extends World implements ButtonEvent Button lila = new Button ("Lila", 16, this); Button gelb = new Button ("Gelb", 16, this); Button weiter = new Button ("Weiter", 16, this); - int [] color = new int [6]; - String [] pn = new String [6]; + int[] color = new int [5]; + String[] pn = new String [5]; int x = 0; - boolean possw = true; - boolean posbl = true; - boolean posgr = true; - boolean posrt = true; - boolean posgb = true; - boolean posli = true; + 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 hinzuzufügen:",16); + Button remove = new Button("Rückgängig",16,this); + Label pl1 = new Label("",16); + Label pl2 = new Label("",16); + Label pl3 = new Label("",16); + Label pl4 = new Label("",16); + Label pl5 = new Label("",16); /** * Constructor for objects of class Colors. * */ public Colours(int x, int y, int z) - { - - super(x, y, z); + { + super(x, y, z); setBackground(Start_Load.backgroundImage); - addObject(schwarz, 50, 30); - addObject ( blau, 170, 30); - addObject ( grün, 280, 30); - addObject ( rot, 390, 30); - addObject(gelb, 500, 30); - addObject(lila, 610, 30); - addObject (weiter, 335,90); - schwarz.setSize(100, 50); - gelb.setSize(100, 50); - blau.setSize(100, 50); - grün.setSize(100, 50); - rot.setSize(100, 50); - lila.setSize(100, 50); - weiter.setSize(100, 50); - + + Button[] bList = new Button[] {schwarz,gelb,blau,grün,rot,lila,weiter,remove}; + Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5}; + + addObject(header,200,15); + + addObject(schwarz, 70, 50); + addObject ( blau, 190, 50); + addObject ( grün, 300, 50); + addObject ( rot, 410, 50); + addObject(gelb, 520, 50); + addObject(lila, 630, 50); + addObject(remove,300,110); + addObject (weiter, 410,110); + + addObject(pl1,355,160); + addObject(pl2,355,180); + addObject(pl3,355,200); + addObject(pl4,355,220); + addObject(pl5,355,240); + + schwarz.setForeColor(Color.black); + gelb.setForeColor(Color.yellow); + blau.setForeColor(Color.blue); + grün.setForeColor(Color.green); + rot.setForeColor(Color.red); + lila.setForeColor(new Color(161,70,255)); + + for(int i = 0; i < bList.length; i++) { + bList[i].setSize(100,50); + } + for(int i = 0; i < lList.length; i++) { + lList[i].setBackColor(new Color(0,0,0,0)); + } + + redraw(); } // Überprüft, ob ein Farbbutton geklickt wurde //Überprüft, ob die Farbe noch nicht ausgewählt wurde @@ -66,55 +96,63 @@ public class Colours extends World implements ButtonEvent //der per Konstruktor die Daten der Colorklasse übertragen werden, dannach wird die Map die aktive Welt public void buttonClicked (Button b) { - if ( b == schwarz && possw == true) - { - color[x] = sw; - pn[x]="Schwarz"; - x+=1; - possw = false; - - } - if (b == blau && posbl == true) - { - color[x] = bl; - pn[x] = "Blau"; - x+=1; - posbl = false; - - } - if (b == grün && posgr == true ) - { - color[x] = gr; - pn[x]="Grün"; - x+=1; - posgr = false; - - } - if ( b == rot && posrt == true) - { - color[x] = rt; - pn[x]="Rot"; - x+=1; - posrt = false; - - } - if ( b == gelb && posgb == true) - { - color [x] = gb; - pn[x]="Gelb"; - x+=1; - posgb = false; - + 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 == grün && posgr == true ) { + color[x] = gr; + pn[x]=getName(x,"Grün"); + 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 == lila && posli == true) - { - color [x] = li; - pn[x]="Lila"; - 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 ) + if ( b == weiter && x > 2 ) { String[] newpn = new String[x]; int[] newcolor = new int[x]; @@ -122,13 +160,57 @@ public class Colours extends World implements ButtonEvent { 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)); + grün.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+" mit der Farbe "+col+" heißen?"); + if(name == null) { + name = ""; + } + return name; } } diff --git a/Debug3.java b/Debug3.java index 8f5d774..29f797d 100644 --- a/Debug3.java +++ b/Debug3.java @@ -1,8 +1,8 @@ public class Debug3 extends Map_World { - public Debug3() { - super( - new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3"}, - new int[] {1,2,3} - ); - } + public Debug3() { + super( + new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3"}, + new int[] {1,2,3} + ); + } } \ No newline at end of file diff --git a/Debug4.java b/Debug4.java index 1b200bf..b9f47c7 100644 --- a/Debug4.java +++ b/Debug4.java @@ -1,8 +1,8 @@ public class Debug4 extends Map_World { - public Debug4() { - super( - new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3","Player No. 4"}, - new int[] {0,1,2,3} - ); - } + public Debug4() { + super( + new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3","Player No. 4"}, + new int[] {1,2,3,4} + ); + } } \ No newline at end of file diff --git a/Debug5.java b/Debug5.java index 30644e1..ef84538 100644 --- a/Debug5.java +++ b/Debug5.java @@ -1,8 +1,8 @@ public class Debug5 extends Map_World { - public Debug5() { - super( - new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3", "Player No. 4", "Spieler Nr. 5"}, - new int[] {0,1,2,3,4} - ); - } + public Debug5() { + super( + new String[] {"Spieler Nr. 1", "Player No. 2", "Spieler Nr. 3", "Player No. 4", "Spieler Nr. 5"}, + new int[] {1,2,3,4,5} + ); + } } \ No newline at end of file diff --git a/Dice_Defender.java b/Dice_Defender.java index 8fbf0c7..068279d 100644 --- a/Dice_Defender.java +++ b/Dice_Defender.java @@ -13,7 +13,7 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse * @author (your name) * @version (a version number or a date) */ -public class Dice_Defender extends Dice +public class Dice_Defender { /** * Act - do whatever the Dice_Offender wants to do. This method is called whenever @@ -32,6 +32,7 @@ public class Dice_Defender extends Dice */ public int[] dice_defender(int troupNumberDefender) { + diceEyesDefender = new int[2]; if(troupNumberDefender == 1) { diceEyesDefender[0] = (int) (Math.random() * 6 +1); diff --git a/Dice_Offender.java b/Dice_Offender.java index 9afea92..2d2973a 100644 --- a/Dice_Offender.java +++ b/Dice_Offender.java @@ -13,7 +13,7 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse * @author (your name) * @version (a version number or a date) */ -public class Dice_Offender extends Dice +public class Dice_Offender { /** * Act - do whatever the Dice_Offender wants to do. This method is called whenever @@ -32,6 +32,7 @@ public class Dice_Offender extends Dice */ public int[] dice_offender(int troupNumberOffender) { + diceEyesOffender = new int[3]; if(troupNumberOffender == 1) { System.out.println("Mit einer verbleibenden Truppe auff dem Feld kann man nicht angreifen!"); diff --git a/GeneralMap.java b/GeneralMap.java index fa4b0ef..0bd02fa 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -1,38 +1,40 @@ 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 für verschiedene Maps; - neue Maps werden als Unterklasse dieser Klasse eingefügt. +Oberklasse für verschiedene Maps; +neue Maps werden als Unterklasse dieser Klasse eingefügt. - @author GruenerWal, MaxiJohl, Felix Stupp - @version 0.3.0 +@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 - Später evtl. weitere Werte wie Schwierigkeit denkbar + Felder, im Moment nur Anzahl der Provinzen + Später evtl. weitere Werte wie Schwierigkeit denkbar */ - Button modus = new Button("Kampf",25,this); + Button modus = new Button("Kampf\nbeginnen",25,this); private final int X_OFFSET = 200; // Verschiebt die Provinzen nach rechts - private final int Y_OFFSET = 25; // Verschiebt die Provinzen nach unten + private final int Y_OFFSET = 0; // Verschiebt die Provinzen nach unten /* - Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert. - Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist. - Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen. - */ + Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert. + Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist. + Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen. + */ private final double SCALE_VALUE = 1; protected enum GameStates { + SETZEN, KAMPF, - VERSCHIEBEN, - SETZEN + VERSCHIEBEN } protected Province[] provinces; @@ -40,39 +42,74 @@ public abstract class GeneralMap extends World implements ButtonEvent protected Player[] players; protected int currentPlayer = 0; - protected GameStates status = GameStates.VERSCHIEBEN; + protected GameStates status = GameStates.SETZEN; protected int provinceCount; protected int armyMinimum; - - // Kampfsystem - Province offenderProvince; - Province defenderProvince; - String maxDiceOffender = ""; - String maxDiceDefender = ""; - - // Einheiten verschieben - Province savedProvince = null; /** - Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler. - @param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird. - @param playerList Die Liste mit den Namen der Spieler - @param colorList Die Liste mit den Farben der Spieler - */ + Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler. + @param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird. + @param playerList Die Liste mit den Namen der Spieler + @param colorList Die Liste mit den Farben der Spieler + */ public GeneralMap(String[] 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( modus, 1500, 808); for (int i = 0; i < playerList.length; i++) { players[i] = new Player(i,playerList[i],colorList[i]); - players[i].redrawPlayer(); + players[i].redrawPlayer(); } createPlayerObjects(playerList.length); } + public int currentPlayer() + { + return currentPlayer; + } + + public void redrawGameStates() + { + int textSize = 20; + int X = 422; + int Y = 677; + + if(status == GameStates.KAMPF) + { + GreenfootImage GameStatesEmpty = new GreenfootImage(750,textSize); + GreenfootImage GameStates = new GreenfootImage("KAMPF!!! Wähle die Provinzen aus, die kämpfen sollen, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); + GameStatesEmpty.drawImage(GameStates,0,0); + GreenfootImage States = new GreenfootImage("MapWorldFight.png"); + States.drawImage(GameStatesEmpty,X,Y); + setBackground(States); + } + if(status == GameStates.VERSCHIEBEN) + { + GreenfootImage GameStatesEmpty = new GreenfootImage(500,textSize); + GreenfootImage GameStates = new GreenfootImage("VERSCHIEBEN! Wähle die Provinzen aus, bei denen du schubsen möchtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); + GameStatesEmpty.drawImage(GameStates,0,0); + GreenfootImage States = new GreenfootImage("MapWorldMove.png"); + States.drawImage(GameStatesEmpty,X,Y); + setBackground(States); + } + if(status == GameStates.SETZEN) + { + GreenfootImage GameStatesEmpty = new GreenfootImage(500,textSize); + GreenfootImage GameStates = new GreenfootImage("SETZEN! Wähle die Provinz aus, der du schenken möchtest, " + getPlayerName() + ".",textSize,new Color(255,255,255),new Color(0,0,0)); // "Setzten" Lern Deutsch, Samuel + 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) { @@ -94,387 +131,82 @@ public abstract class GeneralMap extends World implements ButtonEvent } /** - Fügt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu. - */ + Fügt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu. + */ protected void initProvinces() { for(int i = 1; i < provinces.length; i++) { addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET); } - /* - Legt die Startprovincen der Spieler fest. - */ - int[] dataL = new int[(provinces.length-1)*2]; - /* - dataL speichert folgende Daten: - 0. Spieler-ID des Besitzers (Provinz 1) - 1. Einheitenanzahl (Provinz 1) - 2. Spieler-ID des Besitzers (Provinz 2) - 3. [...] - */ - if(players.length==3) { - /* - Spieler 1 darf beginnen; Hauptstadt: 40 - Spieler 2 ist als zweites dran; Hauptstadt: 20 - Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt: 9 - */ - dataL = new int[] {0,1,2,2,1,2,1,1,0,1,0,1,2,2,0,1,2,4,2,1,1,2,0,2,0,2,2,3,2,3,2,3,0,1,1,2,1,4,1,3,0,1,2,4,0,2,2,4,1,2,1,1,2,1,0,3,0,3,0,4,2,1,1,1,1,1,0,2,1,2,2,1,1,2,1,4,1,3,0,4,2,1,0,2}; - provinces[1].setOwner(0); - provinces[1].setEntityCount(1); - provinces[2].setOwner(2); - provinces[2].setEntityCount(2); - provinces[3].setOwner(1); - provinces[3].setEntityCount(2); - provinces[4].setOwner(1); //Fabrik - provinces[4].setEntityCount(1); - provinces[5].setOwner(0);//Fabrik - provinces[5].setEntityCount(1); - provinces[6].setOwner(0);//Fabrik - provinces[6].setEntityCount(1); - provinces[7].setOwner(2); - provinces[7].setEntityCount(2); - provinces[8].setOwner(0); - provinces[8].setEntityCount(1); - provinces[9].setOwner(2); - provinces[9].setEntityCount(4); - provinces[10].setOwner(2); - provinces[10].setEntityCount(1); - provinces[11].setOwner(1);//Fabrik - provinces[11].setEntityCount(2); - provinces[12].setOwner(0); - provinces[12].setEntityCount(2); - provinces[13].setOwner(0);//Fabrik - provinces[13].setEntityCount(2); - provinces[14].setOwner(2);//Fabrik - provinces[14].setEntityCount(3); - provinces[15].setOwner(2);//Fabrik - provinces[15].setEntityCount(3); - provinces[16].setOwner(2);//Fabrik - provinces[16].setEntityCount(3); - provinces[17].setOwner(0); - provinces[17].setEntityCount(1); - provinces[18].setOwner(1); - provinces[18].setEntityCount(2); - provinces[19].setOwner(1);//Fabrik - provinces[19].setEntityCount(4); - provinces[20].setOwner(1); - provinces[20].setEntityCount(3); - provinces[21].setOwner(0); - provinces[21].setEntityCount(1); - provinces[22].setOwner(2);//Fabrik - provinces[22].setEntityCount(4); - provinces[23].setOwner(0); - provinces[23].setEntityCount(2); - provinces[24].setOwner(2); - provinces[24].setEntityCount(4); - provinces[25].setOwner(1); - provinces[25].setEntityCount(2); - provinces[26].setOwner(1);//Fabrik - provinces[26].setEntityCount(1); - provinces[27].setOwner(2); - provinces[27].setEntityCount(1); - provinces[28].setOwner(0);//Fabrik - provinces[28].setEntityCount(3); - provinces[29].setOwner(0);//Fabrik - provinces[29].setEntityCount(3); - provinces[30].setOwner(0); - provinces[30].setEntityCount(4); - provinces[31].setOwner(2); - provinces[31].setEntityCount(1); - provinces[32].setOwner(1); - provinces[32].setEntityCount(1); - provinces[33].setOwner(1); - provinces[33].setEntityCount(1); - provinces[34].setOwner(0); - provinces[34].setEntityCount(2); - provinces[35].setOwner(1); - provinces[35].setEntityCount(2); - provinces[36].setOwner(2); - provinces[36].setEntityCount(1); - provinces[37].setOwner(1); - provinces[37].setEntityCount(2); - provinces[38].setOwner(1);//Fabrik - provinces[38].setEntityCount(4); - provinces[39].setOwner(1); - provinces[39].setEntityCount(3); - provinces[40].setOwner(0); - provinces[40].setEntityCount(4); - provinces[41].setOwner(2);//Fabrik - provinces[41].setEntityCount(1); - provinces[42].setOwner(0); - provinces[42].setEntityCount(2); - } else if(players.length==4) { - /* - Spieler 1 darf beginnen; Hauptstadt:22 - Spieler 2 ist als zweites dran; Hauptstadt:20 - Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt:2 - Spieler 4 ist als viertes dran und bekommt eine Karte; Hauptstadt:39 - */ - dataL = new int[] {0,1,2,3,2,3,2,2,2,2,2,3,1,2,0,2,1,2,2,2,1,3,2,2,1,3,0,3,0,3,0,3,2,2,3,2,1,4,1,4,0,1,0,2,0,5,0,3,1,2,3,3,3,1,3,2,1,2,1,2,3,1,1,1,3,5,2,2,2,2,2,2,3,1,3,1,3,4,3,1,0,2,3,4}; - provinces[1].setOwner(0); - provinces[1].setEntityCount(1); - provinces[2].setOwner(2); - provinces[2].setEntityCount(3); - provinces[3].setOwner(2); - provinces[3].setEntityCount(3); - provinces[4].setOwner(2);//Fabrik - provinces[4].setEntityCount(2); - provinces[5].setOwner(2);//Fabrik - provinces[5].setEntityCount(2); - provinces[6].setOwner(2);//Fabrik - provinces[6].setEntityCount(3); - provinces[7].setOwner(1); - provinces[7].setEntityCount(2); - provinces[8].setOwner(0); - provinces[8].setEntityCount(2); - provinces[9].setOwner(1); - provinces[9].setEntityCount(2); - provinces[10].setOwner(2);//Fabrik - provinces[10].setEntityCount(2); - provinces[11].setOwner(1);//Fabrik - provinces[11].setEntityCount(3); - provinces[12].setOwner(2); - provinces[12].setEntityCount(2); - provinces[13].setOwner(1);//Fabrik - provinces[13].setEntityCount(3); - provinces[14].setOwner(0);//Fabrik - provinces[14].setEntityCount(3); - provinces[15].setOwner(0);//Fabrik - provinces[15].setEntityCount(3); - provinces[16].setOwner(0);//Fabrik - provinces[16].setEntityCount(3); - provinces[17].setOwner(2); - provinces[17].setEntityCount(2); - provinces[18].setOwner(3); - provinces[18].setEntityCount(2); - provinces[19].setOwner(1);//Fabrik - provinces[19].setEntityCount(4); - provinces[20].setOwner(1); - provinces[20].setEntityCount(4); - provinces[21].setOwner(0); - provinces[21].setEntityCount(1); - provinces[22].setOwner(0);//Fabrik - provinces[22].setEntityCount(2); - provinces[23].setOwner(0); - provinces[23].setEntityCount(5); - provinces[24].setOwner(0); - provinces[24].setEntityCount(3); - provinces[25].setOwner(1); - provinces[25].setEntityCount(2); - provinces[26].setOwner(3);//Fabrik - provinces[26].setEntityCount(3); - provinces[27].setOwner(3); - provinces[27].setEntityCount(1); - provinces[28].setOwner(3);//Fabrik - provinces[28].setEntityCount(2); - provinces[29].setOwner(1);//Fabrik - provinces[29].setEntityCount(2); - provinces[30].setOwner(1); - provinces[30].setEntityCount(2); - provinces[31].setOwner(3); - provinces[31].setEntityCount(1); - provinces[32].setOwner(1); - provinces[32].setEntityCount(1); - provinces[33].setOwner(3); - provinces[33].setEntityCount(5); - provinces[34].setOwner(2); - provinces[34].setEntityCount(2); - provinces[35].setOwner(2); - provinces[35].setEntityCount(2); - provinces[36].setOwner(2); - provinces[36].setEntityCount(2); - provinces[37].setOwner(3); - provinces[37].setEntityCount(1); - provinces[38].setOwner(3);//Fabrik - provinces[38].setEntityCount(1); - provinces[39].setOwner(3); - provinces[39].setEntityCount(4); - provinces[40].setOwner(3); - provinces[40].setEntityCount(1); - provinces[41].setOwner(0);//Fabrik - provinces[41].setEntityCount(2); - provinces[42].setOwner(3); - provinces[42].setEntityCount(4); - } else if(players.length==5) { - /* - Spieler 1 darf beginnen; Hauptstadt:13 - Spieler 2 ist als zweites dran; Hauptstadt:7 - Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt:22 - Spieler 4 ist als viertes dran und bekommt eine Karte; Hauptstadt:20 - Spieler 5 ist als fünftes dran und bekommt zwei Karte; Hauptstadt:41 - */ - dataL = new int[] {2,1,0,2,3,2,1,2,1,2,1,2,1,4,3,1,1,2,3,1,3,3,2,1,0,4,0,2,2,3,0,2,1,3,3,2,3,5,3,3,1,2,2,5,2,3,0,2,2,3,2,2,1,3,4,2,4,3,4,3,0,3,0,3,3,1,4,1,4,1,4,2,2,2,3,2,4,2,0,2,4,4,4,2}; - provinces[1].setOwner(2); - provinces[1].setEntityCount(1); - provinces[2].setOwner(0); - provinces[2].setEntityCount(2); - provinces[3].setOwner(3); - provinces[3].setEntityCount(2); - provinces[4].setOwner(1);//Fabrik - provinces[4].setEntityCount(2); - provinces[5].setOwner(1);//Fabrik - provinces[5].setEntityCount(2); - provinces[6].setOwner(1);//Fabrik - provinces[6].setEntityCount(2); - provinces[7].setOwner(1); - provinces[7].setEntityCount(4); - provinces[8].setOwner(3); - provinces[8].setEntityCount(1); - provinces[9].setOwner(1); - provinces[9].setEntityCount(2); - provinces[10].setOwner(3); - provinces[10].setEntityCount(1); - provinces[11].setOwner(3);//Fabrik - provinces[11].setEntityCount(3); - provinces[12].setOwner(2); - provinces[12].setEntityCount(1); - provinces[13].setOwner(0); - provinces[13].setEntityCount(4); - provinces[14].setOwner(0);//Fabrik - provinces[14].setEntityCount(2); - provinces[15].setOwner(2);//Fabrik - provinces[15].setEntityCount(3); - provinces[16].setOwner(0);//Fabrik - provinces[16].setEntityCount(2); - provinces[17].setOwner(1); - provinces[17].setEntityCount(3); - provinces[18].setOwner(3); - provinces[18].setEntityCount(2); - provinces[19].setOwner(3);//Fabrik - provinces[19].setEntityCount(5); - provinces[20].setOwner(3); - provinces[20].setEntityCount(3); - provinces[21].setOwner(1); - provinces[21].setEntityCount(2); - provinces[22].setOwner(2);//Fabrik - provinces[22].setEntityCount(5); - provinces[23].setOwner(2); - provinces[23].setEntityCount(3); - provinces[24].setOwner(0); - provinces[24].setEntityCount(2); - provinces[25].setOwner(2); - provinces[25].setEntityCount(3); - provinces[26].setOwner(2);//Fabrik - provinces[26].setEntityCount(2); - provinces[27].setOwner(1); - provinces[27].setEntityCount(3); - provinces[28].setOwner(4);//Fabrik - provinces[28].setEntityCount(2); - provinces[29].setOwner(4);//Fabrik - provinces[29].setEntityCount(3); - provinces[30].setOwner(4); - provinces[30].setEntityCount(3); - provinces[31].setOwner(0); - provinces[31].setEntityCount(3); - provinces[32].setOwner(0); - provinces[32].setEntityCount(3); - provinces[33].setOwner(3); - provinces[33].setEntityCount(1); - provinces[34].setOwner(4); - provinces[34].setEntityCount(1); - provinces[35].setOwner(4); - provinces[35].setEntityCount(1); - provinces[36].setOwner(4); - provinces[36].setEntityCount(2); - provinces[37].setOwner(2); - provinces[37].setEntityCount(2); - provinces[38].setOwner(3);//Fabrik - provinces[38].setEntityCount(2); - provinces[39].setOwner(4); - provinces[39].setEntityCount(2); - provinces[40].setOwner(0); - provinces[40].setEntityCount(2); - provinces[41].setOwner(4);//Fabrik - provinces[41].setEntityCount(4); - provinces[42].setOwner(4); - provinces[42].setEntityCount(2); - } - int errors = 0; - for(int i = 1; i < provinces.length; i++) { - Province p = provinces[i]; - p.redrawProvince(); - int oI = (i-1)*2; // ownerID inside dataL - int eI = oI+1; // entitiesCountID inside dataL - // Dieser Code überprüft die Datenliste mit den Daten, die die alte Methode (mit den vielen Zeilen) bereits hinterlegt haben sollte. Nur für Debugging! - if(p.getOwner() != dataL[oI]) { - errors++; - showDialog("dataL-Index " + oI + ", got " + dataL[oI] + ", expected " + p.getOwner()); - } else if(p.getEntityCount() != dataL[eI]) { - errors++; - showDialog("dataL-Index " + eI + ", got " + dataL[eI] + ", expected " + p.getEntityCount()); - } - } - if(errors == 0) { - showDialog("No errors found!"); - } } /** - Zeigt die angegebene Nachricht in einem JOptionPane Dialogfeld an. - @param msg Die anzuzeigend e Nachricht - */ + 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.KAMPF) { - if(offenderProvince == null) { - OffenderProvince(); - } else { - defenderProvince(); - } + if (status == GameStates.SETZEN) { + actPlace(); + } else if(status == GameStates.KAMPF) { + actFight(); } else if (status == GameStates.VERSCHIEBEN) { - Province clickedProvince; - for ( int i = 1; i <= (provinces.length - 1); i++) { - if (provinces[i].hasClicked() == true) { - clickedProvince = provinces[i]; - useProvincesToMove(clickedProvince); - break; - } - } + actMove(); } + redrawGameStates(); } /** - Gibt die Anzahl der vorhandenen Spieler aus. - */ + 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 den Namen des aktuellen Spielers aus. @return Der Name des aktuellen Spielers - */ + */ public String getPlayerName() { return players[currentPlayer].getDisplayName(); } /** - Gibt den Namen des Spielers aus, dem dessen ID gehört. - @param plID Die ID des zu findenden Spielers - @return Der Name des Spielers - */ + Gibt den Namen des Spielers aus, dem dessen ID gehört. + @param plID Die ID des zu findenden Spielers + @return Der Name des Spielers + */ public String getPlayerName(int plID) { return players[plID].getDisplayName(); } /** - Gibt die Anzahl der Sterne des aktuellen Spielers zurück. - @return Die Anzahl der Sterne des aktuellen Spielers - */ + Gibt die Anzahl der Sterne des aktuellen Spielers zurück. + @return Die Anzahl der Sterne des aktuellen Spielers + */ public int getPlayerStars() { return players[currentPlayer].getStars(); } /** - Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört. - @param prID Die gefragte Provinz - */ + Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört. + @param prID Die gefragte Provinz + */ public int getProvinceOwner(int prID) { if(prID < 1 || prID > provinces.length) { @@ -484,9 +216,9 @@ public abstract class GeneralMap extends World implements ButtonEvent } /** - Gibt eine Liste mit allen Provinzen und deren Besitzern zurück. - @return Array mit der Provinz-ID als Index und dem Besitzer als Wert - */ + Gibt eine Liste mit allen Provinzen und deren Besitzern zurück. + @return Array mit der Provinz-ID als Index und dem Besitzer als Wert + */ public int[] getProvinceOwners() { int[] prOwners = new int[provinces.length]; @@ -497,10 +229,10 @@ public abstract class GeneralMap extends World implements ButtonEvent } /** - Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört. - @param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen. - @return Die Anzahl der Einheiten, die dem Spieler gehören. - */ + Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört. + @param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen. + @return Die Anzahl der Einheiten, die dem Spieler gehören. + */ public int getProvinceEntityCount(int playerID) { int c = 0; @@ -512,76 +244,100 @@ public abstract class GeneralMap extends World implements ButtonEvent return c; } + private void resetClicked() { + for(int i = 1; i <= (provinces.length - 1); i++) { + provinces[i].hasClicked(); + } + } + public void buttonClicked(Button b) { - if(status == GameStates.KAMPF) { - status = GameStates.VERSCHIEBEN; - } else if(status == GameStates.VERSCHIEBEN) { - status = GameStates.KAMPF; - currentPlayer++; - if(currentPlayer >= players.length) { - currentPlayer = 0; + 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) { + status=GameStates.VERSCHIEBEN; + savedProvince = null; + modus.setText("Nächster\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"); } } - if ( modus == b && status==GameStates.SETZEN) - { - status=GameStates.KAMPF; - modus.setText("Kampf beenden"); - } - if ( modus == b && status== GameStates.KAMPF) - { - status=GameStates.VERSCHIEBEN; - modus.setText("Nächster Spieler"); - } - if ( modus == b && status==GameStates.VERSCHIEBEN) - { - if( currentPlayer== players.length-1) - { - currentPlayer=0; - } - else - { - currentPlayer+=1; - } - status=GameStates.SETZEN; - modus.setText("Kampf beginnen"); - } } - + // 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() + private void OffenderProvince(Province p) { - for ( int i = 1; i <= (provinces.length - 1); i++) - { - if (provinces[i].hasClicked() == true) - { - offenderProvince = provinces[i]; - provinces[i].redrawProvince(2); - // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als angreifende Provinz ausgewählt! Sie gehört Spieler" + provinces[i].getOwner()); + 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 ausgewählt! Sie gehört Spieler" + provinces[i].getOwner()); + chooser(); } } - private void defenderProvince() + private void DefenderProvince(Province p) { - { - for (int i = 1; i <= (provinces.length - 1); i++) - { - if (provinces[i].hasClicked() == true)//&& defenderProvince != offenderProvince) - { - defenderProvince = provinces[i]; - provinces[i].redrawProvince(3); - // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als verteidigende Provinz ausgewählt! Sie gehört Spieler" + provinces[i].getOwner()); - chooser(); - break; - } - } + if(defenderProvince != null) { + defenderProvince.redrawProvince(); } + defenderProvince = p; + p.redrawProvince(3); + // System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als verteidigende Provinz ausgewählt! Sie gehört Spieler" + provinces[i].getOwner()); + chooser(); } private void chooser() { - System.out.println("Es wird gewürfelt!"); + 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 gewürfelt!"); Dice_Offender diceOffender = new Dice_Offender(); // System.out.println("Der Angreifer ereichte folgende Würfelzahlen:"); int[] maxDiceOffenderArray = diceOffender.dice_offender(offenderProvince.getEntityCount()); @@ -590,93 +346,104 @@ public abstract class GeneralMap extends World implements ButtonEvent int[] maxDiceDefenderArray = diceDefender.dice_defender(defenderProvince.getEntityCount()); Arrays.sort(maxDiceOffenderArray); Arrays.sort(maxDiceDefenderArray); - + maxDiceOffender = ""; for(int i = 0;i<3;i++) { - if(i == 0) - { - maxDiceOffender = "" + maxDiceOffenderArray[i]; - } - else - { - maxDiceOffender = maxDiceOffender + ";" + maxDiceOffenderArray[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(i == 0) - { - maxDiceDefender = "" + maxDiceDefenderArray[i]; - } - else - { - maxDiceDefender = maxDiceDefender + ";" + maxDiceDefenderArray[i]; + if(maxDiceDefenderArray[i] != 0) { + if(i == 0) + { + maxDiceDefender = "" + maxDiceDefenderArray[i]; + } + else + { + maxDiceDefender = maxDiceDefender + ", " + maxDiceDefenderArray[i]; + } } - } - JOptionPane.showMessageDialog(null,"Es wurde gewürfelt. Der Angreifer erreichte folgende Würfelzahlen: " + maxDiceOffender + "\n Der Verteidiger erreichte diese Würfelzahlen: " + maxDiceDefender); + JOptionPane.showMessageDialog(null,"Es wurde gewürfelt. Der Angreifer erreichte folgende Würfelzahlen: " + maxDiceOffender + "\nDer Verteidiger erreichte diese Würfelzahlen: " + maxDiceDefender); diceOffender = null; diceDefender = null; decider(maxDiceOffenderArray, maxDiceDefenderArray); } - + + // berechnet Zahlen und findet Gewinner; führt Konsequenz aus private void decider(int[] maxDiceOffender, int [] maxDiceDefender) { int maxDefender = maxDiceDefender[1]; int maxOffender = maxDiceOffender[2]; - if (maxOffender > maxDefender && defenderProvince.getEntityCount()>1) + if (maxOffender > maxDefender) { - int EntitiesOffender = offenderProvince.getEntityCount(); - int EntitiesDefender = defenderProvince.getEntityCount(); - defenderProvince.setEntityCount(EntitiesDefender - 1); - JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (Spieler " + offenderProvince.getOwner() + ").Dem Verteidiger (Spieler " + defenderProvince.getOwner() + ") wird eine Einheit abgezogen. Er hat nun noch " + defenderProvince.getEntityCount() + " Einheiten"); - + defenderProvince.removeFromEntities(1); + if (defenderProvince.getEntityCount() <= 0) { + defenderProvince.setOwner(offenderProvince.getOwner()); + offenderProvince.removeFromEntities(1); + defenderProvince.setEntityCount(1); + JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Die Provinz gehört 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) { - int EntitiesOffender = offenderProvince.getEntityCount(); - int EntitiesDefender = defenderProvince.getEntityCount(); - offenderProvince.setEntityCount(EntitiesOffender - 1); - JOptionPane.showMessageDialog(null,"Somit gewinnt der Verteidiger (Spieler " + defenderProvince.getOwner() + ").Dem Angreifer (Spieler " + defenderProvince.getOwner() + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten"); + offenderProvince.removeFromEntities(1); + 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) { - int EntitiesOffender = offenderProvince.getEntityCount(); - int EntitiesDefender = defenderProvince.getEntityCount(); - offenderProvince.setEntityCount(EntitiesOffender - 1); - JOptionPane.showMessageDialog(null,"Da es unentschieden ist, gewinnt der Verteidiger (Spieler " + defenderProvince.getOwner() + ").Dem Angreifer (Spieler " + defenderProvince.getOwner() + ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten"); + offenderProvince.removeFromEntities(1); + 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."); } - if (maxOffender>maxDefender && defenderProvince.getEntityCount()==1) - { - defenderProvince.setOwner(offenderProvince.getOwner()); - defenderProvince.setEntityCount(0); - JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (Spieler " + offenderProvince.getOwner() + "). Die Provinz gehört fortan dem Angreifer (" + offenderProvince.getOwner() + ")"); - } + 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. - Überprüft, ob eine Verschiebung möglich ist und führt sie bei Erfolg aus. - */ + Nimmt zwei Provinzen entgegen, und fragt, wieviele Einheiten vom ersten zum zweiten Eintrag verschoben werden sollen. + Überprüft, ob eine Verschiebung möglich ist und führt 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); @@ -691,25 +458,149 @@ public abstract class GeneralMap extends World implements ButtonEvent } /** - Speichert ein gegebene Provinz als savedProvince ein, insofern dieser Platz nicht bereits belegt ist. - Ist er das, so wird überprüft, ob eine neue, an savedProvince angrenzende Provinz angeklickt wurde. - Ist dies der Fall, werden beide Provinzen an moveEntities übergeben. - */ + Speichert ein gegebene Provinz als savedProvince ein, insofern dieser Platz nicht bereits belegt ist. + Ist er das, so wird überprüft, ob eine neue, an savedProvince angrenzende Provinz angeklickt wurde. + Ist dies der Fall, werden beide Provinzen an moveEntities übergeben. + */ private void useProvincesToMove(Province givenProvince) { + if(givenProvince.getOwner() != currentPlayer) { + return; + } if (savedProvince == null) { savedProvince = givenProvince; + givenProvince.redrawProvince(2); } - - else if ((savedProvince != null) && (givenProvince != savedProvince) && (savedProvince.getOwner() == givenProvince.getOwner()) && (savedProvince.getOwner() == currentPlayer) ) + 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(); + } 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 genügend 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++ ) + { + // Prüfen, ob eine Provinz NICHT dem aktuellen Spieler gehört + 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 = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden?"); + int starsToUse = Utils.StringToInt(toUseString); + 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,"Ungültige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben"); + } + } + 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); + } + } } diff --git a/Label.java b/Label.java index d820642..1dfd81b 100644 --- a/Label.java +++ b/Label.java @@ -90,6 +90,11 @@ public class Label extends GUI_Interface { */ public void redraw() { GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); + if(text == "") { + tI = new GreenfootImage(1,1); + tI.setColor(new Color(0,0,0,0)); + tI.fill(); + } if(autoSize) { sx = tI.getWidth(); sy = tI.getHeight(); diff --git a/Map_World.java b/Map_World.java index 01db382..04d93c2 100644 --- a/Map_World.java +++ b/Map_World.java @@ -10,15 +10,11 @@ Klasse der Standard-Welt public class Map_World extends GeneralMap { - /** - Anzahl der Provinzen. - */ /** Konstruktor der Weltkarte; konstruiert eine GeneralMap mit den Ausmassen 1600 auf 900 Pixel. */ - public Map_World(String[] playerList, int[] colorList) { super(playerList,colorList); @@ -62,16 +58,16 @@ public class Map_World extends GeneralMap provinces[6] = new Province( 6 , 1 , 232 , 273 , 2 , "Oststaaten" , new int[] {4 , 5 , 7 , 8}); provinces[7] = new Province( 7 , 1 , 300 , 180 , 2 , "Quebec" , new int[] {4 , 6 , 9}); provinces[8] = new Province( 8 , 1 , 181 , 347 , 1 , "Mittelamerika" , new int[] {5 , 6 , 17}); - provinces[9] = new Province( 9 , 1 , 365 , 55 , 1 , "Groenland" , new int[] {2 , 4 , 7 , 10}); + provinces[9] = new Province( 9 , 1 , 365 , 55 , 1 , "Grönland" , new int[] {2 , 4 , 7 , 10}); // cID 2 - Europa provinces[10] = new Province(10 , 2 , 454 , 142 , 1 , "Island" , new int[] {9 , 11 , 12}); - provinces[11] = new Province(11 , 2 , 424 , 221 , 2 , "Grossbritannien" , new int[] {10 , 12 , 14 , 15}); + provinces[11] = new Province(11 , 2 , 424 , 221 , 2 , "Großbritannien" , new int[] {10 , 12 , 14 , 15}); provinces[12] = new Province(12 , 2 , 520 , 153 , 1 , "Skandinavien" , new int[] {10 , 11 , 13 , 14}); provinces[13] = new Province(13 , 2 , 636 , 180 , 2 , "Russland" , new int[] {12 , 14 , 16 , 27 , 31 , 32}); provinces[14] = new Province(14 , 2 , 528 , 232 , 2 , "Nordeuropa" , new int[] {11 , 12 , 13 , 15 , 16}); provinces[15] = new Province(15 , 2 , 449 , 335 , 2 , "Westeuropa" , new int[] {11 , 14 , 16 , 25}); - provinces[16] = new Province(16 , 2 , 537 , 296 , 2 , "Suedeuropa" , new int[] {13 , 14 , 15 , 25 , 26 , 27}); + provinces[16] = new Province(16 , 2 , 537 , 296 , 2 , "Südeuropa" , new int[] {13 , 14 , 15 , 25 , 26 , 27}); // cID 3 - Suedamerika provinces[17] = new Province(17 , 3 , 245 , 396 , 1 , "Venezuela" , new int[] {8 , 18 , 19}); @@ -85,7 +81,7 @@ public class Map_World extends GeneralMap provinces[23] = new Province(23 , 4 , 572 , 537 , 2 , "Zentralafrika" , new int[] {22 , 25 , 24}); provinces[24] = new Province(24 , 4 , 632 , 500 , 2 , "Ostafrika" , new int[] {21 , 22 , 25 , 23 , 26}); provinces[25] = new Province(25 , 4 , 491 , 444 , 1 , "Nordafrika" , new int[] {15 , 16 , 26 , 23 , 24}); - provinces[26] = new Province(26 , 4 , 574 , 414 , 1 , "Aegypten" , new int[] {27 , 25 , 24 , 16}); + provinces[26] = new Province(26 , 4 , 574 , 414 , 1 , "Ägypten" , new int[] {27 , 25 , 24 , 16}); // cID 5 - Asien provinces[27] = new Province(27 , 5 , 664 , 345 , 2 , "Mittlerer Osten" , new int[] {24 , 26 , 16 , 23 , 31 , 28}); @@ -108,5 +104,47 @@ public class Map_World extends GeneralMap provinces[42] = new Province(42 , 6 , 934 , 628 , 1 , "West Australien" , new int[] {40 , 41 , 39}); initProvinces(); + + /* + Legt die Startprovincen der Spieler fest. + */ + int[] dataL = new int[(provinces.length-1)*2]; + /* + dataL speichert folgende Daten: + 0. Spieler-ID des Besitzers (Provinz 1) + 1. Einheitenanzahl (Provinz 1) + 2. Spieler-ID des Besitzers (Provinz 2) + 3. [...] + */ + if(players.length==3) { + /* + Spieler 1 darf beginnen; Hauptstadt: 40 + Spieler 2 ist als zweites dran; Hauptstadt: 20 + Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt: 9 + */ + dataL = new int[] {0,1,2,2,1,2,1,1,0,1,0,1,2,2,0,1,2,4,2,1,1,2,0,2,0,2,2,3,2,3,2,3,0,1,1,2,1,4,1,3,0,1,2,4,0,2,2,4,1,2,1,1,2,1,0,3,0,3,0,4,2,1,1,1,1,1,0,2,1,2,2,1,1,2,1,4,1,3,0,4,2,1,0,2}; + } else if(players.length==4) { + /* + Spieler 1 darf beginnen; Hauptstadt:22 + Spieler 2 ist als zweites dran; Hauptstadt:20 + Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt:2 + Spieler 4 ist als viertes dran und bekommt eine Karte; Hauptstadt:39 + */ + dataL = new int[] {0,1,2,3,2,3,2,2,2,2,2,3,1,2,0,2,1,2,2,2,1,3,2,2,1,3,0,3,0,3,0,3,2,2,3,2,1,4,1,4,0,1,0,2,0,5,0,3,1,2,3,3,3,1,3,2,1,2,1,2,3,1,1,1,3,5,2,2,2,2,2,2,3,1,3,1,3,4,3,1,0,2,3,4}; + } else if(players.length==5) { + /* + Spieler 1 darf beginnen; Hauptstadt:13 + Spieler 2 ist als zweites dran; Hauptstadt:7 + Spieler 3 ist als drittes dran und bekommt eine Karte; Hauptstadt:22 + Spieler 4 ist als viertes dran und bekommt eine Karte; Hauptstadt:20 + Spieler 5 ist als fünftes dran und bekommt zwei Karte; Hauptstadt:41 + */ + dataL = new int[] {2,1,0,2,3,2,1,2,1,2,1,2,1,4,3,1,1,2,3,1,3,3,2,1,0,4,0,2,2,3,0,2,1,3,3,2,3,5,3,3,1,2,2,5,2,3,0,2,2,3,2,2,1,3,4,2,4,3,4,3,0,3,0,3,3,1,4,1,4,1,4,2,2,2,3,2,4,2,0,2,4,4,4,2}; + } + for(int i = 1; i < provinces.length; i++) { + Province p = provinces[i]; + p.setOwner(dataL[(i-1)*2]); + p.setEntityCount(dataL[(i*2)-1]); + } } } diff --git a/Player.java b/Player.java index c9f3898..4413b3b 100644 --- a/Player.java +++ b/Player.java @@ -4,8 +4,8 @@ import java.awt.Color; /** * Write a description of class Player here. * - * @author (Genosse Betakevin und Genosse Julien) - * @version (version 666) + * @author (Genosse Betakevin und Genosse Julien und Genosse GruenerWal) + * @version 6.6.6-build2 */ public class Player extends Actor { @@ -22,6 +22,7 @@ public class Player extends Actor int color; int textsize; int c; + public int active; //definiert die ID und Namens Variable public Player(int identity,String name, int c) @@ -47,46 +48,56 @@ public class Player extends Actor return stars; } - // Von Felix: Methode nicht architektur-konform + /** + * 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 + /* // erhöht die Sternenzahl um eine random ausgewählte 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 beträgt " + stars + "."); - redrawPlayer(); - } + 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 beträgt " + stars + "."); + redrawPlayer(); + } } */ - + private void checkStars() { if(stars < 0) { stars = 0; } } - + // Von Felix: Architektur-konforme Funktion public int addToStars(int s) { stars += s; @@ -110,7 +121,7 @@ public class Player extends Actor redrawPlayer(); return stars; } - + public boolean canStarsRemoved(int s) { return (stars - s) >= 0; } @@ -233,16 +244,31 @@ public class Player extends Actor break; case 3: flag = new GreenfootImage("images\\GrueneArmee.jpg"); - - redraw(statistics,flag,textSize); + redrawArrow(statistics,flag,textSize); break; } } - private void redraw(GreenfootImage statistics,GreenfootImage flag, int textSize) + private void redrawArrow(GreenfootImage statistics,GreenfootImage flag, int textSize) { + // redraw(statistics,flag,textSize); + GreenfootImage Arrow = new GreenfootImage(137,120); + if(id == 0 || id == 1|| id == 2) + { + Arrow.setColor(Color.GRAY); + Arrow.fill(); + Arrow.drawImage(statistics,0,0); + redraw(Arrow,flag,textSize); + } + else + { + redraw(statistics,flag,textSize); + } + } + private void redraw(GreenfootImage statistics,GreenfootImage flag, int textSize) + { flag.scale(137,83); statistics.drawImage(flag,0,textSize); GreenfootImage playerStatistics = new GreenfootImage(stats[0] + "||" + stats[1] + "||" + stats[2] + "||" +stats[3] + "||" + stats[4] + "||" + stats[5],textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f)); diff --git a/Province.java b/Province.java index 73deb2d..6cdde09 100644 --- a/Province.java +++ b/Province.java @@ -5,7 +5,7 @@ import java.awt.Color; * Write a description of class Province here. * * @author GruenerWal, Felix Stupp - * @version 0.0.2 + * @version 1.1.0 */ public class Province extends Actor { @@ -22,7 +22,8 @@ public class Province extends Actor private int xPos; private int yPos; private int eCount; - + public int textSize; + private GreenfootImage province; private boolean clicked = false; /** * Überprüft, ob die Provinz angeklickt wurde. @@ -171,63 +172,77 @@ public class Province extends Actor public void redrawProvince(int ColorInt) { - int textSize; textSize = 20; - GreenfootImage province = new GreenfootImage(120,100); + 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) { - GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f)); province.drawImage(provinceName,0,0); setImage(province); oDecide(province,textSize,owner,eCount); } if(ColorInt ==2) { - GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.GREEN); + 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) { - GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.RED); + 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(owner == 0) + if(getWorld().getPlayerColor(owner) == 0) { ownerString = "schwarz"; eCalculate(province,ownerString,textSize); } else { - switch(owner) + switch(getWorld().getPlayerColor(owner)) { case 1: ownerString = "schwarz"; eCalculate(province,ownerString,textSize); break; case 2: - ownerString = "rot"; + ownerString = "blau"; eCalculate(province,ownerString,textSize); break; case 3: - ownerString = "blau"; + ownerString = "gruen"; eCalculate(province,ownerString,textSize); break; case 4: - ownerString = "gelb"; + ownerString = "rot"; eCalculate(province,ownerString,textSize); break; case 5: - ownerString = "gruen"; + ownerString = "gelb"; eCalculate(province,ownerString,textSize); break; case 6: diff --git a/images/MapWorldFight.png b/images/MapWorldFight.png new file mode 100644 index 0000000..905e310 Binary files /dev/null and b/images/MapWorldFight.png differ diff --git a/images/MapWorldMove.png b/images/MapWorldMove.png new file mode 100644 index 0000000..31e6023 Binary files /dev/null and b/images/MapWorldMove.png differ