类吸血鬼幸存者合成系统

本文详细介绍了如何在吸血鬼幸存者游戏中实现个人版本的合成系统,包括物品编码、合成配方、所需材料和玩家数据管理,以及使用示例和运行结果。
摘要由CSDN通过智能技术生成

目录

1前言

2.需求分析

3.代码

3.1物品代码,包含武器和饰品

3.2合成配方

3.3材料代码

3.4合成系统

3.5玩家数据

3.6使用方法

4.运行结果


1前言

吸血鬼幸存者合成系统的个人版本,希望提供给大家一些创作上的思路


2.需求分析

吸血鬼幸存者中玩家每次升级都会获得一个武器或者饰品,物品和饰品都有对应的等级和功能,装备A武器和B饰品,升级获得武器C,并且武器A消失,饰品B保留。

3.代码

3.1物品代码,包含武器和饰品

/// <summary>
/// 物品
/// </summary>
public class BaseItem
{
    /// <summary>
    /// 物品
    /// </summary>
    /// <param name="id">物品ID</param>
    /// <param name="name">物品名称</param>
    /// <param name="description">物品描述</param>
    /// <param name="currentLevel">当前等级</param>
    /// <param name="craftRecipeID">物品合成配方</param>
    public BaseItem(int id, string name, string description, int currentLevel, int recipeId)
    {
        ItemId = id;
        Name = name;
        Description = description;
        CurrentLevel = currentLevel;
        RecipeID = recipeId;
    }

    /// <summary>
    /// 物品ID
    /// </summary>
    public int ItemId { get; private set; }

    /// <summary>
    /// 物品名称
    /// </summary>
    public string Name { get; private set; }

    /// <summary>
    /// 物品描述
    /// </summary>
    public string Description { get; private set; }

    /// <summary>
    /// 当前等级
    /// </summary>
    public int CurrentLevel { get; set; }

    /// <summary>
    /// 合成配方ID
    /// 2A+B=2C
    /// </summary>
    public int RecipeID { get; private set; }
}

3.2合成配方

/// <summary>
/// 合成配方
/// </summary>
public class CraftRecipe
{
    /// <summary>
    /// 合成配方
    /// </summary>
    /// <param name="id">合成ID</param>
    /// <param name="reslutItemId">目标物品ID</param>
    /// <param name="resultLevel">合成目标数量</param>
    /// <param name="needItems">所需材料</param>
    public CraftRecipe(int id, int reslutItemId, int resultLevel, List<NeedItem> needItems)
    {
        RecipeID = id;
        ReslutItemId = reslutItemId;
        ResultLevel = resultLevel;
        NeedItems = needItems;
    }

    /// <summary>
    /// 合成ID
    /// </summary>
    public int RecipeID { get; private set; }

    /// <summary>
    /// 目标物品ID
    /// </summary>
    public int ReslutItemId { get; private set; }

    /// <summary>
    /// 合成目标等级
    /// </summary>
    public int ResultLevel { get; private set; }

    /// <summary>
    /// 所需材料
    /// </summary>
    public List<NeedItem> NeedItems { get; private set; }
}

3.3材料代码

/// <summary>
/// 所需材料
/// </summary>
public class NeedItem
{
    /// <summary>
    /// 所需材料ID
    /// </summary>
    public int ItemId;

    /// <summary>
    /// 所需材料数量
    /// </summary>
    public int NeedLevel;

    /// <summary>
    /// 所需材料
    /// </summary>
    /// <param name="id">所需材料ID</param>
    /// <param name="needLevel">所需材料</param>
    public NeedItem(int id, int needLevel)
    {
        this.ItemId = id;
        this.NeedLevel = needLevel;
    }
}

3.4合成系统

/// <summary>
/// 合成系统接口
/// </summary>
public interface ICraftRecipeSystem
{
    bool CheckRecipeID(int RecipeIDRecipeID, int ItemId);

    bool CanCraft(int ItemID);

