Однако пора изложить сценарий игры:

• по прямоугольному полю с постоянной скоростью в вертикальном или горизонтальном направлении ползет змея,

• на поле появляется "пища", которую нужно "съесть", управляя ее движением,

• управлять движением змеи можно только нажатием клавиш со стрелками, поворачивая ее влево или вправо относительно текущего направления движения,

• в зависимости от цвета изображения съеденной пищи длина змеи, отображаемая в левом верхнем углу экрана, увеличивается,

• игра заканчивается как только голова змеи вонзится в границу поля или в туловище,

• цель игрока состоит в достижении наибольшей длины змеи.

Начнем с того, что в отличие от предыдущей игры ЗУ адаптера дисплея обязательно должно использоваться для хранения изображения змеи. В противном случае вряд ли возможно создать приемлемую по быстродействию программу игры. Математическое описание игры в виде формул, разумеется, возможно. Но оно вряд ли поможет программированию этой задачи. В данном случае будет использована имитация объекта игры (и одновременно его отображение) посредством записей кодов символов и атрибутов в массив, образуемый одной страницей ЗУ адаптера дисплея. Имитационный характер математической модели здесь налицо.

Рассмотрим размеры массива, который может быть использован для хранения и отображения математической модели змеи. Из 80 столбцов можно использовать только нечетные с 3 по 79 (итого 39), так как 1 и 80 нужны для изображения границ поля, а изображения туловища при поворотах на 180 градусов не должны касаться друг друга. В связи с тем, что количество строк более чем, втрое меньше количества столбцов, для изображения змеи должны использоваться все строки за исключением первой и последней (то есть 23). Поскольку изображения змеи на соседних горизонталях не должны соприкасаться, для построения горизонтальной части туловища должен использоваться псевдографический символ с кодом 220. Для изображения вертикальной части туловища подходит символ с кодом 219. Эти же символы используются для изображения границ поля. Для изображения границ поля использован красный цвет, для головы змеи — желтый, а для туловища — коричневый. С целью экономии времени движение змеи имитируется добавлением символов со стороны головы змеи и стиранием символов со стороны хвоста. Таким образом удается добиться независимости быстродействия программы от длины змеи.

В начальной части программы производится запись кодов в ЗУ адаптера дисплея для формирования исходного изображения. Запоминаются также начальные значения координат головы и хвоста змеи, ее длина, направление движения и значение счетчика, по которому наращивается ее длина. Циклическая часть программы начинается с отработки задержки по времени около 0,22 сек и проверки нажатия клавиш. (Обратите внимание на то, что для работы со счетчиком времени и с ЗУ адаптера дисплея приходится использовать разные значения кода сегмента). В случае нажатия клавиш со стрелками влево или вправо производится кор-