diff --git a/core/app/Controller.java b/core/app/Controller.java index 65bbe6f32594f1b4ba642a7b47addfd8bb34a2b2..395e383c157b14544668865060e0ad4d13b75be7 100644 --- a/core/app/Controller.java +++ b/core/app/Controller.java @@ -6,6 +6,8 @@ import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import javax.swing.JOptionPane; + import exceptions.GameRunningException; import exceptions.UserInputException; import game.Direction; @@ -96,7 +98,9 @@ public class Controller { int failure = 0; InitController.generateValidPairs(); - + InitController.startColonelZPMs = 0; + InitController.startJaffaZPMs = 0; + for(; actualLvl <= maxLvl; actualLvl++) { String mapPath = InitController.nextMapName(actualLvl); @@ -135,6 +139,10 @@ public class Controller { } // TODO: Game totally finished + JOptionPane.showMessageDialog(null, "Game Finished!\nColonel: " + InitController.startColonelZPMs + + "\nJaffa: " + InitController.startJaffaZPMs + + "\n\nCongratulation to both of you!"); + System.exit(0); } /** @@ -189,16 +197,17 @@ public class Controller { private void uploadMapDatas() { uploadToModel(); - ArrayList<ViewElement>[][] mapView = uploadToView(); + ArrayList<ViewElement>[][] mapView = firstUploadToView(); if(InitController.colonel != null && InitController.jaffa != null) { - view.showGame(InitController.map.length, InitController.map[0].length, colonelLife, jaffaLife, - Model.getInstance().getColonel().getZpmCount(), Model.getInstance().getJaffa().getZpmCount()); + view.showGame(InitController.map[0].length, InitController.map.length, colonelLife, jaffaLife, + InitController.startColonelZPMs + Model.getInstance().getColonel().getZpmCount(), + InitController.startJaffaZPMs + Model.getInstance().getJaffa().getZpmCount()); } else { - view.showGame(InitController.map.length, InitController.map[0].length, colonelLife, jaffaLife, 0, 0); + view.showGame(InitController.map[0].length, InitController.map.length, colonelLife, jaffaLife, 0, 0); if(InitController.colonel == null) System.err.println("No colonel found when game starts"); if(InitController.jaffa == null) @@ -239,9 +248,9 @@ public class Controller { * @return new map with <b>ViewElement</b>s */ @SuppressWarnings("unchecked") - public static ArrayList<ViewElement>[][] uploadToView() + private ArrayList<ViewElement>[][] firstUploadToView() { - ArrayList<ViewElement>[][] mapView = new ArrayList[InitController.map.length][InitController.map[0].length]; + ArrayList<ViewElement>[][] mapView = new ArrayList[InitController.map[0].length][InitController.map.length]; for( int i= 0; i< mapView.length; i++) { for (int j = 0; j < mapView[i].length; j++) { @@ -255,7 +264,7 @@ public class Controller { { for(int k = 1; k < InitController.map[i][j].size(); k++) { - mapView[i][j].add(getViewOf(InitController.map[i][j].get(k))); + mapView[j][i].add(getViewOf(InitController.map[i][j].get(k))); } } } @@ -269,7 +278,7 @@ public class Controller { * @param element which out-looking is looked for * @return graphical version of the given element */ - private static ViewElement getViewOf(IElement element) + public static ViewElement getViewOf(IElement element) { try { diff --git a/core/app/GameController.java b/core/app/GameController.java index d2d7013c22d132430cf0f42b2967ebe09e31dbba..e4f22ec33fa450540bd805d719a36533f1f6c6aa 100644 --- a/core/app/GameController.java +++ b/core/app/GameController.java @@ -29,6 +29,9 @@ public class GameController { Model.getInstance().restartMap(); int failure = 0; + int counter = 0; + Integer tmpColonelLives = Model.getInstance().getColonel().getPlayerLives(); + Integer tmpJaffaLives = Model.getInstance().getJaffa().getPlayerLives(); while(true) { @@ -46,6 +49,19 @@ public class GameController { } } + if(counter < 4) + { + counter++; + } + else + { + if(Model.getInstance().getReplicator() != null) + { + moveReplicator(); + } + counter = 0; + } + Integer lastKey = view.getLastKey(); if(lastKey != null) { @@ -56,6 +72,7 @@ public class GameController { if(Model.getInstance().getColonel().getDirection() == Direction.UP) { move(Model.getInstance().getColonel()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -66,6 +83,7 @@ public class GameController { if(Model.getInstance().getColonel().getDirection() == Direction.RIGHT) { move(Model.getInstance().getColonel()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -76,6 +94,7 @@ public class GameController { if(Model.getInstance().getColonel().getDirection() == Direction.DOWN) { move(Model.getInstance().getColonel()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -86,6 +105,7 @@ public class GameController { if(Model.getInstance().getColonel().getDirection() == Direction.LEFT) { move(Model.getInstance().getColonel()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -94,9 +114,11 @@ public class GameController { break; case KeyEvent.VK_8: // Shoot Blue shoot(Model.getInstance().getColonel(), PortalColor.BLUE); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); break; case KeyEvent.VK_9: // Shoot Yellow shoot(Model.getInstance().getColonel(), PortalColor.YELLOW); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); break; case KeyEvent.VK_U: // Box down boxDown(Model.getInstance().getColonel()); @@ -110,6 +132,7 @@ public class GameController { if(Model.getInstance().getJaffa().getDirection() == Direction.UP) { move(Model.getInstance().getJaffa()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -120,6 +143,7 @@ public class GameController { if(Model.getInstance().getJaffa().getDirection() == Direction.RIGHT) { move(Model.getInstance().getJaffa()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -130,6 +154,7 @@ public class GameController { if(Model.getInstance().getJaffa().getDirection() == Direction.DOWN) { move(Model.getInstance().getJaffa()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -140,6 +165,7 @@ public class GameController { if(Model.getInstance().getJaffa().getDirection() == Direction.LEFT) { move(Model.getInstance().getJaffa()); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); } else { @@ -148,14 +174,16 @@ public class GameController { break; case KeyEvent.VK_1: // Shoot Green shoot(Model.getInstance().getJaffa(), PortalColor.GREEN); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); break; case KeyEvent.VK_2: // Shoot RED shoot(Model.getInstance().getJaffa(), PortalColor.RED); + updateViewToolbar(tmpColonelLives, tmpJaffaLives); break; case KeyEvent.VK_Q: // Box down boxDown(Model.getInstance().getJaffa()); break; - case KeyEvent.VK_E: + case KeyEvent.VK_E: // Box up boxUp(Model.getInstance().getJaffa()); break; } @@ -167,14 +195,33 @@ public class GameController { } } + endProcess(); + return; // Map finished } + private void updateViewToolbar(Integer beforeColonelLives, Integer beforeJaffaLives) + { + int afterColonelLives = Model.getInstance().getColonel().getPlayerLives(); + int afterJaffaLives = Model.getInstance().getJaffa().getPlayerLives(); + + if(beforeColonelLives.intValue() != afterColonelLives) + { + view.setColonelLivesDisplayed(afterColonelLives); + beforeColonelLives = afterColonelLives; + } + if(beforeJaffaLives.intValue() != afterJaffaLives) + { + view.setJaffaLivesDisplayed(afterJaffaLives); + beforeJaffaLives = afterJaffaLives; + } + } + private void move(Player player) { player.step(); - updateMap(); - ArrayList<ViewElement>[][] viewMap = Controller.uploadToView(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); view.setMap(viewMap); } @@ -182,8 +229,8 @@ public class GameController { private void turn(Player player, Direction dir) { player.setDirection(dir); - updateMap(); - ArrayList<ViewElement>[][] viewMap = Controller.uploadToView(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); view.setMap(viewMap); } @@ -191,8 +238,8 @@ public class GameController { private void shoot(Player player, PortalColor color) { player.fire(color); - updateMap(); - ArrayList<ViewElement>[][] viewMap = Controller.uploadToView(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); view.setMap(viewMap); } @@ -200,8 +247,8 @@ public class GameController { private void boxDown(Player player) { player.putBoxDown(); - updateMap(); - ArrayList<ViewElement>[][] viewMap = Controller.uploadToView(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); view.setMap(viewMap); } @@ -209,14 +256,30 @@ public class GameController { private void boxUp(Player player) { player.getBoxUp(); - updateMap(); - ArrayList<ViewElement>[][] viewMap = Controller.uploadToView(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); + + view.setMap(viewMap); + } + + private void moveReplicator() + { + Model.getInstance().getReplicator().setDirection(Direction.getRandomDir()); + Model.getInstance().getReplicator().step(); + updateGameControllerMap(); + ArrayList<ViewElement>[][] viewMap = uploadToView(); view.setMap(viewMap); } + private void endProcess() + { + InitController.startColonelZPMs += Model.getInstance().getColonel().getZpmCount(); + InitController.startJaffaZPMs += Model.getInstance().getJaffa().getZpmCount(); + } + @SuppressWarnings("unchecked") - private void updateMap() + private void updateGameControllerMap() { java.lang.reflect.Field tmp; try @@ -241,4 +304,29 @@ public class GameController { // omg } } + + @SuppressWarnings("unchecked") + private ArrayList<ViewElement>[][] uploadToView() + { + ArrayList<ViewElement>[][] mapView = new ArrayList[map[0].length][map.length]; + + for( int i= 0; i< mapView.length; i++) { + for (int j = 0; j < mapView[i].length; j++) { + mapView[i][j] = new ArrayList<ViewElement>(); + } + } + + for(int i = 0; i < map.length; i++) + { + for(int j = 0; j < map[0].length; j++) + { + for(int k = 1; k < map[i][j].size(); k++) + { + mapView[j][i].add(Controller.getViewOf(map[i][j].get(k))); + } + } + } + + return mapView; + } } diff --git a/core/app/InitController.java b/core/app/InitController.java index a5a1eeb6c309957ed656a6ecbadf82e033366247..89c76de2f82d0b805d2d7103584b61ee6a414b90 100644 --- a/core/app/InitController.java +++ b/core/app/InitController.java @@ -28,10 +28,10 @@ public class InitController { private static String mapDir = "maps/"; private static final String[] mapNames = new String[] { "testmap.txt", // first map - "", // second map - "", // third map - "", // fourth map - "" // fifth map + "map01.txt", // second map + "map02.txt", // third map + "map03.txt", // fourth map + "map04.txt" // fifth map // possibly to add more map }; @@ -43,6 +43,8 @@ public class InitController { public static Gate mainGate; public static int ZPMs; public static int specOpen; + public static int startColonelZPMs = 0; + public static int startJaffaZPMs = 0; private InitController() {} diff --git a/core/game/Model.java b/core/game/Model.java index 496a1ba70e68e153c51bf5511c41ce9ef27ad0e0..6bc7b33ef445fcec858e5c3d29863d3e0ae57540 100644 --- a/core/game/Model.java +++ b/core/game/Model.java @@ -64,6 +64,20 @@ public class Model public void resetMapReq() { isMapFinished = true; + if(colonel.getPlayerLives() == 0) + { + for(int i = 0; i < colonel.getZpmCount(); i++) + { + jaffa.incZPMCount(); + } + } + else if(jaffa.getPlayerLives() == 0) + { + for(int i = 0; i < jaffa.getZpmCount(); i++) + { + colonel.incZPMCount(); + } + } } public void restartMap() diff --git a/core/mapobjs/movobjs/Player.java b/core/mapobjs/movobjs/Player.java index 0ef9c842d1ae57a774fa6cad4a3d645b8a73cb5c..ed2841b55a8abecaaa0b4afc41eb9d32389490c4 100644 --- a/core/mapobjs/movobjs/Player.java +++ b/core/mapobjs/movobjs/Player.java @@ -12,10 +12,6 @@ public class Player extends DefaultElement implements IMovable { private Field originField; private Box box = null; private int zpmCount = 0; - public int getZpmCount() { - return zpmCount; - } - private int playerLives = 3; private Direction dir; @@ -66,6 +62,7 @@ public class Player extends DefaultElement implements IMovable { if(this.box != null) box.damaged(); this.getField().addToRemove(this); + Model.getInstance().resetMapReq(); //this.getField().deleteElement(this); //this.setField(null); } @@ -154,4 +151,12 @@ public class Player extends DefaultElement implements IMovable { this.playerLives = playerLives; } + public int getPlayerLives() + { + return this.playerLives; + } + + public int getZpmCount() { + return zpmCount; + } } diff --git a/core/maps/testmap.txt b/core/maps/testmap.txt index a1bb97888f7341c08b553ef54aebe64d5e8777b8..149c4e94cd3714c614523c463e27ce5c827f3103 100644 --- a/core/maps/testmap.txt +++ b/core/maps/testmap.txt @@ -1,8 +1,8 @@ -create map 5 5 +create map 10 10 create colonel 1 1 create gate 2 3 create ra 0 0 -create re 0 1 +create re 5 5 create jaffa 1 0 create door 2 2 3 3 create box 3 2