道具叠加情况在背包当中的实现

只是列举一下伪算法的的函数步骤,留待以后思考。

需要的函数说明:

Item* FindItemBySourceID(); //获取同类型的物品并且数量最小

具体函数操作:

bool BagManager::Obtain(Item* pItem)
{
    Item* pTempItem = FindItemBySourceID(pItem->getSourceID()); //获得背包同类物品
     if (pItem)
    { //存在该物品

     }
    else
    { //不存在该物品 直接add

    }
    return false;
}

很直观的容易这么处理,存在该物品只需要修改物品参数就可以了,不存在物品再添加到新的格子里面。但是可能存在的一个格子,叠加之后还有剩余,我们其实可以把else的处理放开,如下图:

bool BagManager::Obtain(Item* pItem)
{
    Item* pTempItem = FindItemBySourceID(pItem->getSourceID()); //获得背包同类物品
    if (pItem)
    { //存在该物品

    }
    if(pItem->getNums() > 0)
    { //直接add

    }
    return false;
}

但是同样还是存在问题,加入pItem一次叠加后剩余的数量,或者本身pItem的数量就远远超过一个格子的最大叠加数,则需要对剩余处理做更多的判断

bool BagManager::Obtain(Item* pItem)
{
    Item* pTempItem = FindItemBySourceID(pItem->getSourceID()); //获得背包同类物品
    if (pItem)
    { //存在该物品

    }
    if(pItem->getNums()!=0 && pItem->getNums() > pItem->getLimitStackNums())
   { //剩余物品数量仍然大于一个格子的最大叠加数

   }
    if(pItem->getNums() > 0)
    { //剩余数量追加

    }
    return false;
}
时间: 2024-08-11 08:46:26

道具叠加情况在背包当中的实现的相关文章

在游戏设计当中关于背包的思考

背包功能是个游戏基本都有背包的概念,并且背包的基本操作的方式可以延伸到其他模块的处理上来.然而背包设计而言,往往不同的游戏存在着很大的差异,游戏性往往也做了很好的体验上来.有些时候背包设计的好,反而在可玩性上有了很好的提升.并且一个好的背包可以很方便直观的反映玩家所拥有资源的种类,数量的信息. 例如: 一个生存类游戏,生存游戏的特点可能体现在无处不在的危机和核心.那么物资的稀缺性而言就得得到很好的体现.所以背包的格子数不会过多.并且也可以加入负重的概念,使得背包的限制因素加大. 一个RPG游戏,

背包以及装备模块封装的思考

由于最近项目原因,负责了背包模块兼顾装备模块.起初由于装备和道具要分别进行管理,并且装备存在随机属性的问题,最直接的思考就是生成物品UID的方式来进行区分,并且通过UID来作为map的主键来进行存储.现在仔细思考下来,其实不用map,改用vector数组来存储会更好一些.UID只需要作为装备的唯一标示信息就可以了,用位置信息来作为唯一性的操作定位.可能说起来有点空白.看下图,原来是这么设计的: EquipManager和ItemManager分别管理了道具和装备的内存信息以及具体的操作,并且Pa

网格背包的简单实现

如果是使用网格背包实现的的背包界面,类似于<暗黑>这种背包,我是这么来定义结构的.发现和原来做的一个开纸的算法很类似,但是恰好反过来.反正没事儿想起来实现一下也不错. 一个物品的占位,默认左上角为(0,0)点.策划在填表的时候,只需要根据对角线关系填写(1,1)这个点就可以了. 服务器Item对象,仅需要存储左上角(0,0)点所在的二维数组的位置即可,如果考虑到物品的旋转(行列互换)可以再加入一个值做判断.(感觉实际一般都不能旋转,因为美术做图案的时候也很难保证旋转之后的美观性) class

HDU 6125 Free from square(状态压缩+分组背包)

http://acm.hdu.edu.cn/showproblem.php?pid=6125 题意: 在${1,2,3,...n}$的数中选择1~k个数,使得它们的乘积不能被平方数整除(1除外),计算有多少种取法. 思路: 考虑一下他们的质因子,如果两个数有相同的质因子,那么它们两个肯定是不能同时选的.这是不是很像分组背包,但是如果以质因子来分类的话,一个数就可能处于多个背包当中,这样就不行了,因为一个数你只能在一个背包中. 这题的数据范围很小,在500的范围内,质数的平方数小于500的就8个数

hdoj 2126 Buy the souvenirs 【另类01背包】

题意:求最多购买的件数以及有几种方法. 一看到这题就想到了背包,因为求得是种类数,所以我们可以将件数看做价值,将价格看做重量,这就变成01背包了(dp),但是还要求有几种购买方案,那么再来一个背包(kind). 分析:有三种情况: 1>dp[j] < dp[j-s[i]]+1 那么对于这一种情况  方案背包的状态转移方程是kind[j] = kind[j-s[i]]?kind[j-s[i]]:1;(考虑到kind[j-s[i]] ==0的时候,这时候kind[j] = 1): 证明:为什么是k

hdu 5313 Bipartite Graph(dfs+背包)

题意:n个点m条边,每条边的两个端点已知,求构成完全二分图能加的最多的边数: 参考:http://blog.csdn.net/acmhonor/article/details/47072399 思路:并不是一个二分图的题... n个点构成完全二分图是,两边的点数差值最小时边数最多(X+Y=n,求max(x*y)): 即在给定一些边的情况下,要求的是将点分在两个集合中数量差最小的情况: 先求出每个联通块中的点的情况,考虑孤立点的个数,通过贪心实现剪枝: 非贪心的情况使用背包,背包容量为n/2,推出

CSS和SVG中的剪切——clip-path属性和&lt;clipPath&gt;元素

剪切是什么 剪切是一个图形化操作,你可以部分或者完全隐藏一个元素.被剪切的元素可以是一个容器也可以是一个图像元素.元素的哪些部分显示或隐藏是由剪切的路径来决定的. 剪切路径定义了一个区域,在这个区域内的内容将会显示,而不在这个区域内的内容不会显示.这个区域被称之为“裁剪区域”.只要在这个区域之外的任何元素都不会显示.包括元素的内容.背景.边框.文本.轮廓等,甚至还包括他的子元素. 剪切的元素可以是任何容器和图片元素. 剪切路径的概念就相当于在元素上定义了一个视窗.它决定了元素哪些部分在这个“视窗

查找算法系列之复杂算法:哈希查找

眼下为止已经介绍了顺序查找.二分查找.分块查找.二叉排序树.见作者之前的文章: http://blog.csdn.net/u010025211/article/details/46635325 http://blog.csdn.net/u010025211/article/details/46635183 今天这篇博文将介绍哈希查找. 1.为什么要用哈希查找 之前所讲的查找方法都是须要比較待查找元素与线性表或者树中的元素才干实现. 这种时间复杂度为O(n)或者O(log n),那么有没有可能当给

0608 (用户故事)任务-具体工作流程安排

名字 石昊 年龄.性别 21.男 职业 老师 收入 1000/月 知识层次和能力 大学本科.教导学生 生活/工作情况 每天在学校教育学生,享受教育学生乐趣 动机.目的.困难 留作业给学生做,传授知识.困难:学生不听 用户偏好 锻炼学生能力 用户比例 ? 典型场景 在学校工作 典型描述 每次上课布置任务 名字 叶良辰 年龄.性别 10  男 职业 学生 收入 0 知识层次和能力 小学生 生活/工作情况 每天都要上学除放假外 动机.目的.困难 学习新知识,学习成绩不好 用户偏好 看书,打游戏机 用户