diff --git a/ArmySchubser.java b/ArmySchubser.java index 86fd947..307b18e 100644 --- a/ArmySchubser.java +++ b/ArmySchubser.java @@ -1,10 +1,3 @@ -/* - Hinweis zum Verbleib der Klasse: - Diese Klasse wird nach ihrer Fertigstellung in die GeneralMap integriert. - Dabei wird der Code der act()-Methode innerhalb einer If-Abfrage bei bestimmten States ausgeführt. - Sonstige Methoden werden im Original belassen, sofern keine Überschneidungen bei den Bezeichnern vorhanden sind. -*/ - import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import greenfoot.MouseInfo.*; import javax.swing.JOptionPane; @@ -13,56 +6,90 @@ import javax.swing.JOptionPane; * Schubst Einheiten umher. * * @author MaxiJohl, GruenerWal - * @version 0.1.1 + * @version 0.3.0 */ + public class ArmySchubser extends Map_World -{ +{ + static Province savedProvince = null; /** - * Constructor for objects of class ArmySchubser. + * Konstruktor für ArmySchubser. * + * NICHT BENUTZEN! + * Sämtliche benötigten Methoden sind static! */ public ArmySchubser(String[] playerList, int[] colorList) { super(playerList,colorList); - // Hi. } - public void act() + /** + * 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. + */ + public static void moveEntities(Province sourceProvince, Province destinationProvince) { - Province firstProvince = null; - Province secondProvince = null; + String toMoveString = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du verschieben?"); + Integer entitiesToMove = Integer.valueOf(toMoveString); - for ( int i = 1; i <= provinceCount; i++) + if ( (sourceProvince.getEntityCount() - entitiesToMove) > 0) { - if (provinces[i].hasClicked() == true) - { - provinces[i] = firstProvince; - break; - } + sourceProvince.removeFromEntities(entitiesToMove); + destinationProvince.addToEntities(entitiesToMove); } - for ( int i = 1; i <= provinceCount; i++) + if ( (sourceProvince.getEntityCount() - entitiesToMove) <= 0 ) { - if (provinces[i].hasClicked() == true && provinces[i] != firstProvince) - { - provinces[i] = secondProvince; - break; - } + JOptionPane.showMessageDialog(null,"Du hast nicht genügend Einheiten, um die gewünschte Anzahl von " + sourceProvince.getDisplayName() + " nach " + destinationProvince.getDisplayName() + " zu verschieben, Köhler."); } + } - String toMove = JOptionPane.showInputDialog(null, "Wieviele Einheiten willst du verschieben?"); - Integer entitiesToMove = Integer.valueOf(toMove); - - if ( (firstProvince.getEntityCount() - entitiesToMove) > 0 && firstProvince.isProvinceNear(secondProvince.getID()) == true ) + /** + * 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. + */ + public static void useProvincesToMove(Province givenProvince) + { + if (savedProvince == null) { - firstProvince.removeFromEntities(entitiesToMove); - secondProvince.addToEntities(entitiesToMove); + savedProvince = givenProvince; } - else + if (savedProvince != null && givenProvince != savedProvince) { - System.out.println("Du hast nicht genügend Einheiten, um die gewünschte Anzahl von " + firstProvince.getDisplayName() + " nach " + secondProvince.getDisplayName() + " zu verschieben, Köhler."); + if (givenProvince.isProvinceNear(savedProvince.getID()) == true) + { + moveEntities(savedProvince,givenProvince); + } + + else + { + savedProvince = null; + } + } + } + + /** + * Überprüft, ob eine Provinz angeklickt wurde. + * Wenn ja, wird diese als clickedProvince eingespeichert und useProvincesToMove aufgerufen. + * + * Kommt nachher in die GeneralMap! + */ + public void act() + { + Province clickedProvince = null; + + for ( int i = 1; i <= provinceCount; i++) + { + if (provinces[i].hasClicked() == true) + { + clickedProvince = provinces[i]; + useProvincesToMove(clickedProvince); + break; + } } } } + diff --git a/DefenderDices.java b/DefenderDices.java index a13634f..b3a5c4a 100644 --- a/DefenderDices.java +++ b/DefenderDices.java @@ -1,5 +1,6 @@ import greenfoot.*; import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; /** Erstellt eine gegebene Anzahl an DefenderDice's, welche dann nebeneinander eingereiht werden. @@ -10,7 +11,7 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse public class DefenderDices extends DicesList { public DefenderDices(int count) { - super(count, 2, new Color(0,0,0), (new Color(255,255,255)); + super(count, 2, new Color(0,0,0), (new Color(255,255,255))); } } diff --git a/OffenderDices.java b/OffenderDices.java index bcc7542..a7ac781 100644 --- a/OffenderDices.java +++ b/OffenderDices.java @@ -1,5 +1,6 @@ import greenfoot.*; import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; /** Erstellt eine gegebene Anzahl an OffenderDice's, welche dann nebeneinander eingereiht werden. @@ -10,7 +11,7 @@ import java.util.Arrays; // (World, Actor, GreenfootImage, Greenfoot and Mouse public class OffenderDices extends DicesList { public OffenderDices(int count) { - super(count, 3, new Color(255,0,0), (new Color(255,255,255)); + super(count, 3, new Color(255,0,0), (new Color(255,255,255))); } } diff --git a/Province.java b/Province.java index dc6f639..4814fe3 100644 --- a/Province.java +++ b/Province.java @@ -48,13 +48,13 @@ public class Province extends Actor 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++) { + for(int i = 0; i < ia1.length; i++) { if(maxNum < ia1[i]) { maxNum = ia1[i]; } } - nextProvinces = new boolean[ia1.length]; - for(int i = 0; i >= ia1.length; i++) { + nextProvinces = new boolean[maxNum+1]; + for(int i = 0; i < ia1.length; i++) { if(ia1[i] >= 0) { nextProvinces[ia1[i]] = true; } diff --git a/Utils.java b/Utils.java index 87a34cd..cb9680a 100644 --- a/Utils.java +++ b/Utils.java @@ -17,7 +17,7 @@ public final class Utils { */ public static boolean[] copyArray(boolean[] a) { boolean[] b = new boolean[a.length]; - for(int i = 0; i >= a.length; i++) { + for(int i = 0; i < a.length; i++) { b[i] = a[i]; } return b; @@ -29,7 +29,7 @@ public final class Utils { */ public static int[] copyArray(int[] a) { int[] b = new int[a.length]; - for(int i = 0; i >= a.length; i++) { + for(int i = 0; i < a.length; i++) { b[i] = a[i]; } return b; @@ -41,7 +41,7 @@ public final class Utils { */ public static String[] copyArray(String[] a) { String[] b = new String[a.length]; - for(int i = 0; i >= a.length; i++) { + for(int i = 0; i < a.length; i++) { b[i] = a[i]; } return b; @@ -66,7 +66,10 @@ public final class Utils { */ public static void sortDesc(int[] a) { Arrays.sort(a); - Collection.sort(a,Collections.reverseOrder()); + int[] b = copyArray(a); + for(int i = (a.length - 1); i >= 0; i--) { + a[i] = b[i]; + } } }