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

Формула программиста
основатель — Волосатов Евгений Витольдович
Вебинар «Yii + PHP = Завершение» начнётся через 1 час. 35 мин.

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

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




Оцени работу

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

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

Дмитрий!!! Какая прелесть! Молодец! Я очень рада видеть твой красивый отчет,  вот так обрадовал! :) ⭐️



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