Esempio n. 1
0
        /// <summary>
        /// Обмена местами в массиве двух камешков.
        /// </summary>
        /// <param name="swap">Объект с камешками на обмен</param>
        public void Perform(Swap swap)
        {
            int columnA = swap.GemA.Column;
            int rowA    = swap.GemA.Row;
            int columnB = swap.GemB.Column;
            int rowB    = swap.GemB.Row;

            // Меняем камешки местами
            GemArray[rowA, columnA] = swap.GemB;
            swap.GemB.Column        = columnA;
            swap.GemB.Row           = rowA;

            GemArray[rowB, columnB] = swap.GemA;
            swap.GemA.Column        = columnB;
            swap.GemA.Row           = rowB;

            GemList chain = GetChainAt(rowB, columnB);

            // проверяем получившюся цепоку на длину. если цепочка больше трех на
            // месте премещенного камешка ставим бонус
            // записываем бонус в список на добавление спрайтов для сцены
            if (chain.Count == 4)
            {
                bool isHorizontal = chain.ToArray()[0].Row == chain.ToArray()[1].Row;
                BonusesToAddSpritesTo.Add(new Gem(true, isHorizontal, GemArray[rowB, columnB].GemType, rowB, columnB));
            }

            if (chain.Count >= 5)
            {
                BonusesToAddSpritesTo.Add(new Gem(true, GemArray[rowB, columnB].GemType, rowB, columnB));
            }

            chain = GetChainAt(rowA, columnA);

            if (chain.Count == 4)
            {
                bool isHorizontal = chain.ToArray()[0].Row == chain.ToArray()[1].Row;
                BonusesToAddSpritesTo.Add(new Gem(true, isHorizontal, GemArray[rowA, columnA].GemType, rowA, columnA));
            }

            if (chain.Count >= 5)
            {
                BonusesToAddSpritesTo.Add(new Gem(true, GemArray[rowA, columnA].GemType, rowA, columnA));
            }
        }