引言

一般的手游项目中,策划挖数值坑的点来来去去就几样:装备、宠物、宝石、附魔、强化。
想让玩家爆肝怎么办?调整爆率、升级、合成、突破、进化等等

只有你想不到的,没有老八做不到的。

今天给大伙整一个俄罗斯二手的装备合成算法
为什么是二手的,因为我不是第一个发博客写这个算法的人

需求

装备系统的合成图谱,箭头指向的是合成之后的装备,每合成一个装备需要消耗一些金币,箭头上的数字表示合成所需的材料数量。
比如,要合成n个装备A,需要消耗3n个装备B、1n个装备C、4n个装备D,而且还需要消耗26n金币(装备B和装备D的合成与此类似)。

思路

一般解决树结构的问题,首先想到递归。
其次限制合成装备的条件有两个,合成材料和金币。哪个优先级高呢,个人觉得是材料。

一般情况下,材料获取难度高于金币
虽然都可以在商城花费高级金币(钻石)购买材料和金币,但用钻石购买金币会让玩家产生血亏的感觉,策划应该避免这种情况

根据优先级,先算出不花费金币的情况下最多能合成的装备数量
然后计算合成一件装备的数量
最大数量×单价=总花费金币
总花费金币<玩家持有金币,最大数量便是结果
总花费金币>玩家持有金币,只能用玩家金币数除以单价得到结果

算法

public class Exam
{public class MaterialData{public ItemData item;   //合成所需的物品public int count;       //合成所需的该物品的数量}public class ItemData{public int id;                          //物品 IDpublic int count;                       //当前拥有的物品数量public int costGold;                    //合成该物品所需的金币public List<MaterialData> materialList; //合成该物品所需的材料}/// <summary>/// 计算用 totalGold 金币最多可以合成的 item 装备的数量/// </summary>/// <param name="item">要合成的装备</param>/// <param name="totalGold">拥有的金币</param>/// <returns>可合成的 item 装备的最大数量</returns>public int Run(ItemData item, int totalGold){int resCount = getCount(item);int resCost = getCost(item);int res = resCost * resCount;if (res > totalGold)return totalGold / resCost;elsereturn resCount;}/// <summary>/// 计算合成1个item装备要消耗的金币数/// </summary>/// <param name="item">要合成的装备</param>/// <returns>合成1个item装备要消耗的金币数</returns>private int getCost(ItemData item){int count = item.materialList.Count;if (count == 0){return 0;}int minCount = 0;for (int i = 0; i < count; i++){minCount += getCost(item.materialList[i].item) * item.materialList[i].count;}minCount += item.costGold;return minCount;}/// <summary>/// 计算不计金币的情况下能合成最多的item装备数量/// </summary>/// <param name="item">要合成的装备</param>/// <returns>可合成的 item 装备的最大数量</returns>private int getCount(ItemData item){int count = item.materialList.Count;if (count == 0){return item.count;}int curCount, conCount;int minCount = int.MaxValue;for (int i = 0; i < count; i++){curCount = getCount(item.materialList[i].item);conCount = curCount / item.materialList[i].count;minCount = Math.Min(minCount, conCount);}return minCount;}
}

测试用例

测试用例参考这篇博客

RPG游戏装备合成算法相关推荐

  1. [转载]Unity的RPG游戏装备系统的实现

    原作者和链接: RPG游戏<黑暗之光>流程介绍与代码分析之(八):装备系统的实现 - s1314_JHC的博客 - CSDN博客 https://blog.csdn.net/s1314_J ...

  2. Unity学习笔记3 简易2D横版RPG游戏制作(三)

    这一篇本来应该是在上一篇后面直接补进去的.不过因为排版的问题.所以我就另开一篇来整理了,好了,废话不多说,马上整理: 十八.关卡的锁定与解锁 前面我们已经解决了在游戏开始时可以选择关卡的问题,接下来我 ...

  3. java平台rpg游戏丧尸_RPG的生存游戏你玩过吗?《Dead Age》带你逃离丧尸

    "丧尸"作为一个饱受游戏与影视产业青睐的题材,常常以各种各样的形态出现在我们的视野里. <釜山行>里的丧尸们 <H1Z1>里的丧尸 在许多丧尸题材的生存游戏 ...

  4. 怎么制作游戏脚本_我应该怎么样来推荐我们制作的这款RPG游戏呢?

