Merge pull request #118 from HGE-IT-Course-2016/Spielstart-patch

Add files via upload
master
Felix Stupp 8 years ago committed by GitHub
commit 87b5b16ae0

@ -0,0 +1,142 @@
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
import java.awt.Graphics2D;
/**
Diese Klasse stellt einen Button dar.
Als funktionelles Vorbild dafür hält der Button aus dem .NET-Framework für UWP-Apps dar.
@author Felix Stupp
@version 20.05.2016
*/
public class Bildbutton extends GUI_Interface {
private boolean autoSize = false;
protected GreenfootImage picture = new GreenfootImage(1,1);
private ButtonEvent handler;
/**
Erstellt einen Button mit dem gegebenen Text und der zugehörigen Textgröße.
@param txt Der Text, den der Button darstellen soll.
@param size Die Textgröße, in der der Button den Text darstellen soll.
*/
public Bildbutton(GreenfootImage pict) {
picture = pict;
redrawInternal();
}
/**
Erstellt einen Button mit dem gegebenen Objekt als Event-Handler.
@param h Der Handler mit dem Interface ButtonEvent implementiert.
*/
public Bildbutton(ButtonEvent h) {
handler = h;
redrawInternal();
}
/**
Erstellt einen Button mit dem gegebenen Text, der zugehörigen Textgröße und dem gegebenen Objekt als Event-Handler.
@param txt Der Text, den der Button darstellen soll.
@param size Die Textgröße, in der der Button den Text darstellen soll.
@param h Der Handler mit dem Interface ButtonEvent implementiert.
*/
public Bildbutton(GreenfootImage pict, ButtonEvent h) {
picture = pict;
handler = h;
redrawInternal();
}
/**
Fragt ab, ob ein Klick auf den Button gekommen ist.
Wird intern von Greenfoot benötigt.
*/
public void act() {
if(Greenfoot.mouseClicked(this) && handler != this) {
handler.buttonClicked(this);
}
}
/**
Gibt zurück, ob die Größe des Buttons von dem Text bestimmt werden soll.
@return Wert der AutoSize-Eigenschaft
*/
public boolean getAutoSize() {
return autoSize;
}
/**
Legt fest, ob die Größe des Buttons von dem Text bestimmt werden soll.
Wird der Wert auf TRUE geändert, erfolgt automatisch ein Redraw des Objekts.
@param b Der neue Wert der AutoSize-Eigenschaft.
*/
public void setAutoSize(boolean b) {
autoSize = b;
if(autoSize) {
redraw();
}
}
/**
Gibt den aktuellen Text zurück.
@return Der aktuelle Text
*/
public GreenfootImage getPicture() {
return picture;
}
/**
Setzt den darzustellenden Text auf den neuen Wert.
@param s Der neue Text
@return Gibt an, ob sich der Text geändert hat. Bei TRUE erfolgte bereits ein Redraw.
*/
public boolean setPicture(GreenfootImage s) {
if(picture != s) {
picture = s;
redraw();
return true;
}
return false;
}
/**
Gibt den aktuellen EventHandler des Buttons zurück.
@return Der Handler als ButtonEvent
*/
public ButtonEvent getHandler() {
return handler;
}
/**
Setzt den EventHandler auf ein neues Objekt.
@param h Der Handler mit implementiertem ButtonEvent-Interface
*/
public void setHandler(ButtonEvent h) {
handler = h;
}
/**
Entfernt den aktuellen EventHandler, um die Ausführung zukünftiger Events zu verhindern.
*/
public void removeHandler() {
handler = null;
}
protected void redrawInternal() {
GreenfootImage tI = picture;
if(autoSize) {
sx = tI.getWidth() + (6 * 2) + 4;
sy = tI.getHeight() + (6 * 2) + 4;
}
GreenfootImage all = new GreenfootImage(sx,sy);
Color trans = new Color(0,0,0,0);
all.setColor(trans);
all.fill();
Graphics2D g = all.getAwtImage().createGraphics();
g.setColor(backC);
g.fillRoundRect(0,0,sx,sy,24,24);
all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2);
setImage(all);
}
/**
Zeichnet das GreenfootImage des Buttons erneut und zeigt es an.
*/
public void redraw() {
redrawInternal();
}
}

@ -9,20 +9,18 @@ import java.awt.Graphics2D;
@author Felix Stupp @author Felix Stupp
@version 20.05.2016 @version 20.05.2016
*/ */
public class Button extends GUI_Interface { public class Button extends Bildbutton {
private boolean autoSize = false;
private int textSize = 32; // as default text size private int textSize = 32; // as default text size
private String text = ""; private String text = "";
private ButtonEvent handler;
/** /**
Erstellt einen Button mit dem gegebenen Text und der zugehörigen Textgröße. Erstellt einen Button mit dem gegebenen Text und der zugehörigen Textgröße.
@param txt Der Text, den der Button darstellen soll. @param txt Der Text, den der Button darstellen soll.
@param size Die Textgröße, in der der Button den Text darstellen soll. @param size Die Textgröße, in der der Button den Text darstellen soll.
*/ */
public Button(String txt, int size) { public Button(String txt, int size) {
super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK));
text = txt; text = txt;
textSize = size; textSize = size;
redraw(); redraw();
@ -32,7 +30,7 @@ public class Button extends GUI_Interface {
@param h Der Handler mit dem Interface ButtonEvent implementiert. @param h Der Handler mit dem Interface ButtonEvent implementiert.
*/ */
public Button(ButtonEvent h) { public Button(ButtonEvent h) {
handler = h; super(h);
redraw(); redraw();
} }
/** /**
@ -42,41 +40,12 @@ public class Button extends GUI_Interface {
@param h Der Handler mit dem Interface ButtonEvent implementiert. @param h Der Handler mit dem Interface ButtonEvent implementiert.
*/ */
public Button(String txt, int size, ButtonEvent h) { public Button(String txt, int size, ButtonEvent h) {
super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK),h);
text = txt; text = txt;
textSize = size; textSize = size;
handler = h;
redraw(); redraw();
} }
/**
Fragt ab, ob ein Klick auf den Button gekommen ist.
Wird intern von Greenfoot benötigt.
*/
public void act() {
if(Greenfoot.mouseClicked(this) && handler != this) {
handler.buttonClicked(this);
}
}
/**
Gibt zurück, ob die Größe des Buttons von dem Text bestimmt werden soll.
@return Wert der AutoSize-Eigenschaft
*/
public boolean getAutoSize() {
return autoSize;
}
/**
Legt fest, ob die Größe des Buttons von dem Text bestimmt werden soll.
Wird der Wert auf TRUE geändert, erfolgt automatisch ein Redraw des Objekts.
@param b Der neue Wert der AutoSize-Eigenschaft.
*/
public void setAutoSize(boolean b) {
autoSize = b;
if(autoSize) {
redraw();
}
}
/** /**
Gibt die aktelle Textgröße zurück. Gibt die aktelle Textgröße zurück.
@return Aktuelle Textgröße @return Aktuelle Textgröße
@ -119,44 +88,20 @@ public class Button extends GUI_Interface {
return false; return false;
} }
/** public GreenfootImage getPicture() {
Gibt den aktuellen EventHandler des Buttons zurück. return null;
@return Der Handler als ButtonEvent
*/
public ButtonEvent getHandler() {
return handler;
}
/**
Setzt den EventHandler auf ein neues Objekt.
@param h Der Handler mit implementiertem ButtonEvent-Interface
*/
public void setHandler(ButtonEvent h) {
handler = h;
} }
/**
Entfernt den aktuellen EventHandler, um die Ausführung zukünftiger Events zu verhindern. public boolean setPicture(GreenfootImage i) {
*/ return false;
public void removeHandler() {
handler = null;
} }
/** /**
Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. Zeichnet das GreenfootImage des Buttons erneut und zeigt es an.
*/ */
public void redraw() { public void redraw() {
GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); //picture = new GreenfootImage(text,textSize,Color.BLACK,Color.WHITE);
if(autoSize) { picture = new GreenfootImage(text,textSize,foreC,backC);
sx = tI.getWidth() + (6 * 2) + 4; super.redraw();
sy = tI.getHeight() + (6 * 2) + 4;
}
GreenfootImage all = new GreenfootImage(sx,sy);
Color trans = new Color(0,0,0,0);
all.setColor(trans);
all.fill();
Graphics2D g = all.getAwtImage().createGraphics();
g.setColor(backC);
g.fillRoundRect(0,0,sx,sy,24,24);
all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2);
setImage(all);
} }
} }

