Разработка программы «хождение по лабиринту», курсовая работа по системному по, страница 9

При перемещении курсора мыши мы проверяем, над какой локацией он находится, и вычисляем в каком направлении лежит данная локация по отношению к локации, в которой сейчас находится игрок. Потом производится проверка можно ли пройти в этом направлении, и если можно, то передвигаем игрока на соседнюю локацию в направлении курсора.

private void Field_MouseMove(object sender, MouseEventArgs e)

{

    if (e.Button == MouseButtons.Left)

    if (Maze != null)

    {

        Point NewPosition = new Point(e.X/CellSize.Width, e.Y/CellSize.Height);

        if (NewPosition.X >= Maze.Size.Width) NewPosition.X =Maze.Size.Width-1;

        if (NewPosition.Y >= Maze.Size.Height) NewPosition.Y=Maze.Size.Height-1;

        bool Win = false;

        OldPosition = Maze.Player.CurrentPosition;

        if ((NewPosition.X > Maze.Player.CurrentPosition.X) &&

(Maze.CanGo(Maze.Player.CurrentPosition, EDirection.East)))

        {

            Win = Maze.Player.Move(EDirection.East);

        } else

        if ((NewPosition.X < Maze.Player.CurrentPosition.X) &&

(Maze.CanGo(Maze.Player.CurrentPosition, EDirection.West)))

        {

            Win = Maze.Player.Move(EDirection.West);

        }

        if ((NewPosition.Y > Maze.Player.CurrentPosition.Y) &&

(Maze.CanGo(Maze.Player.CurrentPosition, EDirection.South)))

        {

            Win = Maze.Player.Move(EDirection.South);

        } else

        if ((NewPosition.Y < Maze.Player.CurrentPosition.Y) &&

(Maze.CanGo(Maze.Player.CurrentPosition, EDirection.Noth)))

        {

            Win = Maze.Player.Move(EDirection.Noth);

        }

        RedrawBuffer(true);

        Field.Refresh();

        System.Threading.Thread.Sleep(100);

        if (Win)

        {

            DialogResult dr = MessageBox.Show("Do you want to start new game?", "You WIN! Congratulations!",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation);

            Maze.Player.Reset();

            if (dr == DialogResult.Yes)