Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Морской флот / Архитектура - Мышкой по кораблям

  • На этом уроке мы научимся по щелчку мышки стрелять по кораблям.
    Для этого нам понадобится создать обработчик MouseClick,
    и подцепить его к каждой картинке. Используя делегаты
    мы будем свистать всех на верх - до класса Form1,
    из которого будем спускаться по иерархии опять вниз,
    для пометки выстрела и отображения его на карте.
  • Дата отправки отчёта: 9 августа 2016 г.
  • Задание выполнено: за 50 мин.
  • Чему научился: Повторил обработку события клика мышки, работу с делегатами.
  • Что было сложным: Проблем не было.
  • Комментарии: Все хорошо и понятно объясняется.
  • Оценка видео-уроку:
Отчёт от 7276 за Морской флот / Архитектура - Мышкой по кораблям


Отчёт от 7276 за Морской флот / Архитектура - Мышкой по кораблям




Оцени работу

 
Сохранить страницу:

  • Отчёт оценивали:
    10670Сергей Соколов+1   7119Новопашин Владимир+1   9263Андрей Н.+1   10494Алексей В.+1   9237Mais+1   5760Мариша +1   4992Николай+1   459Сергей Сергеевич+1   3506Алексей|BrisK|Кривицкий+1   6452Кирилл Шмойлов+1   4395Денис+1   689Igorenzia+1   4715Alex0   8275Tekashnik+1   7453Юлия+1   3747Сергей+1   4004Елена+1   4467Alcatraz+1   6203Николай (nick27m)+1   9323Алексей+1   10447Давид0   3146Permitin Alexey+1  

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: 1. Инициировать щелчок мыши в классе 2. Прокачал знания по делегатам 3. Научился организовывать делегат в форме, и обращаться к нему из класса 4. Узнал функцию parentCollection.Remove()
Трудности: Сложностей не возникло
Этот урок был для меня сплошь из новизны. С делегатами я до этого работал, но чтобы назад из класса в форму...очень элегантно получилось. Не перестаю удивляться возможностям си-шарпа. На скрине у меня промахи - зеленые крестики, а попадения - вспышки-взрывы в звездном небе. Параллельно придумываю, как реализовать это анимационно. Ну что же, со стороны Альянса стрельбу реализовали, теперь пора перейти к созданию Звезды Сме... ой, простите, к созданию Сервера управления "огневой потехой".
Научился: продолжил работать с делегатами
Ну не согласен я с таким применением делегатов. Все то преимущество и ту простоту, которое дает механизм делегатов при таком раскладе превращается в запутанное сложное спагетти. Ну ладно, Бог с ним, по каким то религиозным соображениям Витольдович не хочет применять события си шарпа (хотя здесь бы функционал собятия пригодился бы). Но уж больно на костылях как то все получилось прикручено, да еще и не туда. Позвольте мне нескромно предложить свою скромную версию:
Во первых, в чем суть расклада - нам нужно информацию о клике мышкой (какой океан, какая клетка) передать в нужный океан и изменить состояние связанных с ним данных. Сразу вопрос: при чем тут Form, зачем нам его в это впутывать? Так и сказал кто то из курсантов, делегат должен вызывать методы экземпляров класс океан. Как океаны должны узнавать что это относится именно к этому конкретному океану - это уже другой вопрос. Собственно для этого и существует механизм "издатель - подписчики".
Итак.
1. Где угодно вне класса объявляем наш делегат.
2. В классе PictureBox объявляем статический экземпляр делегата: public static deBoxClicked deClick;
3. Там же:
private void Box_MouseClick(object sender, MouseEventArgs e) { deClick.Invoke(place, mapx, mapy); }
4. В классе Ocean в функцию Create добавляем в конец: public void Create() { .............. Box.deClick += BoxClicked; }
5. Там же в классе Ocean: public void BoxClicked(int place, int mapx, int mapy) { if (this.place == place) MessageBox.Show("я " + title + " океан. " + "Я знаю, что щелкнули по МОЕЙ клетке " + " " + mapx + " " + mapy); }
Результат манипуляций на скриншоте 1.
. Думаю понятно, что целевой океан получает информацию о клике и дальше дело техники написать функцию изменение состояния именно этого океана.
Витольдович, сорри. Так мне не понравилась именно эта конкретная реализация, что вот родилось столько букв.