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

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

需要的函数说明:

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;
}
原文地址:https://www.cnblogs.com/flashbird/p/4427961.html