Beispiel #1
0
        bool HandleKey(ConsoleKey key)
        {
            bool  moveDone     = true;
            Block currentBlock = blocksManager.CurrentBlock;

            switch (key)            //TODO что-то с этим сделать!!!
            {
            case ConsoleKey.UpArrow:
                currentBlock.Rotate(Direction.CLOCKWISE);
                if (currentBlock.IsCollision(field))                             //если коллизия, то попробовать сдвинуть влево
                {
                    currentBlock.MoveLeft();                                     //сдвинули влево
                    if (currentBlock.IsCollision(field))                         //если снова коллизия, то вернуть на место и попробовать сдвинуть вправо
                    {
                        currentBlock.MoveRight();                                //вернули на место
                        currentBlock.MoveRight();                                //сдвинули вправо
                        if (currentBlock.IsCollision(field))                     //если снова коллизия, то вернуть на место и попробовать сдвинуть вверх
                        {
                            currentBlock.MoveLeft();                             //вернули на место
                            currentBlock.MoveUp();                               //сдвинули вверх
                            if (currentBlock.IsCollision(field))                 //если снова коллизия, то вернуть на место
                            {
                                currentBlock.MoveDown();                         //вернули на место
                                currentBlock.Rotate(Direction.COUNTERCLOCKWISE); //развернули в первоначальное положение
                                moveDone = false;
                            }
                        }
                    }
                }
                break;

            case ConsoleKey.LeftArrow:
                currentBlock.MoveLeft();
                if (currentBlock.IsCollision(field))
                {
                    currentBlock.MoveRight();
                    moveDone = false;
                }
                break;

            case ConsoleKey.RightArrow:
                currentBlock.MoveRight();
                if (currentBlock.IsCollision(field))
                {
                    currentBlock.MoveLeft();
                    moveDone = false;
                }
                break;

            case ConsoleKey.DownArrow:
                currentBlock.MoveDown();
                if (currentBlock.IsCollision(field))
                {
                    currentBlock.MoveUp();
                    moveDone = false;
                }
                break;

            case ConsoleKey.Spacebar:
                currentBlock.DropDown(field);
                i = maxLevel;                         //чтобы "поле" сразу "съело" блок
                break;
            }

            return(moveDone);
        }