@ -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
@ -68,13 +68,25 @@ 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 ;
@ -94,7 +106,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 ) ;
@ -140,13 +152,13 @@ public abstract class GeneralMap extends World implements ButtonEvent
addObject ( provinces [ i ] , ( ( int ) Math . floor ( provinces [ i ] . getXPos ( ) * SCALE_VALUE ) ) + X_OFFSET , ( ( int ) Math . floor ( provinces [ i ] . getYPos ( ) * SCALE_VALUE ) ) + Y_OFFSET ) ;
}
}
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 ( ) ;
@ -171,7 +183,7 @@ public abstract class GeneralMap extends World implements ButtonEvent
} else if ( status = = GameStates . VERSCHIEBEN ) {
actMove ( ) ;
}
redrawGameStates ( ) ;
redrawGameStates ( ) ;
}
/ * *
@ -181,7 +193,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
@ -192,9 +204,9 @@ public abstract class GeneralMap extends World implements ButtonEvent
}
/ * *
Gibt die PlayerID des aktuellen Spielers an .
@return PlayerID des aktuellen Spielers
* /
Gibt die PlayerID des aktuellen Spielers an .
@return PlayerID des aktuellen Spielers
* /
public int getCurrentPlayerID ( ) {
return currentPlayer ;
}
@ -286,6 +298,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" ) ;
@ -308,12 +321,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 ) {
@ -405,13 +418,13 @@ 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 )
@ -451,9 +464,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 ) {
@ -515,11 +528,11 @@ public abstract class GeneralMap extends World implements ButtonEvent
savedProvince = null ;
}
}
// Einheiten setzen
int freeArmies = - 1 ;
private void actPlace ( )
{
if ( freeArmies = = - 1 ) {
@ -600,16 +613,36 @@ 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 ;
@ -637,4 +670,30 @@ 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 ) ;
}
}
}