diff --git a/GeneralMap.java b/GeneralMap.java index 1c2e187..bcea6ee 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -12,15 +12,15 @@ neue Maps werden als Unterklasse dieser Klasse eingefügt. @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 - */ + */ 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 @@ -73,13 +73,24 @@ public abstract class GeneralMap extends World implements ButtonEvent } 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; @@ -99,7 +110,7 @@ public abstract class GeneralMap extends World implements ButtonEvent { 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)); GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize); - + GameStatesEmpty.drawImage(GameStates,0,0); GreenfootImage States = new GreenfootImage("MapWorldMove.png"); States.drawImage(GameStatesEmpty,X,Y); @@ -146,6 +157,20 @@ public abstract class GeneralMap extends World implements ButtonEvent } } + 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 @@ -162,7 +187,7 @@ public abstract class GeneralMap extends World implements ButtonEvent } else if (status == GameStates.VERSCHIEBEN) { actMove(); } - redrawGameStates(); + redrawGameStates(); } /** @@ -172,7 +197,7 @@ public abstract class GeneralMap extends World implements ButtonEvent { return players.length; } - + /** * Gibt die Farbe des angefragten Spielers heraus. * @param int pID -> Farbe des Spielers @@ -182,6 +207,14 @@ public abstract class GeneralMap extends World implements ButtonEvent 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 @@ -240,10 +273,10 @@ public abstract class GeneralMap extends World implements ButtonEvent @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) + public int getPlayerEntityCount(int playerID) { int c = 0; - for (int i = 1; i > provinces.length; i++) { + for (int i = 1; i < provinces.length; i++) { if(provinces[i].getOwner() == playerID) { c = c + provinces[i].getEntityCount(); } @@ -291,6 +324,7 @@ public abstract class GeneralMap extends World implements ButtonEvent modus.setForeColor(Color.black); modus.setText("Kampf\nbeenden"); } else if (status==GameStates.KAMPF) { + giveRandomStars(players[currentPlayer]); status=GameStates.VERSCHIEBEN; savedProvince = null; modus.setText("Nächster\nSpieler"); @@ -314,12 +348,12 @@ public abstract class GeneralMap extends World implements ButtonEvent } // 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) { @@ -411,20 +445,25 @@ public abstract class GeneralMap extends World implements ButtonEvent diceDefender = null; decider(maxDiceOffenderArray, maxDiceDefenderArray); } - + // berechnet Zahlen und findet Gewinner; führt 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 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."); @@ -434,12 +473,14 @@ public abstract class GeneralMap extends World implements ButtonEvent 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."); } @@ -450,9 +491,9 @@ public abstract class GeneralMap extends World implements ButtonEvent } // Einheiten verschieben - + Province savedProvince = null; - + private void actMove() { for ( int i = 1; i <= (provinces.length - 1); i++) { if (provinces[i].hasClicked() == true) { @@ -514,15 +555,16 @@ public abstract class GeneralMap extends World implements ButtonEvent 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); @@ -598,16 +640,34 @@ public abstract class GeneralMap extends World implements ButtonEvent // 4. Einheiten durch Sterne if ( players[currentPlayer].getStars() > 0) { - String toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden?"); + 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); - int[] starBoni = new int [] {1,2,4,7,10,13,17,21,25,30}; - if ( starsToUse > 0 && starsToUse < 11 ) + + if ( starsToUse <= players[currentPlayer].getStars() ) { - armiesToPlace = armiesToPlace + starBoni[starsToUse -1]; + 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"); + } } - if ( starsToUse < 0 && starsToUse > 10 ) + else { - JOptionPane.showMessageDialog(null,"Ungültige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben"); + JOptionPane.showMessageDialog(null,"Du besitzt nicht die erforderliche Anzahl an Sternen! \n Verarschen kannst du jemand anderen."); } } return armiesToPlace; @@ -635,4 +695,28 @@ public abstract class GeneralMap extends World implements ButtonEvent return Utils.cutArray(savedProvinces); } } -} + + /** + * Gibt einem Spieler eine zufällige 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/Player.java b/Player.java index cc6a0de..36036c5 100644 --- a/Player.java +++ b/Player.java @@ -23,6 +23,7 @@ public class Player extends Actor int textsize; int c; public int active; + boolean starsNeeded = false; //definiert die ID und Namens Variable public Player(int identity,String name, int c) @@ -139,10 +140,15 @@ public class Player extends Actor } return p; } + + public int getEntitiesCount() { + return getWorld().getPlayerEntityCount(id); + } public void gotEntities(int gotEnt) { stats[3]+= gotEnt; + reloadMaxEntities(); redrawPlayer(); } @@ -152,11 +158,34 @@ public class Player extends Actor redrawPlayer(); } - private void maxEntities(int entNumber) + public void gotProvince() { + stats[0]++; + reloadMaxInfluence(); + redrawPlayer(); + starsNeeded = true; + } + + public void lostProvince() { + stats[1]++; + redrawPlayer(); + } + + public void reloadMaxInfluence() { - if (stats[5]< entNumber) + int c = getProvinceCount(); + if(stats[2]< c) { - stats[5]=entNumber; + stats[2]=c; + redrawPlayer(); + } + } + + public void reloadMaxEntities() + { + int c = getEntitiesCount(); + if (stats[5]< c) + { + stats[5]=c; redrawPlayer(); } } @@ -194,6 +223,14 @@ public class Player extends Actor } + 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(); @@ -202,9 +239,6 @@ public class Player extends Actor { n = "leererSpieler"; } - GreenfootImage statistics = new GreenfootImage(137,120); - GreenfootImage Name = new GreenfootImage(n,textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f)); - statistics.drawImage(Name,0,0); GreenfootImage statistics = new GreenfootImage(137,120); if(getWorld().getCurrentPlayerID() == id) { statistics.setColor(new Color(255,255,255)); @@ -220,45 +254,27 @@ public class Player extends Actor private void oDecide(GreenfootImage statistics,int textSize) { GreenfootImage flag = new GreenfootImage("images\\BlaueArmee.jpg"); - redraw(statistics,flag,textSize); switch(color) { case 2: flag = new GreenfootImage("images\\BlaueArmee.jpg"); - - redraw(statistics,flag,textSize); break; case 5: flag = new GreenfootImage("images\\GelbeArmee.jpg"); - - redraw(statistics,flag,textSize); break; case 6: flag = new GreenfootImage("images\\LilaArmee.jpg"); - - redraw(statistics,flag,textSize); break; case 4: flag = new GreenfootImage("images\\RoteArmee.jpg"); - - redraw(statistics,flag,textSize); break; case 1: flag = new GreenfootImage("images\\SchwarzeArmee.jpg"); - - redraw(statistics,flag,textSize); break; case 3: flag = new GreenfootImage("images\\GrueneArmee.jpg"); - redrawArrow(statistics,flag,textSize); break; } - - } - - private void redrawArrow(GreenfootImage statistics,GreenfootImage flag, int textSize) - { - // redraw(statistics,flag,textSize); redraw(statistics,flag,textSize); } @@ -272,4 +288,4 @@ public class Player extends Actor setImage(statistics); } -} +} \ No newline at end of file