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

Формула программиста
основатель — Волосатов Евгений Витольдович
1-2-3 мая - Создай online игру!
Вебинар «Карточки памяти на Android» начнётся через 1  день 15 час. 35 мин.

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

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




Оцени работу

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


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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: продолжил работать с делегатами
Ну не согласен я с таким применением делегатов. Все то преимущество и ту простоту, которое дает механизм делегатов при таком раскладе превращается в запутанное сложное спагетти. Ну ладно, Бог с ним, по каким то религиозным соображениям Витольдович не хочет применять события си шарпа (хотя здесь бы функционал собятия пригодился бы). Но уж больно на костылях как то все получилось прикручено, да еще и не туда. Позвольте мне нескромно предложить свою скромную версию:
Во первых, в чем суть расклада - нам нужно информацию о клике мышкой (какой океан, какая клетка) передать в нужный океан и изменить состояние связанных с ним данных. Сразу вопрос: при чем тут 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.
. Думаю понятно, что целевой океан получает информацию о клике и дальше дело техники написать функцию изменение состояния именно этого океана.
Витольдович, сорри. Так мне не понравилась именно эта конкретная реализация, что вот родилось столько букв.
Научился: 1. Инициировать щелчок мыши в классе 2. Прокачал знания по делегатам 3. Научился организовывать делегат в форме, и обращаться к нему из класса 4. Узнал функцию parentCollection.Remove()
Трудности: Сложностей не возникло
Этот урок был для меня сплошь из новизны. С делегатами я до этого работал, но чтобы назад из класса в форму...очень элегантно получилось. Не перестаю удивляться возможностям си-шарпа. На скрине у меня промахи - зеленые крестики, а попадения - вспышки-взрывы в звездном небе. Параллельно придумываю, как реализовать это анимационно. Ну что же, со стороны Альянса стрельбу реализовали, теперь пора перейти к созданию Звезды Сме... ой, простите, к созданию Сервера управления "огневой потехой".