Esempio n. 1
0
File: Bag.cs Progetto: e2wugui/zeze
        /// <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);
        }
Esempio n. 2
0
File: Bag.cs Progetto: e2wugui/zeze
        /// <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);
        }