|
|
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
|
|
|
import java.awt.Color;
|
|
|
|
|
|
/**
|
|
|
* Write a description of class Province here.
|
|
|
*
|
|
|
* @author GruenerWal, Felix Stupp
|
|
|
* @version 1.1.0
|
|
|
*/
|
|
|
public class Province extends Actor
|
|
|
{
|
|
|
@Override public GeneralMap getWorld() {
|
|
|
return (GeneralMap) super.getWorld();
|
|
|
}
|
|
|
|
|
|
private int stars = 1;
|
|
|
private int provinceID;
|
|
|
private String displayName;
|
|
|
private int owner = 0;
|
|
|
private boolean[] nextProvinces;
|
|
|
private int continentID;
|
|
|
private int xPos;
|
|
|
private int yPos;
|
|
|
private int eCount;
|
|
|
public int textSize;
|
|
|
private GreenfootImage province;
|
|
|
private boolean clicked = false;
|
|
|
/**
|
|
|
* Überprüft, ob die Provinz angeklickt wurde.
|
|
|
*/
|
|
|
public void act()
|
|
|
{
|
|
|
if(Greenfoot.mouseClicked(this)) {
|
|
|
clicked = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Haupt-Konstruktor
|
|
|
public Province(int pID, int cID, int x, int y, int st, String s1, int[] ia1)
|
|
|
{
|
|
|
provinceID = pID;
|
|
|
continentID = cID;
|
|
|
xPos = x;
|
|
|
yPos = y;
|
|
|
if(st > 0) {
|
|
|
stars = st;
|
|
|
}
|
|
|
displayName = s1;
|
|
|
// Der Teil, der sich um die Konvertierung des int-Array in ein boolean-Array k<>mmert.
|
|
|
int maxNum = 0;
|
|
|
for(int i = 0; i < ia1.length; i++) {
|
|
|
if(maxNum < ia1[i]) {
|
|
|
maxNum = ia1[i];
|
|
|
}
|
|
|
}
|
|
|
nextProvinces = new boolean[maxNum+1];
|
|
|
for(int i = 0; i < ia1.length; i++) {
|
|
|
if(ia1[i] >= 0) {
|
|
|
nextProvinces[ia1[i]] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Zweiter Konstruktor, um auch das boolean-Array gegebenenfalls verwenden zu k<>nnnen.
|
|
|
public Province(int pID, int cID, int x, int y, int st, String s1, boolean[] ba1)
|
|
|
{
|
|
|
provinceID = pID;
|
|
|
continentID = cID;
|
|
|
xPos = x;
|
|
|
yPos = y;
|
|
|
if(st > 0) {
|
|
|
stars = st;
|
|
|
}
|
|
|
displayName = s1;
|
|
|
nextProvinces = Utils.copyArray(ba1);
|
|
|
}
|
|
|
|
|
|
// Liefert die X-Position als Integer
|
|
|
public int getXPos()
|
|
|
{
|
|
|
return xPos;
|
|
|
}
|
|
|
|
|
|
// Liefert die Y-Position als Integer
|
|
|
public int getYPos()
|
|
|
{
|
|
|
return yPos;
|
|
|
}
|
|
|
|
|
|
// Liefert die Provinz-ID als Integer
|
|
|
public int getID()
|
|
|
{
|
|
|
return provinceID;
|
|
|
}
|
|
|
|
|
|
// Liefert die Kontinent-ID als Integer
|
|
|
public int getContinentID()
|
|
|
{
|
|
|
return continentID;
|
|
|
}
|
|
|
|
|
|
// Fragt ab, ob die angegebene Provinz in der N<>he von dieser liegt.
|
|
|
public boolean isProvinceNear(int i) {
|
|
|
if(i >= nextProvinces.length) {
|
|
|
return false;
|
|
|
}
|
|
|
return nextProvinces[i];
|
|
|
}
|
|
|
|
|
|
// Liefert den Anzeigenamen als String
|
|
|
public String getDisplayName()
|
|
|
{
|
|
|
return displayName;
|
|
|
}
|
|
|
|
|
|
// Liefert die Sterne als Integer
|
|
|
public int getStars()
|
|
|
{
|
|
|
return stars;
|
|
|
}
|
|
|
|
|
|
// Liefert den Owner als String
|
|
|
public int getOwner()
|
|
|
{
|
|
|
return owner;
|
|
|
}
|
|
|
|
|
|
// Setzt den Owner, ben<65>tigt String
|
|
|
public void setOwner(int o)
|
|
|
{
|
|
|
if(o < -1) {
|
|
|
o = -1;
|
|
|
}
|
|
|
owner = o;
|
|
|
}
|
|
|
|
|
|
public int getEntityCount() {
|
|
|
return eCount;
|
|
|
}
|
|
|
|
|
|
private void checkEntityCount() {
|
|
|
if(eCount < 0) {
|
|
|
eCount = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public int addToEntities(int a) {
|
|
|
eCount = eCount + a;
|
|
|
checkEntityCount();
|
|
|
redrawProvince(1);
|
|
|
return eCount;
|
|
|
}
|
|
|
|
|
|
public int removeFromEntities(int a) {
|
|
|
eCount = eCount - a;
|
|
|
checkEntityCount();
|
|
|
redrawProvince(1);
|
|
|
return eCount;
|
|
|
}
|
|
|
|
|
|
public int setEntityCount(int a) {
|
|
|
eCount = a;
|
|
|
checkEntityCount();
|
|
|
redrawProvince(1);
|
|
|
return eCount;
|
|
|
}
|
|
|
|
|
|
public void redrawProvince()
|
|
|
{
|
|
|
redrawProvince(1);
|
|
|
}
|
|
|
|
|
|
public void redrawProvince(int ColorInt)
|
|
|
{
|
|
|
textSize = 20;
|
|
|
GreenfootImage provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
int eCountTanks = eCount / 5;
|
|
|
GreenfootImage LenghtCalculate = new GreenfootImage((eCount / 5) + "x",textSize, new Color(0,0,0), new Color(0,0,0));
|
|
|
int lenght = LenghtCalculate.getWidth() + (textSize *3);
|
|
|
|
|
|
if(lenght < provinceName.getWidth())
|
|
|
{
|
|
|
province = new GreenfootImage(provinceName.getWidth(),2*textSize);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
province = new GreenfootImage(lenght,2*textSize);
|
|
|
}
|
|
|
|
|
|
if(ColorInt ==1)
|
|
|
{
|
|
|
province.drawImage(provinceName,0,0);
|
|
|
setImage(province);
|
|
|
oDecide(province,textSize,owner,eCount);
|
|
|
}
|
|
|
if(ColorInt ==2)
|
|
|
{
|
|
|
provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.GREEN);
|
|
|
province.drawImage(provinceName,0,0);
|
|
|
setImage(province);
|
|
|
oDecide(province,textSize,owner,eCount);
|
|
|
}
|
|
|
if(ColorInt == 3)
|
|
|
{
|
|
|
provinceName = new GreenfootImage(displayName,textSize,new Color(0,0,0),Color.RED);
|
|
|
province.drawImage(provinceName,0,0);
|
|
|
setImage(province);
|
|
|
oDecide(province,textSize,owner,eCount);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Weist dem Owner der Provinz sein entsprechendes Color-Tag zu.
|
|
|
*/
|
|
|
public void oDecide(GreenfootImage province,int textSize, int owner, int eCount)
|
|
|
{
|
|
|
String ownerString;
|
|
|
if(getWorld().getPlayerColor(owner) == 0)
|
|
|
{
|
|
|
ownerString = "schwarz";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
switch(getWorld().getPlayerColor(owner))
|
|
|
{
|
|
|
case 1:
|
|
|
ownerString = "schwarz";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
case 2:
|
|
|
ownerString = "blau";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
case 3:
|
|
|
ownerString = "gruen";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
case 4:
|
|
|
ownerString = "rot";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
case 5:
|
|
|
ownerString = "gelb";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
case 6:
|
|
|
ownerString = "lila";
|
|
|
eCalculate(province,ownerString,textSize);
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void eCalculate(GreenfootImage province, String ownerString,int textSize)
|
|
|
{
|
|
|
int eCountTanks = eCount / 5;
|
|
|
int eCountHorse = (eCount - (eCountTanks * 5))/3;
|
|
|
int eCountInf = eCount - (eCountTanks * 5) - (eCountHorse * 3);
|
|
|
|
|
|
if(eCountTanks >= 1 && eCountInf == 0 && eCountHorse == 0)
|
|
|
{
|
|
|
OnlyTanks(province,eCountTanks,ownerString,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 0 && eCountInf == 0 && eCountHorse != 0)
|
|
|
{
|
|
|
OnlyHorses(province,eCountHorse,ownerString,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 0 && eCountInf != 0 && eCountHorse == 0)
|
|
|
{
|
|
|
OnlyInf(province,eCountInf,ownerString,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 0 && eCountInf != 0 && eCountHorse != 0)
|
|
|
{
|
|
|
NoTanks(province,eCountInf,eCountHorse, ownerString, textSize);
|
|
|
}
|
|
|
if(eCountTanks != 0 && eCountInf != 0 && eCountHorse == 0)
|
|
|
{
|
|
|
NoHorse(province,eCountInf,eCountTanks, ownerString, textSize);
|
|
|
}
|
|
|
if(eCountTanks != 0 && eCountInf == 0 && eCountHorse != 0)
|
|
|
{
|
|
|
NoInf(province,eCountInf,eCountTanks, ownerString, textSize);
|
|
|
}
|
|
|
if(eCountTanks == 0 && eCountInf == 0 && eCountHorse == 0)
|
|
|
{
|
|
|
NoEntity(province, ownerString, textSize);
|
|
|
}
|
|
|
if(eCountTanks != 0 && eCountInf != 0 && eCountHorse != 0)
|
|
|
{
|
|
|
AllEntity(province, ownerString,eCountTanks, eCountHorse, eCountInf, textSize);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void NoEntity(GreenfootImage province, String ownerString, int textSize)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
private void OnlyTanks(GreenfootImage province,int eCountTanks, String ownerString, int textSize)
|
|
|
{
|
|
|
GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png");
|
|
|
tank.scale(textSize,textSize);
|
|
|
if(eCountTanks <= 3)
|
|
|
{
|
|
|
if(eCountTanks == 1)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 2)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 3)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
province.drawImage(tank,textSize*2,textSize);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(eCountTanksImage,0,textSize);
|
|
|
province.drawImage(tank,eCountTanksImage.getWidth(),textSize);
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void OnlyHorses(GreenfootImage province,int eCountHorse, String ownerString, int textSize)
|
|
|
{
|
|
|
GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png");
|
|
|
horse.scale(textSize,textSize);
|
|
|
province.drawImage(horse,0,textSize);
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void OnlyInf(GreenfootImage province,int eCountInf, String ownerString, int textSize)
|
|
|
{
|
|
|
GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png");
|
|
|
Inf.scale(textSize,textSize);
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
province.drawImage(Inf,0,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
province.drawImage(Inf,0,textSize);
|
|
|
province.drawImage(Inf,textSize,textSize);
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void NoTanks(GreenfootImage province,int eCountInf,int eCountHorse, String ownerString, int textSize)
|
|
|
{
|
|
|
GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png");
|
|
|
Inf.scale(textSize,textSize);
|
|
|
GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png");
|
|
|
horse.scale(textSize,textSize);
|
|
|
province.drawImage(horse,0,textSize);
|
|
|
setImage(province);
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
province.drawImage(Inf,textSize,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
province.drawImage(Inf,textSize,textSize);
|
|
|
province.drawImage(Inf,2*textSize,textSize);
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void NoHorse(GreenfootImage province,int eCountInf,int eCountTanks, String ownerString, int textSize)
|
|
|
{
|
|
|
GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png");
|
|
|
Inf.scale(textSize,textSize);
|
|
|
GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png");
|
|
|
tank.scale(textSize,textSize);
|
|
|
if(eCountTanks <= 3)
|
|
|
{
|
|
|
if(eCountTanks == 1)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 2)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 3)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
province.drawImage(tank,textSize*2,textSize);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(eCountTanksImage,0,textSize);
|
|
|
province.drawImage(tank,eCountTanksImage.getWidth(),textSize);
|
|
|
}
|
|
|
if(eCountTanks<=3)
|
|
|
{
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanks * textSize,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanks * textSize,textSize);
|
|
|
province.drawImage(Inf,eCountTanks * 2 *textSize,textSize);
|
|
|
}
|
|
|
}
|
|
|
if(eCountTanks>3)
|
|
|
{
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(Inf,eCountTanksImage.getWidth() + textSize,textSize);
|
|
|
province.drawImage(Inf,eCountTanksImage.getWidth() + (2 *textSize),textSize);
|
|
|
}
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void NoInf(GreenfootImage province,int eCountHorse,int eCountTanks, String ownerString, int textSize)
|
|
|
{
|
|
|
|
|
|
GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png");
|
|
|
tank.scale(textSize,textSize);
|
|
|
GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png");
|
|
|
horse.scale(textSize,textSize);
|
|
|
|
|
|
if(eCountTanks <= 3)
|
|
|
{
|
|
|
if(eCountTanks == 1)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 2)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 3)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
province.drawImage(tank,textSize*2,textSize);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(eCountTanksImage,0,textSize);
|
|
|
province.drawImage(tank,eCountTanksImage.getWidth(),textSize);
|
|
|
}
|
|
|
if(eCountTanks<=3)
|
|
|
{
|
|
|
|
|
|
province.drawImage(horse,eCountTanks * textSize,textSize);
|
|
|
setImage(province);
|
|
|
|
|
|
}
|
|
|
if(eCountTanks>3)
|
|
|
{
|
|
|
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize);
|
|
|
setImage(province);
|
|
|
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
private void AllEntity(GreenfootImage province, String ownerString,int eCountTanks, int eCountHorse, int eCountInf,int textSize)
|
|
|
{
|
|
|
GreenfootImage tank = new GreenfootImage("images\\dickebertaskal-" + ownerString + ".png");
|
|
|
tank.scale(textSize,textSize);
|
|
|
GreenfootImage horse = new GreenfootImage("images\\pferdreiterskal-" + ownerString + ".png");
|
|
|
horse.scale(textSize,textSize);
|
|
|
GreenfootImage Inf = new GreenfootImage("images\\infanterieskal-" + ownerString + ".png");
|
|
|
Inf.scale(textSize,textSize);
|
|
|
if(eCountTanks <= 3)
|
|
|
{
|
|
|
if(eCountTanks == 1)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 2)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
}
|
|
|
if(eCountTanks == 3)
|
|
|
{
|
|
|
province.drawImage(tank,0,textSize);
|
|
|
province.drawImage(tank,textSize,textSize);
|
|
|
province.drawImage(tank,textSize*2,textSize);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(eCountTanksImage,0,textSize);
|
|
|
province.drawImage(tank,eCountTanksImage.getWidth(),textSize);
|
|
|
}
|
|
|
if(eCountHorse == 1)
|
|
|
{
|
|
|
if(eCountTanks<=3)
|
|
|
{
|
|
|
|
|
|
province.drawImage(horse,eCountTanks * textSize,textSize);
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanks * textSize + textSize,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanks * textSize + textSize + textSize,textSize);
|
|
|
}
|
|
|
setImage(province);
|
|
|
|
|
|
}
|
|
|
if(eCountTanks>3)
|
|
|
{
|
|
|
|
|
|
GreenfootImage eCountTanksImage = new GreenfootImage(Integer.toString(eCountTanks) + "x",textSize,Color.BLACK,new Color(1.0f,1.0f,1.0f,0.5f));
|
|
|
province.drawImage(horse,eCountTanksImage.getWidth() + textSize,textSize);
|
|
|
if(eCountInf == 1)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize,textSize);
|
|
|
}
|
|
|
if(eCountInf == 2)
|
|
|
{
|
|
|
province.drawImage(Inf,eCountTanksImage.getWidth() + textSize + textSize + textSize + textSize,textSize);
|
|
|
}
|
|
|
setImage(province);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
setImage(province);
|
|
|
}
|
|
|
|
|
|
public boolean hasClicked()
|
|
|
{
|
|
|
boolean b = clicked;
|
|
|
clicked = false;
|
|
|
return b;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|