@ -9,6 +9,6 @@ import greenfoot.*;
*/ */
public interface ButtonEvent { public interface ButtonEvent {
public void buttonClicked(Button obj); public void buttonClicked(Bildbutton obj);
} }

@ -10,12 +10,12 @@ import javax.swing.JOptionPane;
*/ */
public class Colours extends World implements ButtonEvent public class Colours extends World implements ButtonEvent
{ {
Button schwarz = new Button ("Schwarz", 16, this); Bildbutton schwarz = new Bildbutton (new GreenfootImage("SchwarzeArmeeSkal.png"), this);
Button blau = new Button ("Blau", 16, this); Bildbutton blau = new Bildbutton (new GreenfootImage("BlaueArmeeSkal.png"), this);
Button grün = new Button ("Grün", 16, this); Bildbutton rot = new Bildbutton (new GreenfootImage("RoteArmeeSkal.png"), this);
Button rot = new Button ("Rot", 16, this); Bildbutton gelb = new Bildbutton (new GreenfootImage("GelbeArmeeSkal.png"), this);
Button lila = new Button ("Lila", 16, this); Bildbutton lila = new Bildbutton (new GreenfootImage("LilaArmeeSkal.png"), this);
Button gelb = new Button ("Gelb", 16, this); Bildbutton grün = new Bildbutton (new GreenfootImage("GrueneArmeeSkal.png"), this);
Button weiter = new Button ("Weiter", 16, this); Button weiter = new Button ("Weiter", 16, this);
int[] color = new int [5]; int[] color = new int [5];
String[] pn = new String [5]; String[] pn = new String [5];
@ -35,11 +35,11 @@ public class Colours extends World implements ButtonEvent
Label header = new Label("Klicke auf eine Farbe, um einen Spieler hinzuzufügen:",16); Label header = new Label("Klicke auf eine Farbe, um einen Spieler hinzuzufügen:",16);
Button remove = new Button("Rückgängig",16,this); Button remove = new Button("Rückgängig",16,this);
Label pl1 = new Label("",16); Label pl1 = new Label("",22);
Label pl2 = new Label("",16); Label pl2 = new Label("",22);
Label pl3 = new Label("",16); Label pl3 = new Label("",22);
Label pl4 = new Label("",16); Label pl4 = new Label("",22);
Label pl5 = new Label("",16); Label pl5 = new Label("",22);
/** /**
* Constructor for objects of class Colors. * Constructor for objects of class Colors.
@ -50,35 +50,41 @@ public class Colours extends World implements ButtonEvent
super(x, y, z); super(x, y, z);
setBackground(Start_Load.backgroundImage); setBackground(Start_Load.backgroundImage);
Button[] bList = new Button[] {schwarz,gelb,blau,grün,rot,lila,weiter,remove}; Bildbutton[] bList = new Bildbutton[] {schwarz,gelb,blau,grün,rot,lila,weiter,remove};
Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5}; Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5};
addObject(header,200,15); addObject(header,200,15);
addObject(schwarz, 70, 50); addObject(schwarz, 80, 50);
addObject ( blau, 190, 50); addObject ( blau, 240, 50);
addObject ( grün, 300, 50); addObject ( grün, 400, 50);
addObject ( rot, 410, 50); addObject ( rot, 560, 50);
addObject(gelb, 520, 50); addObject(gelb, 720, 50);
addObject(lila, 630, 50); addObject(lila, 880, 50);
addObject(remove,300,110); addObject(remove,300,160);
addObject (weiter, 410,110); addObject (weiter, 510,160);
addObject(pl1,355,160); addObject(pl1,355,360);
addObject(pl2,355,180); addObject(pl2,355,380);
addObject(pl3,355,200); addObject(pl3,355,400);
addObject(pl4,355,220); addObject(pl4,355,420);
addObject(pl5,355,240); addObject(pl5,355,440);
schwarz.setForeColor(Color.black); //schwarz.setForeColor(Color.black);
gelb.setForeColor(Color.yellow); //gelb.setForeColor(Color.yellow);
blau.setForeColor(Color.blue); //blau.setForeColor(Color.blue);
grün.setForeColor(Color.green); //grün.setForeColor(Color.green);
rot.setForeColor(Color.red); //rot.setForeColor(Color.red);
lila.setForeColor(new Color(161,70,255)); //lila.setForeColor(new Color(161,70,255));
pl1.setForeColor(Color.black);
pl2.setForeColor(Color.black);
pl3.setForeColor(Color.black);
pl4.setForeColor(Color.black);
pl5.setForeColor(Color.black);
for(int i = 0; i < bList.length; i++) { for(int i = 0; i < bList.length; i++) {
bList[i].setSize(100,50); bList[i].setSize(164,100);
} }
for(int i = 0; i < lList.length; i++) { for(int i = 0; i < lList.length; i++) {
lList[i].setBackColor(new Color(0,0,0,0)); lList[i].setBackColor(new Color(0,0,0,0));
@ -94,7 +100,7 @@ public class Colours extends World implements ButtonEvent
// verhindert durch falschsetzten einer Variable die Wiederauswahl einer Farbe // verhindert durch falschsetzten einer Variable die Wiederauswahl einer Farbe
// wenn Weiter geklickt wurde und x größer 1 ist wird eine neue Welt Map erzeugt, // wenn Weiter geklickt wurde und x größer 1 ist wird eine neue Welt Map erzeugt,
//der per Konstruktor die Daten der Colorklasse übertragen werden, dannach wird die Map die aktive Welt //der per Konstruktor die Daten der Colorklasse übertragen werden, dannach wird die Map die aktive Welt
public void buttonClicked (Button b) public void buttonClicked (Bildbutton b)
{ {
if (x < 5) { if (x < 5) {
if (b == schwarz && possw == true) { if (b == schwarz && possw == true) {

@ -12,15 +12,15 @@ neue Maps werden als Unterklasse dieser Klasse eingefügt.
@author GruenerWal, MaxiJohl, Felix Stupp, Samuel @author GruenerWal, MaxiJohl, Felix Stupp, Samuel
@version 0.3.0 @version 0.3.0
*/ */
public abstract class GeneralMap extends World implements ButtonEvent public abstract class GeneralMap extends World implements ButtonEvent
{ {
/* /*
Felder, im Moment nur Anzahl der Provinzen Felder, im Moment nur Anzahl der Provinzen
Später evtl. weitere Werte wie Schwierigkeit denkbar Später evtl. weitere Werte wie Schwierigkeit denkbar
*/ */
Button modus = new Button("Kampf\nbeginnen",25,this); Button modus = new Button("Kampf\nbeginnen",25,this);
private final int X_OFFSET = 200; // Verschiebt die Provinzen nach rechts private final int X_OFFSET = 200; // Verschiebt die Provinzen nach rechts
private final int Y_OFFSET = 0; // Verschiebt die Provinzen nach unten private final int Y_OFFSET = 0; // Verschiebt die Provinzen nach unten
@ -73,25 +73,13 @@ public abstract class GeneralMap extends World implements ButtonEvent
} }
createPlayerObjects(playerList.length); 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() public int currentPlayer()
{ {
return currentPlayer; return currentPlayer;
} }
public void redrawGameStates() public void redrawGameStates()
{ {
int textSize = 20; int textSize = 20;
@ -111,7 +99,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 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); GreenfootImage GameStatesEmpty = new GreenfootImage(GameStates.getWidth(),textSize);
GameStatesEmpty.drawImage(GameStates,0,0); GameStatesEmpty.drawImage(GameStates,0,0);
GreenfootImage States = new GreenfootImage("MapWorldMove.png"); GreenfootImage States = new GreenfootImage("MapWorldMove.png");
States.drawImage(GameStatesEmpty,X,Y); States.drawImage(GameStatesEmpty,X,Y);
@ -158,20 +146,6 @@ 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. Zeigt die angegebene Nachricht in einem JOptionPane Dialogfeld an.
@param msg Die anzuzeigend e Nachricht @param msg Die anzuzeigend e Nachricht
@ -188,7 +162,7 @@ public abstract class GeneralMap extends World implements ButtonEvent
} else if (status == GameStates.VERSCHIEBEN) { } else if (status == GameStates.VERSCHIEBEN) {
actMove(); actMove();
} }
redrawGameStates(); redrawGameStates();
} }
/** /**
@ -198,7 +172,7 @@ public abstract class GeneralMap extends World implements ButtonEvent
{ {
return players.length; return players.length;
} }
/** /**
* Gibt die Farbe des angefragten Spielers heraus. * Gibt die Farbe des angefragten Spielers heraus.
* @param int pID -> Farbe des Spielers * @param int pID -> Farbe des Spielers
@ -208,14 +182,6 @@ public abstract class GeneralMap extends World implements ButtonEvent
return players[pID].getColor(); 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. Gibt den Namen des aktuellen Spielers aus.
@return Der Name des aktuellen Spielers @return Der Name des aktuellen Spielers
@ -274,10 +240,10 @@ public abstract class GeneralMap extends World implements ButtonEvent
@param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen. @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. @return Die Anzahl der Einheiten, die dem Spieler gehören.
*/ */
public int getPlayerEntityCount(int playerID) public int getProvinceEntityCount(int playerID)
{ {
int c = 0; int c = 0;
for (int i = 1; i < provinces.length; i++) { for (int i = 1; i > provinces.length; i++) {
if(provinces[i].getOwner() == playerID) { if(provinces[i].getOwner() == playerID) {
c = c + provinces[i].getEntityCount(); c = c + provinces[i].getEntityCount();
} }
@ -313,7 +279,7 @@ public abstract class GeneralMap extends World implements ButtonEvent
); );
} }
public void buttonClicked(Button b) { public void buttonClicked(Bildbutton b) {
if ( modus == b ) { if ( modus == b ) {
if(status==GameStates.SETZEN && freeArmies == 0 ) { if(status==GameStates.SETZEN && freeArmies == 0 ) {
status=GameStates.KAMPF; status=GameStates.KAMPF;
@ -325,7 +291,6 @@ public abstract class GeneralMap extends World implements ButtonEvent
modus.setForeColor(Color.black); modus.setForeColor(Color.black);
modus.setText("Kampf\nbeenden"); modus.setText("Kampf\nbeenden");
} else if (status==GameStates.KAMPF) { } else if (status==GameStates.KAMPF) {
giveRandomStars(players[currentPlayer]);
status=GameStates.VERSCHIEBEN; status=GameStates.VERSCHIEBEN;
savedProvince = null; savedProvince = null;
modus.setText("Nächster\nSpieler"); modus.setText("Nächster\nSpieler");
@ -349,12 +314,12 @@ public abstract class GeneralMap extends World implements ButtonEvent
} }
// Kampfsystem // Kampfsystem
Province offenderProvince; Province offenderProvince;
Province defenderProvince; Province defenderProvince;
String maxDiceOffender = ""; String maxDiceOffender = "";
String maxDiceDefender = ""; String maxDiceDefender = "";
private void actFight() { private void actFight() {
for(int i = 1; i <= (provinces.length - 1); i++) { for(int i = 1; i <= (provinces.length - 1); i++) {
if (provinces[i].hasClicked() == true) { if (provinces[i].hasClicked() == true) {
@ -446,25 +411,20 @@ public abstract class GeneralMap extends World implements ButtonEvent
diceDefender = null; diceDefender = null;
decider(maxDiceOffenderArray, maxDiceDefenderArray); decider(maxDiceOffenderArray, maxDiceDefenderArray);
} }
// berechnet Zahlen und findet Gewinner; führt Konsequenz aus // berechnet Zahlen und findet Gewinner; führt Konsequenz aus
private void decider(int[] maxDiceOffender, int [] maxDiceDefender) private void decider(int[] maxDiceOffender, int [] maxDiceDefender)
{ {
Player offPl = players[offenderProvince.getOwner()];
Player defPl = players[defenderProvince.getOwner()];
int maxDefender = maxDiceDefender[1]; int maxDefender = maxDiceDefender[1];
int maxOffender = maxDiceOffender[2]; int maxOffender = maxDiceOffender[2];
if (maxOffender > maxDefender) if (maxOffender > maxDefender)
{ {
defenderProvince.removeFromEntities(1); defenderProvince.removeFromEntities(1);
defPl.lostEntity();
if (defenderProvince.getEntityCount() <= 0) { if (defenderProvince.getEntityCount() <= 0) {
defenderProvince.setOwner(offenderProvince.getOwner()); defenderProvince.setOwner(offenderProvince.getOwner());
offenderProvince.removeFromEntities(1); offenderProvince.removeFromEntities(1);
defenderProvince.setEntityCount(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()) + ")."); JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (" + getPlayerName(offenderProvince.getOwner()) + "). Die Provinz gehört fortan dem Angreifer (" + getPlayerName(offenderProvince.getOwner()) + ").");
} else { } 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."); 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.");
@ -474,14 +434,12 @@ public abstract class GeneralMap extends World implements ButtonEvent
if (maxOffender < maxDefender && offenderProvince.getEntityCount()>1) if (maxOffender < maxDefender && offenderProvince.getEntityCount()>1)
{ {
offenderProvince.removeFromEntities(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."); 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) if (maxOffender == maxDefender && offenderProvince.getEntityCount()>1)
{ {
offenderProvince.removeFromEntities(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."); 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.");
} }
@ -492,9 +450,9 @@ public abstract class GeneralMap extends World implements ButtonEvent
} }
// Einheiten verschieben // Einheiten verschieben
Province savedProvince = null; Province savedProvince = null;
private void actMove() { private void actMove() {
for ( int i = 1; i <= (provinces.length - 1); i++) { for ( int i = 1; i <= (provinces.length - 1); i++) {
if (provinces[i].hasClicked() == true) { if (provinces[i].hasClicked() == true) {
@ -556,16 +514,15 @@ public abstract class GeneralMap extends World implements ButtonEvent
savedProvince = null; savedProvince = null;
} }
} }
// Einheiten setzen // Einheiten setzen
int freeArmies = -1; int freeArmies = -1;
private void actPlace() private void actPlace()
{ {
if ( freeArmies == -1 ) { if ( freeArmies == -1 ) {
freeArmies = calculateArmies(); freeArmies = calculateArmies();
players[currentPlayer].gotEntities(freeArmies);
} else if ( freeArmies == 0 ) { } else if ( freeArmies == 0 ) {
modus.setBackColor(Color.white); modus.setBackColor(Color.white);
modus.setForeColor(Color.black); modus.setForeColor(Color.black);
@ -641,36 +598,16 @@ public abstract class GeneralMap extends World implements ButtonEvent
// 4. Einheiten durch Sterne // 4. Einheiten durch Sterne
if ( players[currentPlayer].getStars() > 0) if ( players[currentPlayer].getStars() > 0)
{ {
String toUseString; String toUseString = JOptionPane.showInputDialog(null, "Wieviele Sterne willst du verwenden?");
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 starsToUse = Utils.StringToInt(toUseString);
int[] starBoni = new int [] {1,2,4,7,10,13,17,21,25,30};
if ( starsToUse <= players[currentPlayer].getStars() ) if ( starsToUse > 0 && starsToUse < 11 )
{ {
int[] starBoni = new int [] {1,2,4,7,10,13,17,21,25,30}; armiesToPlace = armiesToPlace + starBoni[starsToUse -1];
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,"Du besitzt nicht die erforderliche Anzahl an Sternen! \n Verarschen kannst du jemand anderen."); JOptionPane.showMessageDialog(null,"Ungültige Zahl. Bitte eine Zahl zwischen 0 und 10 eingeben");
} }
} }
return armiesToPlace; return armiesToPlace;
@ -698,30 +635,4 @@ public abstract class GeneralMap extends World implements ButtonEvent
return Utils.cutArray(savedProvinces); 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);
}
}
} }

@ -66,7 +66,7 @@ public class InputDialogWorld extends World implements ButtonEvent {
} }
} }
public void buttonClicked(Button b) { public void buttonClicked(Bildbutton b) {
if(b == abort) { if(b == abort) {
inputS = null; inputS = null;
} else if(b == okay) { } else if(b == okay) {

@ -8,8 +8,8 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
*/ */
public class Map extends World implements ButtonEvent public class Map extends World implements ButtonEvent
{ {
private Button map1 = new Button ("map1",16,this); Bildbutton map1 = new Bildbutton (new GreenfootImage("WeltkarteSkal.png"), this);
private Button map2 = new Button ("map2",16,this); Bildbutton map2 = new Bildbutton (new GreenfootImage("USAKarteSkal.png"), this);
private Button fertigst = new Button (" Fertigstellen",16,this); private Button fertigst = new Button (" Fertigstellen",16,this);
int[] colour; int[] colour;
String[] pn; String[] pn;
@ -32,11 +32,11 @@ public class Map extends World implements ButtonEvent
pn[i] = name[i]; pn[i] = name[i];
} }
pnu=zahl; pnu=zahl;
addObject(map1, 50, 30); addObject(map1, 200, 80);
addObject(map2, 170, 30); addObject(map2, 470, 80);
addObject(fertigst,110,90 ); addObject(fertigst,330,200 );
map1.setSize(100, 50); map1.setSize(164, 100);
map2.setSize(100, 50); map2.setSize(164, 100);
fertigst.setSize(100, 50); fertigst.setSize(100, 50);
// for ( int i=0; i<=pnu; i++) // for ( int i=0; i<=pnu; i++)
// { // {
@ -45,7 +45,7 @@ public class Map extends World implements ButtonEvent
// } // }
} }
// Die Map Buttons geben der Variable m einen Wert // Die Map Buttons geben der Variable m einen Wert
public void buttonClicked(Button b) public void buttonClicked(Bildbutton b)
{ {
if (b== map1) if (b== map1)

@ -146,6 +146,5 @@ public class Map_World extends GeneralMap
p.setOwner(dataL[(i-1)*2]); p.setOwner(dataL[(i-1)*2]);
p.setEntityCount(dataL[(i*2)-1]); p.setEntityCount(dataL[(i*2)-1]);
} }
redrawPlayers();
} }
} }

@ -23,7 +23,6 @@ public class Player extends Actor
int textsize; int textsize;
int c; int c;
public int active; public int active;
boolean starsNeeded = false;
//definiert die ID und Namens Variable //definiert die ID und Namens Variable
public Player(int identity,String name, int c) public Player(int identity,String name, int c)
@ -140,15 +139,10 @@ public class Player extends Actor
} }
return p; return p;
} }
public int getEntitiesCount() {
return getWorld().getPlayerEntityCount(id);
}
public void gotEntities(int gotEnt) public void gotEntities(int gotEnt)
{ {
stats[3]+= gotEnt; stats[3]+= gotEnt;
reloadMaxEntities();
redrawPlayer(); redrawPlayer();
} }
@ -158,34 +152,11 @@ public class Player extends Actor
redrawPlayer(); redrawPlayer();
} }
public void gotProvince() { private void maxEntities(int entNumber)
stats[0]++;
reloadMaxInfluence();
redrawPlayer();
starsNeeded = true;
}
public void lostProvince() {
stats[1]++;
redrawPlayer();
}
public void reloadMaxInfluence()
{ {
int c = getProvinceCount(); if (stats[5]< entNumber)
if(stats[2]< c)
{ {
stats[2]=c; stats[5]=entNumber;
redrawPlayer();
}
}
public void reloadMaxEntities()
{
int c = getEntitiesCount();
if (stats[5]< c)
{
stats[5]=c;
redrawPlayer(); redrawPlayer();
} }
} }
@ -223,14 +194,6 @@ 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() public void redrawPlayer()
{ {
getWorld().reloadPlayerStat(); getWorld().reloadPlayerStat();
@ -239,6 +202,9 @@ public class Player extends Actor
{ {
n = "leererSpieler"; 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); GreenfootImage statistics = new GreenfootImage(137,120);
if(getWorld().getCurrentPlayerID() == id) { if(getWorld().getCurrentPlayerID() == id) {
statistics.setColor(new Color(255,255,255)); statistics.setColor(new Color(255,255,255));
@ -254,27 +220,45 @@ public class Player extends Actor
private void oDecide(GreenfootImage statistics,int textSize) private void oDecide(GreenfootImage statistics,int textSize)
{ {
GreenfootImage flag = new GreenfootImage("images\\BlaueArmee.jpg"); GreenfootImage flag = new GreenfootImage("images\\BlaueArmee.jpg");
redraw(statistics,flag,textSize);
switch(color) switch(color)
{ {
case 2: case 2:
flag = new GreenfootImage("images\\BlaueArmee.jpg"); flag = new GreenfootImage("images\\BlaueArmee.jpg");
redraw(statistics,flag,textSize);
break; break;
case 5: case 5:
flag = new GreenfootImage("images\\GelbeArmee.jpg"); flag = new GreenfootImage("images\\GelbeArmee.jpg");
redraw(statistics,flag,textSize);
break; break;
case 6: case 6:
flag = new GreenfootImage("images\\LilaArmee.jpg"); flag = new GreenfootImage("images\\LilaArmee.jpg");
redraw(statistics,flag,textSize);
break; break;
case 4: case 4:
flag = new GreenfootImage("images\\RoteArmee.jpg"); flag = new GreenfootImage("images\\RoteArmee.jpg");
redraw(statistics,flag,textSize);
break; break;
case 1: case 1:
flag = new GreenfootImage("images\\SchwarzeArmee.jpg"); flag = new GreenfootImage("images\\SchwarzeArmee.jpg");
redraw(statistics,flag,textSize);
break; break;
case 3: case 3:
flag = new GreenfootImage("images\\GrueneArmee.jpg"); flag = new GreenfootImage("images\\GrueneArmee.jpg");
redrawArrow(statistics,flag,textSize);
break; break;
} }
}
private void redrawArrow(GreenfootImage statistics,GreenfootImage flag, int textSize)
{
// redraw(statistics,flag,textSize);
redraw(statistics,flag,textSize); redraw(statistics,flag,textSize);
} }

@ -12,9 +12,9 @@ public class Start_Load extends World implements ButtonEvent
// Light Theme: "backgroundLight.png" // Light Theme: "backgroundLight.png"
// Dark Theme: "backgroundDark.png" // Dark Theme: "backgroundDark.png"
Button chulien = new Button("Neues Spiel", 16 , this); Button chulien;
Button spielanleitung = new Button("Spielanleitung", 16, this); Button spielanleitung;
Button zurück = new Button("zurück", 16, this); Button zurück;
/** /**
* Constructor for objects of class Start_Load. * Constructor for objects of class Start_Load.
* *
@ -23,6 +23,9 @@ public class Start_Load extends World implements ButtonEvent
{ {
// Create a new world with 600x400 cells with a cell size of 1x1 pixels. // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
super(1600, 900, 1); super(1600, 900, 1);
chulien = new Button("Neues Spiel", 16 , this);
spielanleitung = new Button("Spielanleitung", 16, this);
zurück = new Button("zurück", 16, this);
setBackground(backgroundImage); setBackground(backgroundImage);
chulien.setSize(100,50); chulien.setSize(100,50);
spielanleitung.setSize(100,50); spielanleitung.setSize(100,50);
@ -30,10 +33,8 @@ public class Start_Load extends World implements ButtonEvent
addObject (chulien, (1600-chulien.getWidth())/2+100, (900-chulien.getHeight())/2); addObject (chulien, (1600-chulien.getWidth())/2+100, (900-chulien.getHeight())/2);
addObject (spielanleitung, (1600-spielanleitung.getWidth())/2+100, (900-spielanleitung.getHeight())/2 + 80); addObject (spielanleitung, (1600-spielanleitung.getWidth())/2+100, (900-spielanleitung.getHeight())/2 + 80);
Greenfoot.setSpeed(100);
Greenfoot.start();
} }
public void buttonClicked ( Button b) public void buttonClicked ( Bildbutton b)
{ {
if ( b == chulien) if ( b == chulien)
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 2.1 KiB

Loading…
Cancel
Save