魔鬼与牧师动作分离版2019

  与上次一的作业相比,动作分离版就是通过把原来由对象自己实现的动作交给一个专门的处理器来处理。

那么在角色和船的类中需要增加一个返回自身的函数,以及在移动的时候不直接移动,而是返回一个移动的向量,如下。

public GameObject getGameObject() { return boat; } 

public Vector3 BoatMoveToPosition()                   
    {
        boat_sign = -boat_sign;
        if (boat_sign == -1)
        {
            return new Vector3(-1.4F, -4, -3);  
        }
        else
        {
            return new Vector3(38, -4, -3);
        }          
    }

在动作管理中器中,首先定义动作的完成返回函数,用于告知动作完成。

接着就是一个动作管理类,在该类中,建立一个函数用来接受游戏对象和所要执行的动作,然后将该动作加入动作类表中,而当一个动作完成后就执行下一个动作。

同时由于动作是连贯的,就需要一个动作组合器来将小的动作组合起来,完成后返回,处理下一个动作组。

在魔鬼与牧师中,动作由角色移动到船上,船移动,角色从船移动到岸上这三个动作。

主要的代码框架就是参考老师所给的优秀博客。

最后的裁判类则是将原来在控制端的check()函数独立出来,改为一个可以接受开始和结束陆地以及船的类,通过和check()函数一样的逻辑,返回游戏结果。

public class judge
{
    public int result;
    public judge()
    {
        result = 0;
    }
    public void game_result(LandModel start_land, LandModel end_land, BoatModel boat)
    {
        int start_priest = (start_land.GetRoleNum())[0];
        int start_devil = (start_land.GetRoleNum())[1];
        int end_priest = (end_land.GetRoleNum())[0];
        int end_devil = (end_land.GetRoleNum())[1];

        if (end_priest + end_devil == 6)//获胜
        {
            result = 2;
        }
        else
        {
            int[] boat_role_num = boat.GetRoleNumber();
            if (boat.GetBoatSign() == 1)         
            {
                start_priest += boat_role_num[0];
                start_devil += boat_role_num[1];
            }
            else                                 
            {
                end_priest += boat_role_num[0];
                end_devil += boat_role_num[1];
            }
            if (start_priest > 0 && start_priest < start_devil) 
            {
                result = 1;
            }
            else if (end_priest > 0 && end_priest < end_devil)       
            {
                result = 1;
            }
            else
                result = 0;
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值