/// <summary> /// 移动物品,从一个格子移动到另一个格子。实现功能:移动,交换,叠加,拆分。 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="number">-1 表示尽量移动所有的</param> public void Move(int from, int to, int number) { BItem itemFrom; if (false == bag.Items.TryGetValue(from, out itemFrom)) { return; } // validate parameter if (from < 0 || from >= bag.Capacity) { return; } if (to < 0 || to >= bag.Capacity) { return; } if (number < 0 || number > itemFrom.Number) { number = itemFrom.Number; // move all } int pileMax = GetItemPileMax(itemFrom.Id); if (bag.Items.TryGetValue(to, out var itemTo)) { if (itemFrom.Id != itemTo.Id) { if (number < itemFrom.Number) { return; // 试图拆分,但是目标已经存在不同物品 } // 交换 BItem.Swap(itemFrom, itemTo); return; } // 叠加(或拆分) int numberToWill = itemTo.Number + number; if (numberToWill > pileMax) { itemTo.Number = pileMax; itemFrom.Number = numberToWill - pileMax; } else { itemTo.Number = numberToWill; bag.Items.Remove(from); } return; } // 移动(或拆分) BItem itemNew = itemFrom.Copy(); // 先复制一份再设置成目标数量。 itemNew.Number = number; if (itemFrom.Number == number) { // 移动 bag.Items.Remove(from); bag.Items.Add(to, itemNew); return; } // 拆分 itemFrom.Number -= number; bag.Items.Add(to, itemNew); }
/// <summary> /// 移动物品,从一个格子移动到另一个格子。实现功能:移动,交换,叠加,拆分。 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="number">-1 表示尽量移动所有的</param> public int Move(int from, int to, int number) { // validate parameter if (from < 0 || from >= bag.Capacity) { return(ModuleBag.ResultCodeFromInvalid); } if (to < 0 || to >= bag.Capacity) { return(ModuleBag.ResultCodeToInvalid); } BItem itemFrom; if (false == bag.Items.TryGetValue(from, out itemFrom)) { return(ModuleBag.ResultCodeFromNotExsit); } if (number < 0 || number > itemFrom.Number) { number = itemFrom.Number; // move all } int pileMax = GetItemPileMax(itemFrom.Id); if (bag.Items.TryGetValue(to, out var itemTo)) { if (itemFrom.Id != itemTo.Id) { if (number < itemFrom.Number) { // 试图拆分,但是目标已经存在不同物品 return(ModuleBag.ResultCodeTrySplitButTargetExsitDifferenceItem); } // 交换 BItem.Swap(itemFrom, itemTo); return(0); } // 叠加(或拆分) int numberToWill = itemTo.Number + number; if (numberToWill > pileMax) { itemTo.Number = pileMax; itemFrom.Number = numberToWill - pileMax; } else { itemTo.Number = numberToWill; bag.Items.Remove(from); } return(0); } // 移动(或拆分) BItem itemNew = itemFrom.Copy(); // 先复制一份再设置成目标数量。 itemNew.Number = number; if (itemFrom.Number == number) { // 移动 bag.Items.Remove(from); bag.Items.Add(to, itemNew); return(0); } // 拆分 itemFrom.Number -= number; bag.Items.Add(to, itemNew); return(0); }