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); }