    void CraftItem(int itemId);
}
/// <summary>
/// 抽象合成系统
/// </summary>
public abstract class AbstractCraftSystem : ICraftRecipeSystem
{
    public abstract bool CanCraft(int ItemID);
    public abstract bool CheckRecipeID(int RecipeIDRecipeID, int ItemId);
    public abstract void CraftItem(int itemId);
}
/// <summary>
/// 合成系统
/// </summary>
public class CraftRecipeSystem : AbstractCraftSystem
{
    /// <summary>
    /// 玩家数据
    /// </summary>
    public PlayerData m_PlayerData;

    /// <summary>
    /// 所有物品
    /// </summary>
    public Dictionary<int, BaseItem> Items = new Dictionary<int, BaseItem>();

    /// <summary>
    /// 所有配方
    /// </summary>
    public Dictionary<int, CraftRecipe> Table = new Dictionary<int, CraftRecipe>();

    /// <summary>
    /// 检查配方ID是否合法
    /// </summary>
    /// <param name="RecipeIDRecipeID">配方ID</param>
    /// <returns>配方ID是否合法</returns>
    public override bool CheckRecipeID(int RecipeIDRecipeID, int ItemId)
    {
        if (Table.ContainsKey(RecipeIDRecipeID) && Table[RecipeIDRecipeID].NeedItems.Count > 0)
        {
            Console.WriteLine($"配方Id为:{RecipeIDRecipeID}的配方合法");

            return true;
        }
        else
        {
            Console.WriteLine($"配方ID为:{RecipeIDRecipeID}的配方不合法");
            return false;
        }
    }

    /// <summary>
    /// 检查是否可以生成
    /// </summary>
    /// <param name="ItemID">物体ID</param>
    /// <returns>是否可以生成</returns>
    public override bool CanCraft(int ItemID)
    {
        //检查合成Id是否合法
        if (CheckRecipeID(Items[ItemID].RecipeID, ItemID))
        {
            //检查合成后的物品ID是否存在于物品表
            if (Items.ContainsKey(Table[Items[ItemID].RecipeID].ReslutItemId))
            {
                //检查所持物品数量是否满足合成物品的需求
                foreach (var needItem in Table[Items[ItemID].RecipeID].NeedItems)
                {
                    Console.WriteLine($"NeedItem:{needItem.ItemId}");
                    if (m_PlayerData.EquipItems.ContainsKey(needItem.ItemId))
                    {
                        //所持物品数量是否大于所需物品数量
                        if (m_PlayerData.EquipItems[needItem.ItemId].CurrentLevel < needItem.NeedLevel)
                        {
                            Console.WriteLine($"Id为:{needItem.ItemId}的等级不够,当前等级为:{m_PlayerData.EquipItems[needItem.ItemId].CurrentLevel},所需等级为:{needItem.NeedLevel},无法进行合成");
                            return false;
                        }
                        else
                        {
                            Console.WriteLine($"Id为:{needItem.ItemId}的等级足够,当前等级为:{m_PlayerData.EquipItems[needItem.ItemId].CurrentLevel},所需等级为:{needItem.NeedLevel},可以进行合成");
                            continue;
                        }
                    }
                    else
                    {
                        Console.WriteLine($"未装备ID为:{needItem.ItemId}的物品!");
                        return false;
                    }

                }

                return true;
            }
            else
            {
                Console.WriteLine($"不存在ID为:{Table[ItemID].ReslutItemId}的物品!");
                return false;
            }
        }
        else
        {
            Console.WriteLine($"物品ID为:{ItemID}的配方无法生成!");
            return false;
        }
    }

