只是列举一下伪算法的的函数步骤,留待以后思考。
需要的函数说明:
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; }