Unity3D自学笔记——角色属性设计分析

角色属性设计分析

目前数据库有两张表与角色属性有关heroinfo 和 userinfo
这里写图片描述
heroinfo
存放英雄的初始属性,和growth(升级后增加值),如英雄2级了总血量就是
hp + 2 * hp_growth
这里写图片描述
userinfo
存放英雄的当前属性,即所有属性影响的最终结果
这里写图片描述

影响角色属性的外因
这里写图片描述
可以看出主脚的属性其实就是各种状态的计算结果,从图可以看出其实就是一个树状结构,主角就是树的根,于是我用组合模式简单实验了一下。

类图
这里写图片描述
Attribute 为虚类,主要方法就是Caculate,通过递归计算总属性(这里是hpTotal和mpTotal)

public abstract class Attribute
        {
            public int Hp { get; set; }
            public int Mp { get; set; }
            public int HpTotal { get; set; }
            public int MpTotal { get; set; }

            private Attribute m_Parent;
            private string m_Name;
            public Attribute(int hp, int mp)
            {
                this.Hp = hp;
                this.Mp = mp;

            }

            public Attribute(int hp, int mp, string name) : this(hp, mp)
            {
                this.m_Name = name;
            }

            public abstract void Calc();
            public abstract int ChildCount();
            protected void SetParent(Attribute child)
            {
                child.m_Parent = this;
            }

            public Attribute GetParent()
            {
                return this.m_Parent;
            }

            public void Show()
            {
                Calc();
                Console.WriteLine(string.Format("{0} 属性为: HP {1} MP {2}",this.m_Name, this.HpTotal, this.MpTotal));
            }
        }

AttributeComponet为节点,实现了Attribute的方法,并且可以添加节点和删除节点

public class AttributeComponent:Attribute
        {
            private List<Attribute> m_AttributeList = new List<Attribute>();

            public AttributeComponent(int hp, int mp) : base(hp, mp)
            {
            }

            public AttributeComponent(int hp, int mp, string name) : base(hp, mp, name) { }

            public override void Calc()
            {
                this.HpTotal = this.Hp;
                this.MpTotal = this.Mp;

                foreach (Attribute item in m_AttributeList)
                {
                    //递归计算属性和
                    if (item.ChildCount() > 0)
                        item.Calc();

                    this.HpTotal += item.HpTotal;
                    this.MpTotal += item.MpTotal;
                }
            }

            public override int ChildCount()
            {
                return m_AttributeList.Count;
            }

            public void AddAttribute(Attribute attribute)
            {
                SetParent(attribute);
                this.m_AttributeList.Add(attribute);
            }

            public void RemoveAttribute(Attribute attribute)
            {
                m_AttributeList.Remove(attribute);
            }
        }

测试代码

[TestMethod]
        public void TestMethod1()
        {
            AttributeComponent basic = new AttributeComponent(50, 100, "Ali");
            AttributeComponent lvUp = new AttributeComponent(50, 100, "升级增加");
            AttributeComponent weapon = new AttributeComponent(10, 20, "无级弓");
            AttributeComponent weaponEnchanting = new AttributeComponent(5, 5, "附魔增加");

            basic.Show();
            Console.WriteLine("升级啦");
            Console.WriteLine("---------------------------------------------------");
            lvUp.Show();
            basic.AddAttribute(lvUp);
            basic.Show();
            Console.WriteLine();
            Console.WriteLine("装备了武器");
            Console.WriteLine("---------------------------------------------------");
            weapon.Show();
            basic.AddAttribute(weapon);
            basic.Show();
            Console.WriteLine();
            Console.WriteLine("武器附魔");
            Console.WriteLine("---------------------------------------------------");
            weaponEnchanting.Show();
            weapon.AddAttribute(weaponEnchanting);
            weapon.Show();
            basic.Show();
            Console.WriteLine();
            Console.WriteLine("卸载装备");
            Console.WriteLine("---------------------------------------------------");
            basic.RemoveAttribute(weapon);
            basic.Show();
        }

测试结果
这里写图片描述

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FPGA自学笔记——设计与验证JMB FPGA(可编程逻辑门阵列)是一种可编程的硬件平台,可以实现各种数字电路的设计与验证。本文将简要介绍使用FPGA自学设计与验证JMB(低功耗、高效能、集成度高的多媒体芯片)的过程。 首先,我们需要了解JMB的功能和特性。JMB是一种面向多媒体应用的芯片,具备低功耗、高效能和高集成度的优势。我们需要详细研究JMB的硬件架构和内部模块,包括处理器核、存储器模块、图像和音频处理模块等。 接下来,我们可以使用FPGA开发板来设计和验证JMB。首先,我们需要熟悉FPGA设计工具,例如Vivado或Quartus等。这些工具提供了图形化界面和硬件描述语言(HDL)等设计方法。我们可以使用HDL编写JMB的功能模块,并将其综合为FPGA可执行的位流文件。 在设计完成后,我们需要验证JMB的功能和性能。我们可以使用仿真工具(例如ModelSim或ISE Simulator)来模拟JMB在不同情况下的行为。通过设计测试程序并运行仿真,我们可以验证JMB的各个模块是否正确地工作,是否满足设计要求。 在验证完成后,我们可以将位流文件下载到FPGA开发板中进行智能芯片的物理实现和测试。通过与外部设备的连接以及相关测试程序的运行,我们可以验证JMB在实际硬件中的功能和性能。 总结起来,学习FPGA设计与验证JMB,我们需要熟悉JMB的硬件架构和内部模块,并使用FPGA开发工具进行设计与验证。通过仿真和物理实现测试,我们可以验证JMB的功能和性能。这些过程需要理论知识和实践经验的结合,希望这些笔记能够给你提供一些参考和指导。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值