/* * JavaXYQ Source Code * by kylixs * at 2009-11-11 * http://javaxyq.googlecode.com * kylixs@qq.com */ package com.javaxyq.battle; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import com.javaxyq.widget.Player; /** * @author dewitt * @date 2009-11-11 create */ public class CommandManager { private BattleCanvas canvas; private List cmdlist; private List playerlist; private CommandInterpreter interpretor; private BattleCalculator battleCalculator; public CommandManager(BattleCanvas canvas) { this.canvas = canvas; this.interpretor = new CommandInterpreter(canvas); this.cmdlist = new ArrayList(); this.battleCalculator = new BattleCalculator(); } /** * �غ�ս�� */ synchronized public void turnBattle() { turnBegin(); //TODO ����ս����� Map params = new HashMap();//Ӱ������ List<Player> t1 = canvas.getAdversaryTeam(); List<Player> t2 = canvas.getOwnsideTeam(); List<Command> results = battleCalculator.calc(cmdlist,t2,t1,params); //����ִ��ָ�� for (int i = 0; i < results.size(); i++) { Command cmd = results.get(i); try { System.out.println("ִ�У�"+cmd); this.interpretor.exec(cmd); }catch(Exception e) { System.out.println("ս��ָ��ִ��ʧ�ܣ�"+cmd); e.printStackTrace(); } } turnEnd(); } private Random random = new Random(); /** * �غϿ�ʼ */ protected void turnBegin() { //����npc��ָ�� List<Player> t1 = canvas.getAdversaryTeam(); List<Player> t2 = canvas.getOwnsideTeam(); for (int i = 0; i < t1.size(); i++) { Player elf = t1.get(i); Player target = t2.get(random.nextInt(t2.size())); cmdlist.add( new Command("attack",elf,target)); } } /** * �غϽ��� */ protected void turnEnd() { cmdlist.clear(); // TODO fireEvent List<Player> t1 = canvas.getAdversaryTeam(); List<Player> t2 = canvas.getOwnsideTeam(); //����з���λ�������������ҷ�ʤ�� boolean win = true; for(int i=0;i<t1.size();i++) { Player elf = t1.get(i); if(elf.getData().hp > 0) { win = false; break; } } if(win) { canvas.fireBattleEvent(new BattleEvent(canvas,BattleEvent.BATTLE_WIN)); return; } //����ҷ���λȫ����������ս��ʧ�� boolean failure = true; for(int i=0;i<t2.size();i++) { Player player = t2.get(i); if(player.getData().hp>0) { failure = false; break; } } if(failure) { //ս��ʧ�� canvas.fireBattleEvent(new BattleEvent(canvas,BattleEvent.BATTLE_DEFEATED)); return; } canvas.turnBegin(); } synchronized public void addCmd(Command cmd) { cmdlist.add(cmd); } }