package sample.game.manager; import java.util.ArrayList; import library.core.debug.CoreLog; import sample.game.model.CharaModel; import sample.game.model.CharaModel.TARGET_TYPE; public class Island implements Cloneable{ protected ArrayList<CharaModel> ministers; protected ArrayList<CharaModel> wolfs; protected ArrayList<CharaModel> cattles; protected ArrayList<CharaModel> cabbages; protected boolean nowTurn; private int gameOverTypeId=0; //ゲームオーバータイプ public Island(){ this.ministers=new ArrayList<CharaModel>(); this.wolfs=new ArrayList<CharaModel>(); this.cattles=new ArrayList<CharaModel>(); this.cabbages=new ArrayList<CharaModel>(); } @Override public Island clone(){ Island is=null; try { is=(Island)super.clone(); is.ministers=new ArrayList<CharaModel>(); for(int i=0;i<this.ministers.size();i++){ is.ministers.add(this.ministers.get(i).clone()); } is.wolfs=new ArrayList<CharaModel>(); for(int i=0;i<this.wolfs.size();i++){ is.wolfs.add(this.wolfs.get(i).clone()); } is.cabbages=new ArrayList<CharaModel>(); for(int i=0;i<this.cabbages.size();i++){ is.cabbages.add(this.cabbages.get(i).clone()); } is.cattles=new ArrayList<CharaModel>(); for(int i=0;i<this.cattles.size();i++){ is.cattles.add(this.cattles.get(i).clone()); } } catch (CloneNotSupportedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return is; } public boolean getNowTurn() { return nowTurn; } public void setNowTurn(boolean nowTurn) { this.nowTurn = nowTurn; } /** * 行動制限ルール 指定したタイプの属するすべてに行動制限をかける * @param character */ public void setMoveLimitType(CharaModel character){ switch (character.getType()) { case MINISTART: setMoveType1(false); break; case WOLF: case CATTLE: case CABBAGE: setMoveType2(false); break; } } public void addCharacter(CharaModel character){ switch (character.getType()) { case MINISTART: addMinister(character); break; case WOLF: addWolf(character); break; case CATTLE: addCattle(character); break; case CABBAGE: addCabbage(character); break; } } public void removeCharacter(CharaModel character){ switch (character.getType()) { case MINISTART: removeMinister(character); break; case WOLF: removeWolf(character); break; case CATTLE: removeCattle(character); break; case CABBAGE: removeCabbage(character); break; } } private void addMinister(CharaModel m){ this.ministers.add(m); } private void removeMinister(CharaModel m){ this.ministers.remove(m); } private void addWolf(CharaModel w){ this.wolfs.add(w); } private void removeWolf(CharaModel w){ this.wolfs.remove(w); } private void addCattle(CharaModel c){ this.cattles.add(c); } private void removeCattle(CharaModel c){ this.cattles.remove(c); } private void addCabbage(CharaModel c){ this.cabbages.add(c); } private void removeCabbage(CharaModel c){ this.cabbages.remove(c); } /** * 行動制御 * @param canMove */ public void setMove(boolean canMove){ if(ministers.size()>0){ for (CharaModel b : ministers) { b.setCanMove(canMove); } } if(wolfs.size()>0){ for (CharaModel b : wolfs) { b.setCanMove(canMove); } } if(cattles.size()>0){ for (CharaModel b : cattles) { b.setCanMove(canMove); } } if(cabbages.size()>0){ for (CharaModel b : cabbages) { b.setCanMove(canMove); } } } /** * 人ジャンルの行動制御 * @param canMove */ public void setMoveType1(boolean canMove){ if(ministers.size()>0){ for (CharaModel b : ministers) { b.setCanMove(canMove); } } } /** * 動物・野菜ジャンルの行動制御 * @param canMove */ public void setMoveType2(boolean canMove){ if(wolfs.size()>0){ for (CharaModel b : wolfs) { b.setCanMove(canMove); } } if(cattles.size()>0){ for (CharaModel b : cattles) { b.setCanMove(canMove); } } if(cabbages.size()>0){ for (CharaModel b : cabbages) { b.setCanMove(canMove); } } } public void checkMyData(){ if(ministers.size()>0){ for (CharaModel b : ministers) { CoreLog.debug("minister :"+b.isCanMove()); } } if(wolfs.size()>0){ for (CharaModel b : wolfs) { CoreLog.debug("wolf :"+b.isCanMove()); } } if(cattles.size()>0){ for (CharaModel b : cattles) { CoreLog.debug("cattle :"+b.isCanMove()); } } if(cabbages.size()>0){ for (CharaModel b : cabbages) { CoreLog.debug("cabbage :"+b.isCanMove()); } } } /** * ゲームオーバー判定 * @return */ public boolean cheakGameOver(){ if(ministers.size()==0){ if(wolfs.size()>0 && cattles.size()>0){ this.gameOverTypeId=1; return true; }else if(cattles.size()>0 && cabbages.size()>0){ this.gameOverTypeId=2; return true; } } return false; } /** * 各キャラの所持数を確認 * @param type * @return */ public int getCharaNum(TARGET_TYPE type){ switch (type) { case MINISTART: return this.ministers.size(); case WOLF: return this.wolfs.size(); case CABBAGE: return this.cabbages.size(); case CATTLE: return this.cattles.size(); } return 0; } public ArrayList<CharaModel> getMinisters() { return ministers; } public ArrayList<CharaModel> getWolfs() { return wolfs; } public ArrayList<CharaModel> getCattles() { return cattles; } public ArrayList<CharaModel> getCabbages() { return cabbages; } //移動可能な牧師の数1 public int canMoveMinisterNum(){ int size=0; if(ministers.size()>0){ for(int i=0;i<ministers.size();i++){ if(ministers.get(i).isCanMove()){ size++; } } } return size; } //移動可能な牧師の数1 public int canMoveWolfNum(){ int size=0; if(wolfs.size()>0){ for(int i=0;i<wolfs.size();i++){ if(wolfs.get(i).isCanMove()){ size++; } } } return size; } //移動可能なキャベツの数1 public int canMoveCabbageNum(){ int size=0; if(cabbages.size()>0){ for(int i=0;i<cabbages.size();i++){ if(cabbages.get(i).isCanMove()){ size++; } } } return size; } //移動可能な牛の数1 public int canMoveCattleNum(){ int size=0; if(cattles.size()>0){ for(int i=0;i<cattles.size();i++){ if(cattles.get(i).isCanMove()){ size++; } } } return size; } public int getGameOverTypeId() { return gameOverTypeId; } }