From 9990a184f296dc61643da9b3fad9fd6e55699d5f Mon Sep 17 00:00:00 2001 From: Tamas Bunth <btomi96@gmail.com> Date: Sun, 15 May 2016 14:14:32 +0200 Subject: [PATCH] implement zpm spawn --- core/app/Controller.java | 1 - core/app/GameController.java | 63 ++++++++++++++++++++++++++++---- core/game/Model.java | 6 ++- core/mapobjs/defobjs/Portal.java | 1 - 4 files changed, 61 insertions(+), 10 deletions(-) diff --git a/core/app/Controller.java b/core/app/Controller.java index 53d94fa..5997a9f 100644 --- a/core/app/Controller.java +++ b/core/app/Controller.java @@ -72,7 +72,6 @@ public class Controller { } } - // TODO: Nincs játék vége lekezelve /** * Start the game with the given beginning parameters * diff --git a/core/app/GameController.java b/core/app/GameController.java index ef18b70..07334ff 100644 --- a/core/app/GameController.java +++ b/core/app/GameController.java @@ -4,6 +4,7 @@ import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.Random; import exceptions.GameRunningException; import game.Direction; @@ -12,6 +13,7 @@ import game.PortalColor; import mapobjs.defobjs.DefaultElement; import mapobjs.defobjs.Field; import mapobjs.defobjs.IElement; +import mapobjs.defobjs.ZPM; import mapobjs.movobjs.Player; import view.View; import view.ViewElement; @@ -46,6 +48,8 @@ public class GameController implements PropertyChangeListener{ Integer tmpColonelLives = Model.getInstance().getColonel().getPlayerLives(); Integer tmpJaffaLives = Model.getInstance().getJaffa().getPlayerLives(); + int takenUpZPMCountInOneTurn = 0; + while(true) { try { @@ -210,7 +214,8 @@ public class GameController implements PropertyChangeListener{ break; } - updateZPMCount( rZPMCount, prevColonelZpm, prevJaffaZpm ); + takenUpZPMCountInOneTurn += updateZPMCount( rZPMCount, prevColonelZpm, prevJaffaZpm ); + takenUpZPMCountInOneTurn = invokeZPMSpawn(takenUpZPMCountInOneTurn); } // end of if key pressed } // end of while @@ -220,6 +225,45 @@ public class GameController implements PropertyChangeListener{ return; // Map finished } + /** + * Checks if a new ZPM should be spawned. + * If so, than it creates a zpm in a random empty Field + * @param zpms zpm's taken up since the last spawn + * @return zpm's tanken up since the last spawn + */ + private int invokeZPMSpawn(int zpms) { + if(zpms > 1) { + randomZPMSpawn(); + return 0; + } + return zpms; + } + + /** + * Searches for an empty field and inserts a zpm + */ + private void randomZPMSpawn() { + boolean ready = false; + ArrayList<Field> map = Model.getInstance().getMap(); + + + Random rand = new Random(); + while( !ready ) { + // TODO not works + int randNum = rand.nextInt(map.size()); + if(map.get(randNum).getElementNum() == 0) { + + System.out.println("new zpm at: " + randNum); + Field chosedField = map.get(randNum); + ZPM zpm = new ZPM(chosedField); + chosedField.addElement(zpm); + chosedField.addToInsert(zpm); + ready = true; + } + } + + } + private void updateViewToolbar(Integer beforeColonelLives, Integer beforeJaffaLives) { int afterColonelLives = Model.getInstance().getColonel().getPlayerLives(); @@ -280,14 +324,20 @@ public class GameController implements PropertyChangeListener{ * @param prevColonelZpm the previous ZPM count of * the colonel on the current map */ - private void updateZPMCount( int[] rZPMCount, int prevColonelZpm, int prevJaffaZpm) + private int updateZPMCount( int[] rZPMCount, int prevColonelZpm, int prevJaffaZpm) { if( rZPMCount == null) rZPMCount = new int[] {0, 0}; + int colonelZPMChange = Model.getInstance().getColonel().getZpmCount() - prevColonelZpm; + int jaffaZPMChange = Model.getInstance().getJaffa().getZpmCount() - prevJaffaZpm; + // update global ZPM counts - rZPMCount[0] += Model.getInstance().getColonel().getZpmCount() - prevColonelZpm; - rZPMCount[1] += Model.getInstance().getJaffa().getZpmCount() - prevJaffaZpm; + rZPMCount[0] += colonelZPMChange; + rZPMCount[1] += jaffaZPMChange; + + int returnValue = colonelZPMChange + jaffaZPMChange; + // update previous values of ZPM's on the current map prevColonelZpm = Model.getInstance().getColonel().getZpmCount(); @@ -295,6 +345,8 @@ public class GameController implements PropertyChangeListener{ this.view.setColonelZPMDisplayed(rZPMCount[0]); this.view.setJaffaZPMDisplayed(rZPMCount[1]); + + return returnValue; } @Override @@ -309,9 +361,6 @@ public class GameController implements PropertyChangeListener{ return; } - // TODO coord is wrong (122 for me) for the second map - // indexOutOfBoundsException - // update only the changed fields int coord = (int)evt.getNewValue(); int xCoord = coord / map[0].length; diff --git a/core/game/Model.java b/core/game/Model.java index 21f622f..b8c276e 100644 --- a/core/game/Model.java +++ b/core/game/Model.java @@ -50,7 +50,7 @@ public class Model implements PropertyChangeListener propSupp.addPropertyChangeListener(listener); } } - + public void removePropertyChangeListener(PropertyChangeListener listener) { if(listener != null) @@ -81,6 +81,10 @@ public class Model implements PropertyChangeListener return map.get((num-1)); } + public ArrayList<Field> getMap() { + return map; + } + public void resetMapReq() { isMapFinished = true; diff --git a/core/mapobjs/defobjs/Portal.java b/core/mapobjs/defobjs/Portal.java index 80a7b93..f5867d5 100644 --- a/core/mapobjs/defobjs/Portal.java +++ b/core/mapobjs/defobjs/Portal.java @@ -24,7 +24,6 @@ public class Portal extends DefaultElement { public boolean setOtherSide(Portal otherSide) { if(PortalColor.convertToInverse(otherSide.getColor()).equals(this.color)) { - System.out.println("setOtherSide"); this.otherSide = otherSide; otherSide.bindFieldsAsOtherSide(this); -- GitLab