При перемещении курсора мыши мы проверяем, над какой локацией он находится, и вычисляем в каком направлении лежит данная локация по отношению к локации, в которой сейчас находится игрок. Потом производится проверка можно ли пройти в этом направлении, и если можно, то передвигаем игрока на соседнюю локацию в направлении курсора.
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)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.