PreviewMove() public method

public PreviewMove ( Direction direction ) : Point
direction Direction
return Point
Exemplo n.º 1
0
        private void MovePlayer()
        {
            UserMessage message;

            int   testRoomIndex;
            Point previewMove = player.PreviewMove(player.CurrentDirection);

            switch (CollisionDetection(previewMove))
            {
            case ObjectType.None:
                player.Move(previewMove);
                break;

            case ObjectType.Door:
                if (currentRoom.RoomWarp == null)
                {
                    testRoomIndex = currentRoom.GetNextRoom(player.CurrentDirection);
                    if (testRoomIndex == -1)
                    {
                        this.GameResult = Castle.GameResult.Win;
                        EndGame();
                        if (StopGamePlay != null)
                        {
                            StopGamePlay(this, new EventArgs());
                        }
                        return;
                    }
                    if (mapReader.FindRoom(testRoomIndex).Dark)
                    {
                        if (ItemManager.FindItemInInventory("Lamp") != null)
                        {
                            currentRoomIndex = testRoomIndex;
                            MovePlayerRoom(previewMove);
                            DrawRoom();
                        }
                        else
                        {
                            message = new UserMessage();
                            message.AddLine("It's too dark");
                            message.AddLine("to go that way");
                            PrintUserMessage(message);
                        }
                    }
                    else
                    {
                        currentRoomIndex = testRoomIndex;
                        MovePlayerRoom(previewMove);
                        DrawRoom();
                    }
                }
                else
                {
                    currentRoomIndex = currentRoom.RoomWarp.DestinationRoomId;
                    previewMove.X    = currentRoom.RoomWarp.X;
                    previewMove.Y    = currentRoom.RoomWarp.Y;
                    message          = currentRoom.RoomWarp.UserMessage;
                    player.Move(previewMove);
                    DrawRoom();
                    PrintUserMessage(message);
                }
                break;

            case ObjectType.UpStairs:
                currentRoomIndex = currentRoom.GetNextRoom(Direction.UpStairs);
                DrawRoom();
                break;

            case ObjectType.DownStairs:
                testRoomIndex = currentRoom.GetNextRoom(Direction.DownStairs);
                if (mapReader.FindRoom(testRoomIndex).Dark)
                {
                    if (ItemManager.FindItemInInventory("Lamp") != null)
                    {
                        currentRoomIndex = currentRoom.GetNextRoom(Direction.DownStairs);
                        DrawRoom();
                    }
                    else
                    {
                        message = new UserMessage();
                        message.AddLine("It's too dark");
                        message.AddLine("to go that way");
                        PrintUserMessage(message);
                    }
                }
                else
                {
                    currentRoomIndex = currentRoom.GetNextRoom(Direction.DownStairs);
                    DrawRoom();
                }
                break;

            case ObjectType.LockedDoor:
                message = new UserMessage();
                message.AddLine("The Door is");
                message.AddLine("locked");
                PrintUserMessage(message);
                break;

            case ObjectType.Trap:
                if (ProcessTrap() == false)
                {
                    player.Move(previewMove);
                }
                break;

            case ObjectType.Item:
                PickupItem(previewMove);
                break;

            case ObjectType.Monster:
                AttackMonster(previewMove);
                break;
            }
        }