首页 新闻 赞助 找找看

关于mmorpg英雄,物品设计请教

0
悬赏园豆:40 [已解决问题] 解决于 2013-11-10 02:22

今天下午无聊在玩一款ipad游戏,大掌门。玩法是:你有5个格子,每个格子有一个英雄。组成英雄组和别人pk。其中英雄人物比较有意思,比如我有个英雄叫周芷若,比如他装备倚天剑的时候战斗力增加15%,和灭绝师太一起战斗时候,血量增加15%。这就相当于一个特定的buffer机制,这种业务如何设计比较好呢?已英雄作为一个被装饰者?拿武器,人物装饰?还是单独设计物品系统?倚天剑的话,里面判断如果使用者是XXX就do something?

superyuong的主页 superyuong | 初学一级 | 园豆:166
提问于:2013-11-07 15:44
< >
分享
最佳答案
0

以你举得例子定义一个简单结构给你看

 //人物属性枚举
        enum Attribute
        {
            ATK,
            HP,
            MP,
            DEF
        }
        //队伍
        class Team
        {
             List<Role> roles=new List<Role>(); 
        }
        //角色父类
        class Role
        {
            public int ID;//人物ID
            public int ATK { get; set; }//攻击力
            public int HP { get; set; }//血量
            public int MP { get; set; }//魔法值
            public int DEF { get; set; }//防御
            public List<EquipMent> EquipMents=new List<EquipMent>();//装备
        }
        //装备父类
        class EquipMent
        {
            public int ID { get; set; }//装备ID
            public string Name { get; set; }//装备名字
            public Effect Effect { get; set; }//装备效果
        }
        //效果父类
         class Effect
        {
            public Attribute Attribute { get; set; }//对应属性
            public int Percent{ get; set; }//提升百分比
            public int Num{ get; set; }//提升数值
        }

首先是有一个队伍对象,里面存放了最多5个的Role,即5个角色。每个角色有4个属性,和枚举Attribute对应。然后有一个装备列表。每个装备有3个属性,ID、名字和效果。比方说倚天剑,它的ID是1(这个真做游戏的时候就有用了),名字倚天剑,效果是攻击力提高15%,那就是Attribute=Attribute.ATK,Percent=15,Num=0。给角色周芷若装备之后,当你要读取周芷若的属性时,你得先遍历她的装备列表,把每样属性加上去。

至于组队的加成,那得在Team对象的方法里进行计算,由于每个角色都有一个ID,你可以先设置一个规则,当队伍里ID为1的对象和ID为2的对象同时存在时,ID为1的对象血量增加15%。

收获园豆:40
林J | 菜鸟二级 |园豆:202 | 2013-11-08 10:21
//角色父类
        class Role
        {
            public int ID;//人物ID
            
            public int HP { get; set; }//血量
            public int MP { get; set; }//魔法值
            public int DEF { get; set; }//防御
            
            public List<EquipMent> EquipMents=new List<EquipMent>();//装备
            private int atk;//攻击力
            public int ATK
            {
                get
                {
                    int atk2 = atk;
                    //遍历装备列表
                    foreach (EquipMent equipMent in EquipMents)
                    {
                        //属性为攻击
                        if (equipMent.Effect.Attribute == Attribute.ATK)
                        {
                            //获取加成后结果
                            atk2 = (int)(atk2 * equipMent.Effect.Percent * 0.01 + equipMent.Effect.Num);
                        }
                    }
                    return atk2;
                }
                set { atk = value; }
            }
        }

详细的获取攻击力方法

林J | 园豆:202 (菜鸟二级) | 2013-11-08 10:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册