@ -1,4 +1,5 @@
import greenfoot.* ; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import greenfoot.* ; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import javax.swing.JOptionPane ;
/ * *
/ * *
* Write a description of class ArmyPlacer here .
* Write a description of class ArmyPlacer here .
@ -8,11 +9,7 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
* /
* /
public class ArmyPlacer extends Map_World
public class ArmyPlacer extends Map_World
{
{
int freeArmies = - 1 ;
public int armiesToPlace ;
public int armyMinimum ;
/ * *
/ * *
* Constructor for objects of class ArmyPlacer .
* Constructor for objects of class ArmyPlacer .
@ -37,38 +34,141 @@ public class ArmyPlacer extends Map_World
// Grüßen
// Grüßen
// ,
// ,
// GruenerWal
// GruenerWal
//
//
//
// I'll be back.
}
}
public int calculateArmies ( )
public int calculateArmies ( )
{
{
int armiesToPlace ;
Province [ ] continentArray ;
boolean continentChecked = false ;
// 1. ArmyMinimum einbeziehen
armiesToPlace = armyMinimum ;
armiesToPlace = armyMinimum ;
// 2. Einheiten durch Provinzen einbeziehen
armiesToPlace = armiesToPlace + Math . round ( players [ currentPlayer ] . getProvinceCount ( ) / 3 ) ;
armiesToPlace = armiesToPlace + Math . round ( players [ currentPlayer ] . getProvinceCount ( ) / 3 ) ;
return 0 ;
// 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 )
public Province [ ] giveContinentArray ( int cID )
{
{
Province [ ] savedProvinces = new Province [ provinceCount + 1 ] ;
Province [ ] savedProvinces = new Province [ provinceCount + 1 ] ;
Province [ ] continentProvinces ;
Province [ ] continentProvinces ;
int c = 0 ;
for ( int i = 1 ; i < = provinceCount ; i + + )
for ( int i = 1 ; i < = provinceCount ; i + + )
{
{
if ( provinces [ i ] . getContinentID ( ) = = cID )
if ( provinces [ i ] . getContinentID ( ) = = cID )
{
{
savedProvinces [ i ] = provinces [ i ] ;
savedProvinces [ i ] = provinces [ i ] ;
c + + ;
}
}
}
}
return Utils . cutArray ( savedProvinces ) ;
if ( c < 1 )
{
return null ;
}
else
{
return Utils . cutArray ( savedProvinces ) ;
}
}
}
public void placeArmies ( )
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 ( ) ;
}
}
}
}