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 299b8c7..0bd02fa 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -42,7 +42,7 @@ 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; @@ -83,7 +83,7 @@ public abstract class GeneralMap extends World implements ButtonEvent if(status == GameStates.KAMPF) { GreenfootImage GameStatesEmpty = new GreenfootImage(750,textSize); - GreenfootImage GameStates = new GreenfootImage("KAMPF!!! Wähle die Provinz aus, die du angreifen möchtest!",textSize,new Color(255,255,255),new Color(0,0,0)); + 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); @@ -92,7 +92,7 @@ public abstract class GeneralMap extends World implements ButtonEvent if(status == GameStates.VERSCHIEBEN) { GreenfootImage GameStatesEmpty = new GreenfootImage(500,textSize); - GreenfootImage GameStates = new GreenfootImage("VERSCHIEBEN! Wähle die Provinz aus!",textSize,new Color(255,255,255),new Color(0,0,0)); + 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); @@ -101,7 +101,7 @@ public abstract class GeneralMap extends World implements ButtonEvent if(status == GameStates.SETZEN) { GreenfootImage GameStatesEmpty = new GreenfootImage(500,textSize); - GreenfootImage GameStates = new GreenfootImage("Setzten! Wähle die Provinz aus!",textSize,new Color(255,255,255),new Color(0,0,0)); + 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); @@ -137,48 +137,6 @@ public abstract class GeneralMap extends World implements ButtonEvent 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}; - } 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]); - p.redrawProvince(); - } } /** @@ -286,16 +244,14 @@ 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; - } - } else if ( modus == b ) { + if ( modus == b ) { if(status==GameStates.SETZEN && freeArmies == 0 ) { status=GameStates.KAMPF; offenderProvince = null; @@ -305,12 +261,10 @@ public abstract class GeneralMap extends World implements ButtonEvent modus.setBackColor(Color.white); modus.setForeColor(Color.black); modus.setText("Kampf\nbeenden"); - System.out.println("KAMPF"); } else if (status==GameStates.KAMPF) { status=GameStates.VERSCHIEBEN; savedProvince = null; modus.setText("Nächster\nSpieler"); - System.out.println("VERSCHIEBEN"); } else if (status==GameStates.VERSCHIEBEN) { freeArmies = -1; if(currentPlayer >= players.length-1) @@ -323,7 +277,6 @@ public abstract class GeneralMap extends World implements ButtonEvent } status=GameStates.SETZEN; modus.setText("Kampf\nbeginnen"); - System.out.println("SETZEN"); } } } @@ -336,46 +289,55 @@ public abstract class GeneralMap extends World implements ButtonEvent String maxDiceDefender = ""; private void actFight() { - if(offenderProvince == null) { - OffenderProvince(); - } else { - defenderProvince(); + 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()); @@ -384,75 +346,75 @@ 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 @@ -460,11 +422,9 @@ public abstract class GeneralMap extends World implements ButtonEvent Province savedProvince = null; private void actMove() { - Province clickedProvince; for ( int i = 1; i <= (provinces.length - 1); i++) { if (provinces[i].hasClicked() == true) { - clickedProvince = provinces[i]; - useProvincesToMove(clickedProvince); + useProvincesToMove(provinces[i]); break; } } @@ -504,18 +464,21 @@ public abstract class GeneralMap extends World implements ButtonEvent */ 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; } } diff --git a/Map_World.java b/Map_World.java index 0bf4a2e..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); @@ -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]); + } } }