    /// <summary>
    /// 合成物品
    /// </summary>
    /// <param name="itemId">物品Id</param>
    public override void CraftItem(int itemId)
    {
        //Console.WriteLine($"物品的ID为{itemId},名称为:{Items[itemId].Name},生成前等级为:{m_PlayerData.EquipItems[itemId].CurrentLevel}");
        //是否可合成
        if (CanCraft(itemId))
        {

            m_PlayerData.RemoveItem(Items[Table[Items[itemId].RecipeID].NeedItems[0].ItemId]);
            m_PlayerData.AddItem(new BaseItem(itemId, Items[itemId].Name, Items[itemId].Description, Table[Items[itemId].RecipeID].ResultLevel, Items[itemId].RecipeID));

            Console.WriteLine($"物品的ID为:{itemId},名称为:{Items[itemId].Name},生成后装备等级为:{m_PlayerData.EquipItems[itemId].CurrentLevel}");
        }
        else
        {
            Console.WriteLine("合成失败");
        }
    }
}

3.5玩家数据

public class PlayerData
{
    public Dictionary<int, BaseItem> EquipItems = new Dictionary<int, BaseItem>();

    public void AddItem(BaseItem item)
    {
        if (EquipItems.ContainsKey(item.ItemId))
        {
            EquipItems[item.ItemId].CurrentLevel++;
            Console.WriteLine($"升级武器ID为:{item.ItemId},名称为:{item.Name},武器等级为:{EquipItems[item.ItemId].CurrentLevel}");
        }
        else
        {
            EquipItems.Add(item.ItemId, item);
            Console.WriteLine($"装备武器ID为:{item.ItemId},名称为:{item.Name},武器等级为:{EquipItems[item.ItemId].CurrentLevel}");
        }
        ShowItem();
    }

    public void RemoveItem(BaseItem item)
    {
        Console.WriteLine($"移除武器ID为:{item.ItemId},名称为:{item.Name},武器等级为:{EquipItems[item.ItemId].CurrentLevel}");
        EquipItems.Remove(item.ItemId);
        ShowItem();
    }

    public void ShowItem()
    {
        Console.WriteLine("现存装备");
        foreach (var item in EquipItems.Values)
        {
            Console.WriteLine($"Id:{item.ItemId},Name:{item.Name},Description:{item.Description},CuttentLevel:{item.CurrentLevel}");
        }
    }
}

3.6使用方法

public class MainProgram
{
    static void Main(string[] args)
    {
        CraftRecipeSystem m_CraftRecipeSystem = new CraftRecipeSystem();
        m_CraftRecipeSystem.Items.Add(1001, new BaseItem(1001, "长剑", "+10点攻击力", 1, 2000));
        m_CraftRecipeSystem.Items.Add(1002, new BaseItem(1002, "魔戒", "+10%攻速", 1, 2000));
        m_CraftRecipeSystem.Items.Add(1003, new BaseItem(1003, "魔剑", "+15攻击,+15%攻速", 0, 2001));


        m_CraftRecipeSystem.Table.Add(2000, new CraftRecipe(2000, -1, 0, new List<NeedItem>()));
        m_CraftRecipeSystem.Table.Add(2001,
            new CraftRecipe(2001, 1003, 1, new List<NeedItem>() { new NeedItem(1001, 2), new NeedItem(1002, 1) }));

        PlayerData m_playerData = new PlayerData();
        //升一级
        m_playerData.AddItem(new BaseItem(1001, "长剑", "+10点攻击力", 1, 2000));
        //升一级
        m_playerData.AddItem(new BaseItem(1002, "魔戒", "+10%攻速", 1, 2000));
        //升一级
        m_playerData.AddItem(new BaseItem(1001, "长剑", "+10点攻击力", 1, 2000));

        m_CraftRecipeSystem.m_PlayerData = m_playerData;
        Console.WriteLine();

        //错误测试
        m_CraftRecipeSystem.CraftItem(1001);
        Console.WriteLine();
        m_CraftRecipeSystem.CraftItem(1002);
        Console.WriteLine();

        //生成魔剑
        m_CraftRecipeSystem.CraftItem(1003);
        Console.WriteLine();

        //错误测试
        m_CraftRecipeSystem.CraftItem(1003);
        Console.WriteLine();

    }
}

4.运行结果

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值