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

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

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

  • На этом уроке мы научимся по щелчку мышки стрелять по кораблям.
    Для этого нам понадобится создать обработчик MouseClick,
    и подцепить его к каждой картинке. Используя делегаты
    мы будем свистать всех на верх - до класса Form1,
    из которого будем спускаться по иерархии опять вниз,
    для пометки выстрела и отображения его на карте.
  • Дата отправки отчёта: 22 августа 2015 г.
  • Задание выполнено: за 1 час. 15 мин.
  • Чему научился: продолжил работать с делегатами
  • Что было сложным: см. отзыв
  • Комментарии: Ну не согласен я с таким применением делегатов. Все то преимущество и ту простоту, которое дает механизм делегатов при таком раскладе превращается в запутанное сложное спагетти. Ну ладно, Бог с ним, по каким то религиозным соображениям Витольдович не хочет применять события си шарпа (хотя здесь бы функционал собятия пригодился бы). Но уж больно на костылях как то все получилось прикручено, да еще и не туда. Позвольте мне нескромно предложить свою скромную версию: <br>
    Во первых, в чем суть расклада - нам нужно информацию о клике  мышкой (какой океан, какая клетка) передать в нужный океан и изменить состояние связанных с ним данных. Сразу вопрос: при чем тут Form, зачем нам его в это впутывать? Так и сказал кто то из курсантов, делегат должен вызывать методы экземпляров класс океан. Как океаны должны узнавать что это относится именно к этому конкретному океану - это уже другой вопрос. Собственно для этого и существует механизм "издатель - подписчики". <br>

    Итак. <br> 1. Где угодно вне класса объявляем наш делегат.
    <br> 2. В классе PictureBox объявляем статический экземпляр делегата: public static deBoxClicked deClick;
    <br> 3.  Там же: 
    <br> private void Box_MouseClick(object sender, MouseEventArgs e)
            {
                deClick.Invoke(place, mapx, mapy);
            }
    <br> 4. В классе Ocean в функцию Create добавляем в конец:
    public void Create()
            {
               
                ..............
                Box.deClick += BoxClicked;
            }

    <br> 5. Там же в классе Ocean: 
    public void BoxClicked(int place, int mapx, int mapy)
            {
                if (this.place == place)
                    MessageBox.Show("я " + title + " океан. " + "Я знаю, что щелкнули по МОЕЙ клетке " + " " + mapx + " " + mapy);
            }
    <br> Результат манипуляций на скриншоте 1.
    <br>. Думаю понятно, что целевой океан получает информацию о клике и дальше дело техники написать функцию изменение состояния именно этого океана.

    <br> Витольдович, сорри. Так мне не понравилась именно эта конкретная реализация, что вот родилось столько букв.

  • Оценка видео-уроку:
Отчёт от 4342 за Морской флот / Архитектура - Мышкой по кораблям


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




Оцени работу

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

1. Евгений Витольдович
Евгений Витольдович
ответить
→  Алекс  # Морской флот / Архитектура - Мышкой по кораблям / 2015-08-22 21:17

Спасибо. Напиши мне в скайп. Обсудим. Chm497


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

Алекс, здорово как ты в этих делегатах уже разбираешься! Молодец! :)



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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Использовал делегат для прикрепления события MouseClick к классу Box. Теперь по клику мышкой на каждом отдельно созданном Box-е срабатывают функции, которые рисуют соответственно картинку: попал - мимо!
Трудности: Пропустил момент присвоения переменной типа делегата имени функции. Из-за этого долго ломал голову, почему не работает программа.
Нормально
Научился: Научился работать с делегатами.
Трудности: Ничего
Спасибо за урок!