В первый раз я увидел компьютер, когда учился в школе. Наш класс повели на экскурсию в университет, где стояли большие вычислительные машины, у которых вместо дисков былы бобины с магнитной лентой.
Как сейчас принято говорить, эти машины были облачной инфраструктурой, когда это ещё не было модно. Пользователи подключались к центральному компьютеру через терминалы. На одном из таких терминалов нам показали игру. Конечно, там не было никакой графики. Сверху экрана бегали плюсики или какие-то подобные значки. Это были тараканы. А снизу располагался нолик или вроде того. Это был тапок. Нажав на клавишу "пробел", нужно было запустить тапок вверх и попасть в какого-нибудь таракана.
После этого я твердо решил, что буду программистом. Меня увлекала игра, но ещё больше увлекала возможность самому написать её. Поэтому, когда я играю в игры, мне доставляет двойное удовольствие (или неудовольствие) наблюдать за тем, как они сделаны.
Потом компьютеры появились и у нас в школе. Это был класс УК-НЦ ("Учебный Класс Научного Центра"), с машинами Электроника МС 0511, которые по тем временам были не только очень неплохи, но даже весьма продвинуты.
Преподавали нам язык Бейсик, и меня сразу же заинтересовали его графические возможности. Я чертил на миллиметровой бумаге рисунки, а потом, высчитывая координату каждой точки, переносил их в компьютер, и на экране рисовались линии. Это было сложно и долго, и часто из-за одной случайной ошибки или из-за зависания машины приходилось начинать всё заново. Кроме того, я не мог сохранить эти программы, а только наблюдать результат, пока урок не кончился. Но меня радовало и это. Иногда я даже уходил с уроков, приходил на чужие уроки информатики и сидел там за компьютером тихо, не отсвечивая, делая то, что мне надо.
По большому счёту, уроки программирования в том виде, в котором их давали, были мне не нужны. Я постоянно спрашивал что-то у учительницы, и в конце концов она дала мне толстое, отпечатанное на матричном принтере "Роботрон", руководство по УК-НЦ, где были описаны все команды Бейсика. Я прочёл его за один вечер. Азарт и юная память сработали так, что все эти команды я с первого раза усвоил наизусть, и я просто разрывался от того, какие возможности открывались.
Моим фаворитом стала команда INKEY – для получения кода нажатой клавиши без ожидания. Это основа для динамических интерактивных игр. Вторым фаворитом стала команда LOCATE – для установки курсора в нужную позицию на экране. С помощью неё стало возможным печатать на экране любую псевдографику для отображения игрового состояния.
Ну а про графику я и так уже знал.
Тогда я и написал свою первую игру. Каждый раз кажется, что я придумал её сам, но очевидно, что эти были те же самые тараканы, которых я увидел в первый раз. Только изменился сеттинг: теперь это была лунная станция, с которой должна была взлететь ракета. Но ей мешали пролетающие сверху метеориты (аналог тараканов). Эти метеориты нужно было сбивать из лазерной пушки (аналог тапка). Геймплей не изменился: нужно было вовремя нажать на пробел, чтобы сбить метеорит.
Я сразу столкнулся с недостатком графической производительности. Все графические операции в Бейсике выполнялись слишком медленно. Даже несмотря на то, что метеорит был просто белым прямоугольником, при движении было видно, как он перерисовывается, что создавало неприятный эффект. Тогда я пошел на хитрость и стал двигать метеорит по частям: сначала спереди пририсовывал немного, потом сзади стирал немного. Так как не надо было перерисовывать целый метеорит, рисоваться стало быстрее и выглядеть это стало гораздо плавнее.
Что касается лазерного луча, то я просто рисовал вертикальную линию. Для определения того, попал луч в метеорит или нет, я выбрал самый наивный способ. Следовало бы, например, сравнить координаты метеорита с координатами луча и выяснить, находится ли луч внутри координат метеорита. Но вместо это я просто проверял содержимое экрана над лучом. Если там был черный цвет – то метеорита там нет, если белый цвет – то метеорит там есть. Так, сам того ещё не зная, я применил метод "от пространства". Пространством был сам экран.
После того, как игрок сбивал нужное количество метеоритов, на экране с помощью всё той же графики рисовались цифры обратного отсчета, раздавались гудки (команда BEEP), и ракета взлетала. Её, конечно, тоже пришлось дорисовывать по частям. Так как в отличие от метеорита она имела сложную форму, то просто пририсовать к ней прямоугольник было нельзя, поэтому дорисовывалась она более сложным способом, который был ещё медленнее. Из-за этого ракета передвигалась всего по 1 пикселу вверх, то есть летела слишком медленно, но меня устроило и так.
Потом я узнал, как работать с видеопамятью напрямую, и вся жизнь изменилась. Но это уже другая история.