首先,我们需要定义一个接口,用于规范公用属性加成的方法:

public interface IAttributeModifier
{
    Dictionary<string, float> GetAttributeModifiers();
}

接下来,我们需要定义一个公用玩家属性类,用于存储玩家的所有属性,并提供属性加成的接口:

public class PlayerAttributes
{
    private Dictionary<string, float> _attributes = new Dictionary<string, float>();

    public void SetAttribute(string name, float value)
    {
        if (_attributes.ContainsKey(name))
        {
            _attributes[name] = value;
        }
        else
        {
            _attributes.Add(name, value);
        }
    }

    public float GetAttribute(string name)
    {
        if (_attributes.ContainsKey(name))
        {
            return _attributes[name];
        }
        else
        {
            return 0;
        }
    }

    public void ApplyAttributeModifiers(List<IAttributeModifier> modifiers)
    {
        foreach (IAttributeModifier modifier in modifiers)
        {
            Dictionary<string, float> modifierAttributes = modifier.GetAttributeModifiers();

            foreach (KeyValuePair<string, float> attribute in modifierAttributes)
            {
                if (_attributes.ContainsKey(attribute.Key))
                {
                    _attributes[attribute.Key] += attribute.Value;
                }
                else
                {
                    _attributes.Add(attribute.Key, attribute.Value);
                }
            }
        }
    }
}

最后,我们需要定义一个接口集合,用于获取所有实现了属性加成接口的类,并计算总属性加成:

public class AttributeModifierSystem
{
    private List<IAttributeModifier> _modifiers = new List<IAttributeModifier>();

    public void AddModifier(IAttributeModifier modifier)
    {
        _modifiers.Add(modifier);
    }

    public void RemoveModifier(IAttributeModifier modifier)
    {
        _modifiers.Remove(modifier);
    }

    public Dictionary<string, float> GetTotalAttributeModifiers()
    {
        Dictionary<string, float> totalModifiers = new Dictionary<string, float>();

        foreach (IAttributeModifier modifier in _modifiers)
        {
            Dictionary<string, float> modifierAttributes = modifier.GetAttributeModifiers();

            foreach (KeyValuePair<string, float> attribute in modifierAttributes)
            {
                if (totalModifiers.ContainsKey(attribute.Key))
                {
                    totalModifiers[attribute.Key] += attribute.Value;
                }
                else
                {
                    totalModifiers.Add(attribute.Key, attribute.Value);
                }
            }
        }

        return totalModifiers;
    }
}

使用示例:

// 创建公用属性对象
PlayerAttributes playerAttributes = new PlayerAttributes();

// 设置基本属性
playerAttributes.SetAttribute('Strength', 10);
playerAttributes.SetAttribute('Agility', 15);
playerAttributes.SetAttribute('Intelligence', 20);

// 创建属性加成对象
class AttributeModifier : IAttributeModifier
{
    public Dictionary<string, float> GetAttributeModifiers()
    {
        Dictionary<string, float> modifiers = new Dictionary<string, float>();

        modifiers.Add('Strength', 5);
        modifiers.Add('Agility', 10);
        modifiers.Add('Intelligence', 15);

        return modifiers;
    }
}

// 创建属性加成系统对象
AttributeModifierSystem modifierSystem = new AttributeModifierSystem();

// 添加属性加成对象
modifierSystem.AddModifier(new AttributeModifier());

// 应用属性加成
playerAttributes.ApplyAttributeModifiers(modifierSystem.GetModifiers());

// 获取总属性加成
Dictionary<string, float> totalModifiers = modifierSystem.GetTotalAttributeModifiers();

// 输出所有属性及其值
foreach (KeyValuePair<string, float> attribute in playerAttributes.GetAttributes())
{
    Console.WriteLine(attribute.Key + ': ' + attribute.Value);
}

// 输出总属性加成
foreach (KeyValuePair<string, float> modifier in totalModifiers)
{
    Console.WriteLine(modifier.Key + ' Modifier: ' + modifier.Value);
}
C# 游戏开发:设计可扩展的玩家角色属性系统

原文地址: https://www.cveoy.top/t/topic/nGUX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录