    相关阅读: 从外包到独立创作,Winwill能否凭<城堡传说>获得市场认可 iOS单机探险一年流水400万+,7人成团<城堡传说2> 能否更胜前作? 我的新游要发售-- 不知不 ...

  5. RPG游戏制作-02-游戏世界主角的诞生

    在RPG游戏中,有着各种各样的NPC(Non-Player Control),玩家可以操作主角与NPC进行交互,来获得情报,道具,装备等等.而NPC的概念比较广泛,从各种商人到宝箱再到空气墙,都可以认 ...

  6. C/C++——文字RPG游戏:MINERPG

    更新版本 更新内容 新机制:护盾,回合外反击,限定技能: 战士:新增限定技能无尽之血: 法师:相位转移调整:嗜法重做:风暴盾.暴风雪.心灵震爆.法力燃烧调整:删除技能附魔武器:冰枪术重做:新增技能法力 ...

  7. python猫狗大战游戏下载_猫狗大战RPG游戏下载-猫狗大战RPG官方版下载v1.1.8-PChome下载中心...

    猫狗大战RPG是一款画面清新的闯关模拟游戏,你需要加入到猫或者狗的阵营中战斗,游戏的猫狗等级可以轻松进行提升,各种不同的副本等级玩家都可以根据需求进行挑战,打败敌人可以为你带来技能点加成,还有很多组队 ...

  8. python猫狗大战游戏下载_猫狗大战RPG最新下载-猫狗大战RPG游戏安卓版-Minecraft中文分享站...

    <猫狗大战RPG>游戏是一款回合制角色扮演手游,玩家们可以在这款游戏中自由的选择角色去进行游戏.卡通的游戏风格,高清的而游戏画质,丰富多样的游戏玩法,大大的提高了游戏的可玩性,会给玩家们带 ...

  9. c语言 rpg游戏,浅谈RPG游戏设计(一)

    Chapter:1什么是RPG游戏? 1.RPG游戏的定义 RPG全称为:Role Playing Game(角色扮演游戏),作为具有一定的情节.描述人物成长过程.表现事件始末的一种游戏,决定了角色扮 ...

最新文章

  1. mongodb和python交互
  2. Java与Excel的交互!-
  3. 怎么把写好的python代码打包成exe-【Python之点到为止】如何优雅的将你的代码打包成EXE...
  4. leetcode算法题--Unique Paths II
  5. java 百分比相加_2019年Java面试题基础系列228道(5),快看看哪些你还不会?
  6. firework常用快捷键
  7. 001_汽车之家,新浪和360之间的交流
  8. SWOT分析是神马?
  9. 音频服务器未运行怎么办,音频服务未运行怎么办 音频服务未运行解决方法【详细介绍】...
  10. 软件测试安全性翻译成英语,中文翻译英语测试题-请大家帮我翻译一段关于软件测试的英文(译成中文)#8226; 爱问知识人...
  11. 第三章(循环) 编程题 2
  12. 编址与存储相关计算(一)——软考之路
  13. Excel如何随机抽取姓名
  14. Android车载蓝牙相关开发3:蓝牙音频接收器BluetoothA2dpSink
  15. C# Abp框架入门系列文章(一)
  16. 打开计算机显示远程控制,win7系统远程协助怎么打开?开启远程协助功能教程...
  17. 【C++】1070:人口增长(信息学奥赛)
  18. MapReduce 切片源码中SPLIT_SLOP等于1.1的原因分析(TextInputFormat)
  19. 密码学中Alice(爱丽丝)和鲍勃(Bob)的历史
  20. HTML5期末大作业:基于HTML+CSS+JavaScript校园文化企业网站模板【学生网页设计作业源码】

热门文章

  1. 苦战 自由软件的今生前世
  2. 基于FME实现的地理数据库批量建库的解决方案,支持gdb、mdb、shapefile等数据格式,gdb批量建库,mdb批量建库,shp批量建库,shapefile批量建库,地理数据批量建库
  3. nCodeDL 分析实例(一)高周疲劳
  4. qt记住上次打开的文件路径
  5. 《软件工程(第4版?修订版)》目录—导读
  6. 服务器渲染技术-Thymeleaf
  7. Joomla 模板常用技巧函数收集
  8. Convention插件-content
  9. IRSHELL 3.8/3.81安装使用教程
  10. $(this.el).html 与 this.$el.tml区别