android游戏开发实例-可局域网对战的飞行棋(三)

本文介绍了在Android游戏开发中,如何实现一个可局域网对战的飞行棋游戏,重点讲解了AI策略的设计以及网络连接的架构。AI策略模拟人类操作,包括roll、select_a_chessman和go步骤。同时,网络连接部分强调服务器运行AI逻辑,确保序列化的Chessman在客户端和服务器间正确传递。通过这样的设计,实现了局域网对战并支持玩家选择“托管”功能的飞行棋游戏。
摘要由CSDN通过智能技术生成

这一次,我们接着来谈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;//客户端自己的回合,可以开始游玩
        }
    }
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值