Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто!


Школа программирования

131) Программирование спрайтовых игр: Делаем арканоид - 2

Сначала немного рекламы.

Вышел мой учебный курс "Технологии Delphi. Разработка приложений для бизнеса".
http://shop.piter.com/book/978591180282/

В книге описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив одну мою книгу, вы существенно сэкономите :) В книге полностью описан язык Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET. Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.

Почему эта книга так названа? Потому что она ориентирована не только на разработчиков, но и на тех, кто хочет стать ИТ-менеджером, или уже стал им и желает развиваться дальше. В каждой части книги (кроме первых, посвященных непосредственно языку программирования Delphi) изучаются технологии, которые можно применить для создания программ, а прогаммирование знать не требуется (или требуется, но на минимальном уровне). Учебный курс дает знания, которые нужны ЛЮБОМУ ИТ-менеджеру как базисный уровень - ведь сложно управлять коллективом разработчиков или ИТ-отделом, не владея соответствующими технологиями - а главное, ключевыми понятиями и терминологией, которые в книге выделены особо. Мой курс в сжатом виде, а также в форме готовых ПОШАГОВЫХ алгоритмов и практических примеров дает базовые знания по всем важнейшим направлениям, связанным с разработкой софта. Ну и повышает общий культурный уровень, позволяя "быть в теме". Вообще в этом учебном курсе примерено множество передовых подходов к подаче материала - он обгоняет существующие ИТ-учебники на пару поколений :)

Полное оглавление книги можно найти по ссылке выше.

В подготовке книги принимал самое активное участие Сергей Симонович, директор издательства "Развитие" (iPress), под редакцией которого она и выпущена издательством "Питер". Книги Симоновича и его коллег вышли в России уже миллионными тиражами.
Поэтому книга отличается особо качественным дизайном :)
Ну и текст, от данной рассылки конечно тоже отличается в лучшую сторону :) (смайликов, правда, нету).

Вот официальная аннотация на мой учебник:
"Книга представляет собой учебный курс для преподавателей и студентов, изучающих разработку информационных систем и программирование на языке высокого уровня. Курс охватывает систему программирования Delphi 2006 и комплекс информационных технологий, реализуемых ее средствами. Операционные платформы курса — Win32 и .NET. Главы книги объединены в восемь тематических разделов. Разделы охватывают: основы программирования на языке Delphi и объектно-ориентированное программирование, работу с базами данных и создание приложений, взаимодействующих с ними, создание клиентских и серверных приложений для Интернета, развертывание многоуровневых приложений, проектирование веб-служб и сервисов. Особое внимание в книге уделено технологиям ускоренной разработки корпоративных бизнес-приложений: шаблонам проектирования, архитектуре, управляемой моделью (MDA), языкам модельного проектирования UML и OCL, технологии ECO. Курс имеет обновленный и расширенный понятийный аппарат, отличается архитектурной целостностью и способностью гибко адаптироваться к реалиям конкретного учебного процесса. Теоретические разделы поддержаны мощным практическим компонентом, который позволяет использовать данную книгу в качестве пособия для дополнительного или самостоятельного образования".

Готовятся аналогичные курсы по C# (сдается в печать) и C++ (выйдет до конца года).


Завершаем арканоид.

Последний выпуск по BlitzBasic был N 124.

Менять направление движения шарика надо в случае, когда x-координата меньше ширины окантовки, или больше максимально допустимой, либо y-координата меньше толщины окантовки.

  if b\Id = 2 then ; шарик!
   
    b\x# = b\x# + b\sx#
    b\y# = b\y# + b\sy#
    
    if (b\x# < 10) or (b\x# > 630) then b\sx# = -b\sx#
    if (b\y# < 10) then b\sy# = -b\sy#

   DrawImage b\obj, b\x#, b\y#
   end if

Теперь шарик будет отражаться от стен.

Следующий шаг - отражение шарика битой. В принципе можно хранить биту (объект типа TBrick с значением 3 идентификатора id) в отдельной глобальной переменной, но нам в любом случае придется просматривать все без исключения экземпляры типа TBrick, чтобы проверить, нет ли коллизии шарика с каким-то кирпичиком. В этот цикл мы и включим проверку на коллизию шарика с битой (этот цикл вложенный! он выполняется внутри схожего цикла, где текущий элемент хранится в переменной b).

     for bb.TBrick = Each TBrick

  ; не проверять сам-с-собой и смотреть только соприкоснувшиеся
  объекты

      if (bb\n <> b\n) and ImagesOverlap (bb\obj,bb\x#,bb\y#,
  b\obj,b\x#,b\y#)

  ; если столкновение с битой...
          if (bb\id = 3) then

  ; изменить y-составляющую скорости на противоположную
              b\sy# = - b\sy#
         end if

     end if

   Next

Аналогичным способом проверяется и столкновение с кирпичиками. Однако практика показывает, что в ситуациях, когда шарик движется сверху вниз и натыкается на низлежащие кирпичи или биту, расположенную внизу, простая проверка на коллизии не всегда срабатывает правильно (точнее, из-за высокой скорости объектов ее возможности не отвечают нуждам разработчика). Поэтому желательно ввести дополнительную проверку - если объект выше, то вектор скорости должен быть направлен вниз, и наоборот:

      if (bb\n <> b\n) and ImagesOverlap (bb\obj,bb\x#,bb\y#,
  b\obj,b\x#,b\y#)

          if (bb\id = 3) or (bb\id = 1) then ; бита или кирпич

  ; доп.проверка взаиморасположения
            if ((bb\y# < b\y#) and (b\sy# < 0)) or ((bb\y# > b\y#) and (b\sy# >
  0)) then
              b\sy# = - b\sy#
            end if

         end if

     end if

В заключение нам остается добавить команды уничтожения кирпичика при попадании в него шариком.

  ...
          if (bb\id = 3) or (bb\id = 1) then
            if ((bb\y# < b\y#) and (b\sy# < 0)) or ((bb\y# > b\y#) and (b\sy# >
  0)) then
              b\sy# = - b\sy#
            end if
     
  ; если кирпич - удаляем
            if bb\id = 1
              FreeImage bb\obj
              Delete bb
              Exit
            end if

         end if

Обратите внимание на команду Exit в последнем условном операторе - важно всегда сразу выходить из цикла перебора значений некоторого типа (цикл For ... Each), если была выполнена команда уничтожения объекта, так как после нее перебор объектов может проходить некорректно.

Задание.
Добавьте в тип TBrick новое поле, определяющее прочность кирпичика. Кирпичик будет исчезать, только когда его значение снизится с начального до нуля. Значение поля понижается при каждом контакте с шариком. При этом нужно изменять внешний вид кирпичика - в команде DrawImage дополнительно выбирайте номер подходящего спрайта (как уже говорилось, спрайт кирпичей содержит несколько образов, так как загружался командой LoadAnimImage).

Необязательно.
Добавьте в программу еще один вид объектов - бонусы, которые могут динамически создаваться в момент удаления кирпича. Они падают вниз и при соприкосновении с битой приносят, например, дополнительные баллы. Также измените величину x-составляющей шарика в зависимости от точки биты, с которой произошло столкновение (ближе к краю - острее отскок).


(c) 2004-2006 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное