示例#1
0
        // проверка подобия фигур
        public bool IsSimilar(TetrisFigure other)
        {
            if (Blocks.Count() != other.Blocks.Count())
            {
                return(false);
            }

            TetrisFigure Figure = (TetrisFigure)other.Clone();

            bool CompareBlocks()
            {
                return(Blocks.Count() == Figure.Blocks.Count() && Blocks.All(p1 => Figure.Blocks.Any(p2 => p1.X == p2.X && p1.Y == p2.Y)));
            }

            // совпадение

            if (CompareBlocks())
            {
                return(true);
            }

            // совпадение после поворота на 90

            Figure.MoveRotate();

            if (CompareBlocks())
            {
                return(true);
            }

            // совпадение после поворота на 180

            Figure.MoveRotate();

            if (CompareBlocks())
            {
                return(true);
            }

            // совпадение после поворота на 270

            Figure.MoveRotate();

            if (CompareBlocks())
            {
                return(true);
            }

            // не совпало

            return(false);
        }
示例#2
0
        // перемещение поворотом
        private bool MoveRotate()
        {
            lock (Tank)
            {
                // проверка

                TetrisFigure Figure = (TetrisFigure)CurrentFigure.Clone();

                Figure.MoveRotate();

                if (!TryCurrentFigure(Figure))
                {
                    return(false);
                }

                // перемещение

                HideCurrentFigure();

                CurrentFigure.MoveRotate();

                ShowCurrentFigure();

                return(true);
            }
        }