ПОНЯТНО О Visual Basic NET (том 3)

       

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


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

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

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

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

Кроме шаров и ловца импульсам таймера у нас в проекте подчиняется счетчик времени на форме. Но его делать объектом мы не будем, он слишком прост. Вот если бы мы захотели его усложнить, заставив вести себя по-разному в зависимости, например, от собственных показаний (мигать, менять цвет, выдавать сообщения), тогда дело другое.



Содержание раздела