Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual Basic. Самоучитель для начинающих.2001.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
7.67 Mб
Скачать

7.2.Игра "Сачок". Постановка задачи

Давайте создадим такую игру:

Как только проект запущен, из места старта на столе разлетаются во все стороны со случайными скоростями и в случайных направлениях 10 шариков. Они ведут себя как биллиардные шары на столе. Ударившись о бортик, любой шарик отскакивает по закону отражения. Примечание: Для удобства программирования я назвал по-разному 4 бортика: пол, потолок, стены. Трения нет - и шарики могут бесконечно кататься по столу. Для простоты я не стал программировать соударение шариков между собой, хотя это вполне можно было сделать. Поэтому шарики при столкновении просто пролетают друг сквозь друга. На поле присутствует Ловец (которого раньше я хотел назвать "Сачок", причем в обоих смыслах). Ловцом управляет с клавиатуры игрок. Ловец может двигаться с постоянной скоростью в 4 направлениях: вверх, вниз, влево, вправо, подчиняясь соответствующим клавишам клавиатуры, а также стоять (клавиша Ctrl). Каждый раз, когда ловец соприкасается с шариком, шарик исчезает (он пойман). Задача игрока - побыстрее поймать все 10 шариков. Счетчик времени (импульсов таймера) замирает в момент поимки последнего шарика, чтобы вы могли запомнить результат. При нажатии на кнопку "Начинай сначала" игра начинается сначала. Вот и все.

Что здесь будет объектом? Несмотря на то, что у нас нет опыта, интуиция подскажет нам. Конечно же, шары и ловец.

7.3.Таймер и общая механика работы проекта

Теперь давайте продумаем общую механику работы проекта. Она, в общем, напоминает механику работы проектов "Будильник" и "Гонки". Если вы подзабыли эту механику, обязательно перечтите 7.3 и 8.3. Там я писал, что важную роль в моделировании на компьютере согласованной работы разных механизмов играет таймер, который своими импульсами синхронизирует работу этих механизмов (объектов). Конкретно, очередной импульс таймера "будит" по очереди все эти объекты, каждый из которых выполняет весь цикл своей жизнедеятельности, то есть все свои действия, которые положено выполнять при приходе импульса, после чего "засыпает" до следующего импульса. На следующем импульсе таймера все повторяется снова. Поскольку импульсы следуют друг за другом с большой частотой, создается впечатление непрерывной и одновременной работы объектов (несмотря на то, что они все "бодрствуют" по очереди).

Посмотрим, как применить эту идеологию к нашему проекту. В игре 11 объектов: ловец и 10 шаров. Имеется 1 таймер. Он непрерывно на протяжении всей игры посылает импульсы с частотой 18 импульсов в секунду. Вот игра началась. От таймера пошел 1-й импульс. Оживает 1-й шар, "осознает себя, как объект", заглядывает к себе внутрь, запускает всю свою механику и выполняет все, что ему положено в данной обстановке. В начале игры это означает, что он сдвигается на некоторый шаг от точки старта. Выполнив все свои дела, он "засыпает" и "просыпается" 2-й шар, который тоже делает все, что ему положено (сдвигается), и "засыпает" и т.д. Когда засыпает 10-й шар, просыпается ловец и тоже выполняет все, что диктует ему его механизм, в частности смотрит, не нажата ли клавиша на клавиатуре, и в зависимости от этого сдвигается или остается на месте. После чего засыпает. Все. Все объекты сделали свои дела и спят до прихода 2-го импульса от таймера. Вот пришел 2-й импульс. Просыпается 1-й шар, все делает (сдвигается еще на шаг в том же направлении) и засыпает, просыпается 2-й шар и так далее.

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

Обратите внимание, что таймер ничего не говорит объектам о том, что они должны делать, они знают это сами, так как это запрограммировано в их процедурах. Таймер всего лишь будит их через равные промежутки времени.

Кроме шаров и ловца импульсам таймера у нас в проекте подчиняется счетчик времени на форме.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]