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

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

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

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




Оцени работу

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

24. Оля
Оля
ответить
→  Юрий  # Морской флот / Архитектура - Мышкой по кораблям / 2015-08-19 17:17

Юрий, очень хорошие знания приобрел! :)


2146. Иван
Иван
ответить
→  Юрий  # Морской флот / Архитектура - Мышкой по кораблям / 2015-08-19 16:00

Чувствую, что все дается просто. Не хватило мне только иконки, сделайте ее на favicon.ru за 10 секунд.


  • Отчёт оценивали:
    4060Игорь+1  

Начинаем практику по языку 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.
. Думаю понятно, что целевой океан получает информацию о клике и дальше дело техники написать функцию изменение состояния именно этого океана.
Витольдович, сорри. Так мне не понравилась именно эта конкретная реализация, что вот родилось столько букв.
Научился: Созданию делегатов.
Трудности: Создание делегатов.
Все отлично!