GeneralMap Integration & Erweiterung
- Integration des Kampfsystems und des "Einheiten verschieben"-Systems - Vorbereitung des Spielerwechsels - Utils.StringToInt(String) hinzugefügtmaster
parent
7e7491c541
commit
b65d0ffa43
@ -1,134 +1,311 @@
|
|||||||
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
|
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
|
||||||
import java.lang.Math;
|
import java.lang.Math;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import greenfoot.MouseInfo.*;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Oberklasse für verschiedene Maps;
|
Oberklasse für verschiedene Maps;
|
||||||
neue Maps werden als Unterklasse dieser Klasse eingefügt.
|
neue Maps werden als Unterklasse dieser Klasse eingefügt.
|
||||||
|
|
||||||
@author GruenerWal, MaxiJohl, Felix Stupp
|
@author GruenerWal, MaxiJohl, Felix Stupp
|
||||||
@version 0.3.0
|
@version 0.3.0
|
||||||
*/
|
*/
|
||||||
public abstract class GeneralMap extends World
|
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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private final int X_OFFSET = 0; // Verschiebt die Provinzen nach rechts
|
private final int X_OFFSET = 0; // 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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert.
|
Die einzelnen Positionen der Provinzen wird mit SCALE_VALUE/10000 multipliziert.
|
||||||
Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist.
|
Dies ist nützlich, wenn die Karte beispielsweise nur noch 80% der Originalgröße bei ihrer Darstellung groß ist.
|
||||||
Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen.
|
Bei diesem Beispiel wäre hier, neben dem Offset oben, der Wert 0.8 einzutragen.
|
||||||
*/
|
*/
|
||||||
private final double SCALE_VALUE = 1;
|
private final double SCALE_VALUE = 1;
|
||||||
|
|
||||||
protected Province[] provinces;
|
protected enum GameStates {
|
||||||
protected Player[] players;
|
KAMPF,
|
||||||
|
VERSCHIEBEN
|
||||||
protected int currentPlayer = 0;
|
}
|
||||||
|
|
||||||
/**
|
protected Province[] provinces;
|
||||||
Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler.
|
protected Player[] players;
|
||||||
@param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird.
|
|
||||||
@param playerList Die Liste mit den Namen der Spieler
|
protected int currentPlayer = 0;
|
||||||
@param colorList Die Liste mit den Farben der Spieler
|
protected GameStates status = GameStates.VERSCHIEBEN;
|
||||||
*/
|
|
||||||
public GeneralMap(String backImage, String[] playerList, int[] colorList)
|
Province offenderProvince;
|
||||||
{
|
Province defenderProvince;
|
||||||
|
|
||||||
|
Province savedProvince = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Erstellt eine GeneralMap mit allen Eigenschaften und initialisiert die Arrays für Provinzen und Spieler.
|
||||||
|
@param backImage Das Hintergrundbild, welches von dieser Klasse geladen und dargestellt wird.
|
||||||
|
@param playerList Die Liste mit den Namen der Spieler
|
||||||
|
@param colorList Die Liste mit den Farben der Spieler
|
||||||
|
*/
|
||||||
|
public GeneralMap(String backImage, String[] playerList, int[] colorList)
|
||||||
|
{
|
||||||
super(1600,900,1);
|
super(1600,900,1);
|
||||||
players = new Player[playerList.length];
|
players = new Player[playerList.length];
|
||||||
for (int i = 0; i < playerList.length; i++) {
|
for (int i = 0; i < playerList.length; i++) {
|
||||||
players[i] = new Player(i,playerList[i],colorList[i]);
|
players[i] = new Player(i,playerList[i],colorList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fügt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu.
|
Fügt alle Provinzen aus dem Array der Welt an der entsprechden Stelle zu.
|
||||||
*/
|
*/
|
||||||
protected void initProvinces() {
|
protected void initProvinces() {
|
||||||
for(int i = 1; i < provinces.length; i++) {
|
for(int i = 1; i < provinces.length; i++) {
|
||||||
addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET);
|
addObject(provinces[i],((int) Math.floor(provinces[i].getXPos() * SCALE_VALUE)) + X_OFFSET,((int) Math.floor(provinces[i].getYPos() * SCALE_VALUE)) + Y_OFFSET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void act() {
|
||||||
Gibt die Anzahl der vorhandenen Spieler aus.
|
if(status == GameStates.KAMPF) {
|
||||||
*/
|
if(offenderProvince == null)
|
||||||
public int getPlayerCount()
|
{
|
||||||
{
|
OffenderProvince();
|
||||||
return players.length;
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
/**
|
defenderProvince();
|
||||||
Gibt den Namen des aktuellen Spielers aus.
|
}
|
||||||
@return Der Name des aktuellen Spielers
|
} else if(status == GameStates.VERSCHIEBEN) {
|
||||||
*/
|
Province clickedProvince;
|
||||||
public String getPlayerName()
|
|
||||||
{
|
for ( int i = 1; i <= (provinces.length - 1); i++)
|
||||||
return players[currentPlayer].getDisplayName();
|
{
|
||||||
}
|
if (provinces[i].hasClicked() == true)
|
||||||
|
{
|
||||||
/**
|
clickedProvince = provinces[i];
|
||||||
Gibt den Namen des Spielers aus, dem dessen ID gehört.
|
useProvincesToMove(clickedProvince);
|
||||||
@param plID Die ID des zu findenden Spielers
|
break;
|
||||||
@return Der Name des Spielers
|
}
|
||||||
*/
|
}
|
||||||
public String getPlayerName(int plID)
|
}
|
||||||
{
|
}
|
||||||
return players[plID].getDisplayName();
|
|
||||||
}
|
/**
|
||||||
|
Gibt die Anzahl der vorhandenen Spieler aus.
|
||||||
/**
|
*/
|
||||||
Gibt die Anzahl der Sterne des aktuellen Spielers zurück.
|
public int getPlayerCount()
|
||||||
@return Die Anzahl der Sterne des aktuellen Spielers
|
{
|
||||||
*/
|
return players.length;
|
||||||
public int getPlayerStars()
|
}
|
||||||
{
|
|
||||||
return players[currentPlayer].getStars();
|
/**
|
||||||
}
|
Gibt den Namen des aktuellen Spielers aus.
|
||||||
|
@return Der Name des aktuellen Spielers
|
||||||
/**
|
*/
|
||||||
Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört.
|
public String getPlayerName()
|
||||||
@param prID Die gefragte Provinz
|
{
|
||||||
*/
|
return players[currentPlayer].getDisplayName();
|
||||||
public int getProvinceOwner(int prID)
|
}
|
||||||
{
|
|
||||||
if(prID < 1 || prID > provinces.length) {
|
/**
|
||||||
return -1;
|
Gibt den Namen des Spielers aus, dem dessen ID gehört.
|
||||||
}
|
@param plID Die ID des zu findenden Spielers
|
||||||
return provinces[prID].getOwner();
|
@return Der Name des Spielers
|
||||||
}
|
*/
|
||||||
|
public String getPlayerName(int plID)
|
||||||
/**
|
{
|
||||||
Gibt eine Liste mit allen Provinzen und deren Besitzern zurück.
|
return players[plID].getDisplayName();
|
||||||
@return Array mit der Provinz-ID als Index und dem Besitzer als Wert
|
}
|
||||||
*/
|
|
||||||
public int[] getProvinceOwners()
|
/**
|
||||||
{
|
Gibt die Anzahl der Sterne des aktuellen Spielers zurück.
|
||||||
int[] prOwners = new int[provinces.length];
|
@return Die Anzahl der Sterne des aktuellen Spielers
|
||||||
for (int i = 1; i > provinces.length; i++) {
|
*/
|
||||||
prOwners[i] = provinces[i].getOwner();
|
public int getPlayerStars()
|
||||||
}
|
{
|
||||||
return prOwners;
|
return players[currentPlayer].getStars();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört.
|
Gibt die ID des Spielers zurück, dem die gefragte Provinz gehört.
|
||||||
@param playerID Die ID des Spielers, für den die Einheiten gezählt werden sollen.
|
@param prID Die gefragte Provinz
|
||||||
@return Die Anzahl der Einheiten, die dem Spieler gehören.
|
*/
|
||||||
*/
|
public int getProvinceOwner(int prID)
|
||||||
public int getProvinceEntityCount(int playerID)
|
{
|
||||||
{
|
if(prID < 1 || prID > provinces.length) {
|
||||||
int c = 0;
|
return -1;
|
||||||
for (int i = 1; i > provinces.length; i++) {
|
}
|
||||||
if(provinces[i].getOwner() == playerID) {
|
return provinces[prID].getOwner();
|
||||||
c = c + provinces[i].getEntityCount();
|
}
|
||||||
}
|
|
||||||
}
|
/**
|
||||||
return c;
|
Gibt eine Liste mit allen Provinzen und deren Besitzern zurück.
|
||||||
}
|
@return Array mit der Provinz-ID als Index und dem Besitzer als Wert
|
||||||
|
*/
|
||||||
|
public int[] getProvinceOwners()
|
||||||
|
{
|
||||||
|
int[] prOwners = new int[provinces.length];
|
||||||
|
for (int i = 1; i > provinces.length; i++) {
|
||||||
|
prOwners[i] = provinces[i].getOwner();
|
||||||
|
}
|
||||||
|
return prOwners;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Zählt die Anzahl der Einheiten von allen Provinzen zusammen, die einem bestimmten Spieler gehört.
|
||||||
|
@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)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
for (int i = 1; i > provinces.length; i++) {
|
||||||
|
if(provinces[i].getOwner() == playerID) {
|
||||||
|
c = c + provinces[i].getEntityCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void buttonClicked(Button b) {
|
||||||
|
if(status == GameStates.KAMPF) {
|
||||||
|
status = GameStates.VERSCHIEBEN;
|
||||||
|
} else if(status == GameStates.VERSCHIEBEN) {
|
||||||
|
status = GameStates.KAMPF;
|
||||||
|
currentPlayer++;
|
||||||
|
if(currentPlayer >= players.length) {
|
||||||
|
currentPlayer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kampfsystem
|
||||||
|
|
||||||
|
private void OffenderProvince()
|
||||||
|
{
|
||||||
|
for ( int i = 1; i <= (provinces.length - 1); i++)
|
||||||
|
{
|
||||||
|
if (provinces[i].hasClicked() == true)
|
||||||
|
{
|
||||||
|
offenderProvince = provinces[i];
|
||||||
|
System.out.println("1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void defenderProvince()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= (provinces.length - 1); i++)
|
||||||
|
{
|
||||||
|
if (provinces[i].hasClicked() == true)//&& defenderProvince != offenderProvince)
|
||||||
|
{
|
||||||
|
defenderProvince = provinces[i];
|
||||||
|
System.out.println("2");
|
||||||
|
chooser();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chooser()
|
||||||
|
{
|
||||||
|
Dice_Offender diceOffender = new Dice_Offender();
|
||||||
|
int[] maxDiceOffender = diceOffender.max_offender(offenderProvince.getEntityCount());
|
||||||
|
Dice_Defender diceDefender = new Dice_Defender();
|
||||||
|
int[] maxDiceDefender = diceDefender.max_defender(defenderProvince.getEntityCount());
|
||||||
|
Arrays.sort(maxDiceOffender);
|
||||||
|
Arrays.sort(maxDiceDefender);
|
||||||
|
decider(maxDiceOffender, maxDiceDefender);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void decider(int[] maxDiceOffender, int [] maxDiceDefender)
|
||||||
|
{
|
||||||
|
int maxDefender = maxDiceDefender[1];
|
||||||
|
int maxOffender = maxDiceOffender[2];
|
||||||
|
if (maxOffender>maxDefender && defenderProvince.getEntityCount()>1)
|
||||||
|
{
|
||||||
|
int EntitiesOffender = offenderProvince.getEntityCount();
|
||||||
|
int EntitiesDefender = defenderProvince.getEntityCount();
|
||||||
|
defenderProvince.setEntityCount(EntitiesDefender - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxOffender<maxDefender && offenderProvince.getEntityCount()>1)
|
||||||
|
{
|
||||||
|
int EntitiesOffender = offenderProvince.getEntityCount();
|
||||||
|
int EntitiesDefender = defenderProvince.getEntityCount();
|
||||||
|
offenderProvince.setEntityCount(EntitiesOffender - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxOffender>maxDefender && defenderProvince.getEntityCount()==1)
|
||||||
|
{
|
||||||
|
defenderProvince.setOwner(offenderProvince.getOwner());
|
||||||
|
defenderProvince.setEntityCount(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxOffender>maxDefender && offenderProvince.getEntityCount()==1)
|
||||||
|
{
|
||||||
|
offenderProvince.setOwner(defenderProvince.getOwner());
|
||||||
|
offenderProvince.setEntityCount(0);
|
||||||
|
}
|
||||||
|
System.out.println("3");
|
||||||
|
offenderProvince = null;
|
||||||
|
defenderProvince = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Einheiten verschieben
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nimmt zwei Provinzen entgegen, und fragt, wieviele Einheiten vom ersten zum zweiten Eintrag verschoben werden sollen.
|
||||||
|
* Überprüft, ob eine Verschiebung möglich ist und führt sie bei Erfolg aus.
|
||||||
|
*/
|
||||||
|
private void moveEntities(Province sourceProvince, Province destinationProvince)
|
||||||
|
{
|
||||||
|
String toMoveString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du verschieben?");
|
||||||
|
int entitiesToMove = Utils.StringToInt(toMoveString);
|
||||||
|
|
||||||
|
if (entitiesToMove == 0) {
|
||||||
|
JOptionPane.showMessageDialog(null,"Bitte eine Zahl eingeben, Kommandant " + getPlayerName() + ".");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (sourceProvince.getEntityCount() - entitiesToMove) > 0)
|
||||||
|
{
|
||||||
|
sourceProvince.removeFromEntities(entitiesToMove);
|
||||||
|
destinationProvince.addToEntities(entitiesToMove);
|
||||||
|
JOptionPane.showMessageDialog(null,"Einheiten erfolgreich verschoben, Kommandant " + getPlayerName() + ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( (sourceProvince.getEntityCount() - entitiesToMove) <= 0)
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null,"Du hast nicht genügend Einheiten, um die gewünschte Anzahl von " + sourceProvince.getDisplayName() + " nach " + destinationProvince.getDisplayName() + " zu verschieben, Köhler.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Speichert ein gegebene Provinz als savedProvince ein, insofern dieser Platz nicht bereits belegt ist.
|
||||||
|
* Ist er das, so wird überprüft, ob eine neue, an savedProvince angrenzende Provinz angeklickt wurde.
|
||||||
|
* Ist dies der Fall, werden beide Provinzen an moveEntities übergeben.
|
||||||
|
*/
|
||||||
|
private void useProvincesToMove(Province givenProvince)
|
||||||
|
{
|
||||||
|
if (savedProvince == null)
|
||||||
|
{
|
||||||
|
savedProvince = givenProvince;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ((savedProvince != null) && (givenProvince != savedProvince) && (savedProvince.getOwner() == givenProvince.getOwner()) && (savedProvince.getOwner() == currentPlayer) )
|
||||||
|
{
|
||||||
|
if (givenProvince.isProvinceNear(savedProvince.getID()) == true)
|
||||||
|
{
|
||||||
|
moveEntities(savedProvince,givenProvince);
|
||||||
|
}
|
||||||
|
|
||||||
|
savedProvince = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue