Всем привет,
сегодня немного поиграем, я такой лабиринт делал когда то для жены, только он был побольше, я спрятал от нее подарок, а место его нахождения записал на финише. Весь прикол в том, что как только курсор касается стенки лабиринта его перекидывает в начальную точку.
В общем, погнали!
Вот проект для тех кому лень читать: Labyrinth на C#
Итак, начнем.
1) Создание проекта winForm называет проект Labyrinth
2) Задаем размер формы, любой.
3) Прописываем название формы — «Лабиринт» (в свойствах Text)
4) Кидаем на форму элемент «Panel», растягиваем по краям так, чтобы был небольшой зазор.
5) Далее, нажимаем на форму для свойства FormBorderStyle выставляем значение Fixed3D. Это нужно чтобы пользователь не мог менять размеры формы.
6) Также отключаем кнопку «Развернуть» в заголовке окна. Для этого необходимо для формы установить свойству MaximizeBox значение False.
7) Далее, возвращаемся к панели. Выделяем панель и устанавливаем для свойства BorderStyle значение Fixed3D, чтобы хорошо была видна граница игрового поля.
8) Теперь переходим к проектированию самого Лабиринта.
9) Перетаскиваем на форму элемент Label.
9) Выделяем, Label
- Задаем свойству AutoSize значение False.
- Для свойства BackColor выберите какой нибудь цвет, я взял SkyBlue, не люблю цвета разъедающие глаза.
- Удалите значение свойства Text .
10) Выделяем полученный прямоугольник, делаем множество копий(ctrl+c — ctrl+v). Из этих прямоугольников будем строить лабиринт.
11) Я спроектировал и создал вот такой лабиринт.
12) Добавляем финишный Label, в свойствах присваиваем св-ву Name — labelFinish, Text — «Финиш», цвет красный и стартовый label, в свойствах присваиваем св-ву Name — labelStart, Text — «Старт», цвет зеленый
13) Теперь немного теории, фактически при старте программы, курсор должен быть уже на labelStart, если курсор касается стенки лабиринта(внешней или внутренней), то его перекидывает на labelStart.
14) Для этого выделяет всего синие label и создаем обработчик для события MouseEnter двойным нажатие.
15) Если у вас обработчик может называться по другому, это не критично.
16) Выходим из кода, обратно на форму и выделяем только panel и проставляет аналогичному событию, обработчик который был создан в 14 пункте.
17) Так теперь нам нужно еще создать обработчик для формы, нужно чтобы в момент загрузки формы выставлять позицию курсору.
18) И последний обработчик нужен нам для вывода сообщения о завершении при наведении на красный label.
19) Теперь переходим в код и пишем следующее:
using System; using System.Drawing; using System.Windows.Forms; namespace Labyrinth { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //При касании любой стены лабиринта, позиция будет обновляться до стартового. private void label71_MouseEnter(object sender, EventArgs e) { Cursor.Position = new Point(this.Location.X + 55, this.Location.Y + 60); } //Выставляем стартовую позицию курсора. // +55 и +60 это позиция labelStart относительно позиции формы на рабочем столе. private void Form1_Load(object sender, EventArgs e) { Cursor.Position = new Point(this.Location.X + 55, this.Location.Y + 60); } //При наведении на финишный label появится сообщение. private void labelFinish_MouseEnter(object sender, EventArgs e) { MessageBox.Show("Победа!!!","Ура!!!",MessageBoxButtons.OK,MessageBoxIcon.Information); } } }
Вот и все, такая вот короткая програмка, если понравилось ставь лайк 🙂
Лабиринт это здорово! А плюшка есть когда заканчиваешь прохождение?
Конечно, есть.