这一次,我们接着来谈AI策略和网络连接的架构。
在上一篇中我们设计了几个回合,我们简单来回忆一下这个流程:
game_begin() -> turn_begin() -> 回合中 -> turn_end() -> next_turn();
其中,我们把收信发信和AI策略都放在turn_begin()和turn_end()中。再看一眼我们是怎么设计的turn_begin():
private void turn_begin(){
//回合开始
resetRoll();//重置骰子
System.out.println("玩家:["+Value.PlayerName[whosTurn]+"]的回合!Type:"+chdm.getPlayerType(whosTurn)+",请投掷骰子!");
//判断当前玩家是人还是AI
if(chdm.getGameType()==Value.Local){
//如果不是网络对战
if(chdm.getPlayerType(whosTurn)==Value.AI){
//当前玩家是AI
//AIMethod(Value.AIType[0]);//为什么不这么写
myHandler.postDelayed(AIDelay,2000);//执行AI策略
}
return ;//本地游戏的话,不执行下面的语句
}
//如果是网络对战
else if(chdm.isHost()){
//如果当前玩家是服务器,需要进行转发、AI()策略
if(chdm.getPlayerType(whosTurn)==Value.Online){
//服务器收信
myHandler.post(HostrecMsg);
}
else if(chdm.getPlayerType(whosTurn)==Value.AI){
myHandler.postDelayed(AIDelay,2000);
}
else return;//服务主自己的回合,可以开始正常游玩
}
else {
//是客户端
if(chdm.getPlayerType(whosTurn)!=Value.LocalHuman){
//网络用户或AI时,收取服务器信息并更新UI
myHandler.post(ClientrecMsg);
}
else return;//客户端自己的回合,可以开始游玩
}
}