diff --git a/GeneralMap.java b/GeneralMap.java index c6af045..fb8245b 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -417,21 +417,12 @@ public abstract class GeneralMap extends World implements ButtonEvent } 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(); } } @@ -557,6 +548,14 @@ public abstract class GeneralMap extends World implements ButtonEvent } // Kampfsystem + + private void actFight() { + if(offenderProvince == null) { + OffenderProvince(); + } else { + defenderProvince(); + } + } private void OffenderProvince() { @@ -671,6 +670,17 @@ public abstract class GeneralMap extends World implements ButtonEvent } // Einheiten verschieben + + private void actMove() { + Province clickedProvince; + for ( int i = 1; i <= (provinces.length - 1); i++) { + if (provinces[i].hasClicked() == true) { + clickedProvince = provinces[i]; + useProvincesToMove(clickedProvince); + break; + } + } + } /** Nimmt zwei Provinzen entgegen, und fragt, wieviele Einheiten vom ersten zum zweiten Eintrag verschoben werden sollen. @@ -721,4 +731,111 @@ public abstract class GeneralMap extends World implements ButtonEvent savedProvince = null; } } + + // Einheiten setzen + + private void actPlace() + { + 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."); + } + } + } + } + + 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); + } + } }