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

Формула программиста
основатель — Волосатов Евгений Витольдович
Большой Новогодний подарок от Игромистра
Безденежный доступ к видеокурсам за Мегахеши

Теория ООП / Интерфейс. VIP. Пересечение прямоугольников.

  • На этом уроке мы допишем метод Box.Поймал()
    и запустим игру с квадратиками.
    Потом попробуем подружить квадратики с кружками,
    увидим, что это не так просто, да собственно и не нужно.
    Но возможно.
  • Дата отправки отчёта: 14 ноября 2015 г.
  • Задание выполнено: за 35 мин.
  • Чему научился: Простому методу проверки на пересечение двух прямоугольников.
  • Что было сложным: Придумать свой метод, который проверяет на НЕ пересечение и тоже работает.
  • Комментарии: Отлично прокачали ООП.
    Спасибо!
  • Оценка видео-уроку:
Отчёт от 6391 за Теория ООП / Интерфейс. VIP. Пересечение прямоугольников.




Оцени работу

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

6391. Владимир
Владимир
ответить
→  Neverwinter 2  # Теория ООП / Интерфейс. VIP. Пересечение прямоугольников. / 2015-11-14 12:42

Спасибо! Я на этих экспериментах завис прямо ;)



  • Отчёт оценивали:
    6391Владимир+1   8138Евгений0   4815Гурбангулы Бердымухамедов0   1232Фомичева Наталья+1   6452Кирилл Шмойлов+1   7226Наталья+1   Посетитель+1   7645Александр Львович+1   7788Ксения+1   8134Всеволод0   4378Александр+1   7795Вадим+1   4889Валера Луцевич+1   1901Neverwinter 2+1   6203Николай (nick27m)+1   6080annaka+1   1947Denis+1   1Евгений Волосатов+1   6458Илья+1   5407Дмитрий 199+1   459Сергей Сергеевич+1   Посетитель+1   Посетитель+1   Посетитель+1  

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Условие пересечения прямоугольников.
Трудности: Сложностей не было.
Поначалу решил, что предложенная в уроке функция проверки пересечения двух прямоугольников рассматривает только один частный случай, слишком уж "простая" она на вид. Однако проверил на практике - работает. Здесь я предположил, что боксики двигаются слишком быстро, поэтому в какой-то момент срабатывает "то самое" частное условие и боксик голится. Я не верил, что это решение корректное. Для полной проверки нужно было замедлять боксики и проверять на глаз пересечения, но мне не хотелось этим заниматься. Я уже хотел было отправить отчет, но тут вспомнил совет Евгения Витольдовича, что следует довести дело до конца. Тут осенило, думаю, дай-ка создам unit-тесты на функцию isIntersect и проверю все возможные варианты пересечений и не пересечений. В итоге, нарисовал на бумаге разные варианты расположения прямоугольников, получалась 31 комбинация, создал для каждой из них свой тест, каждый тест запускал по мере написания и меня каждый раз шокировало, что функция-то работает:D На втором скриншоте показаны результаты выполнения 31 теста, все проходят. Подумал, может в Qt какая-нибудь бага, регрессировал код тестируемой функции, добавил в нее ошибку и тесты посыпались как надо, чудо. В общем, функция Евгения Витольдовича работает как надо. Позже я еще раз логически проанализировал функцию проверки и да, тут уже понял, что код корректен. Первое впечатление оказалось обманчивым, следует внимательно читать код. Хороший урок для меня.
Научился: Очередной алгоритм пересечения прямоугольников. Кто бы мог подумать, что это так делает.
Забыл для прямоугольников наследование от интерфейса в прошлом уроке. В этом нашел. Потом он стал ругаться, что методы Поймал аргументы не те. Стал пересматривать урок и нашел, что в определении интерфейса поменяли object на игрок, а я это пропустил. Тут еще посылку принесли и отвлекли. Потом я еще с этой посылкой возился. Потом игра запустилась, но квадратики немного туда сюда телепались. Долго искал и нашел. if (x < 0 || x > Arena.Range.Width - box.Width) sx = -sx; if (y < 0 || y > Arena.Range.Height - box.Height) sy = -sy; Вместо у во второй строчке были х. Копипаста - враг программиста! (с) мое По логике вещей - надо было сделать так: Круг ведущий - красный. Остальные синие. Прямоугольник ведущий - желтый. Остальные зеленые. (брать противоположные цвета) Проверять я это конечно не буду. Хоть они и пересекаются, но взаимодействовать между собой могут только фигуры одного типа. Получается такая параллельная реальность. Б-г создал один мир и населил его двумя тварями. Хоть они там и копошаться, но друг друга как бы не видят.