// 计算背包容量
// nBindType: 要计算的绑定类型
// (0=可容纳非绑定数量 1=可容纳绑定数量 2=最少可容纳混合的数量)
// nFreeGrid: 空格数量
// nMaxPerGrid: 每个空格可容纳的数量
// nFreeBind: 可通过叠加容纳的数量(绑定)
// nFreeNoBind: 可通过叠加容纳的数量(非绑定)
int GetBagTotalFreeCount(int nBindType, int nFreeGrid,
int nMaxPerGrid, int nFreeBind, int nFreeNoBind)
{
int nTotalFreeCount = nFreeGrid * nMaxPerGrid;
if(nBindType == 0)
{
// 不绑定的
nTotalFreeCount += nFreeNoBind;
}
else if(nBindType == 1)
{
// 绑定的
nTotalFreeCount += nFreeBind;
}
else
{
// 混合的
int nAddMax = max(nFreeBind, nFreeNoBind);
int nAddMin = min(nFreeBind, nFreeNoBind);
if(nTotalFreeCount == 0 || nAddMax >= nMaxPerGrid)
{
nTotalFreeCount += nAddMin;
}
else
{
// 极端情况下,一个空格只能放绑定或者非绑定中的1个
nTotalFreeCount -= (nMaxPerGrid-1);
nTotalFreeCount += (nFreeBind + nFreeNoBind);
}
}
return nTotalFreeCount;
}