Уточните пожалуйста, еще раз, как вы предлагали. У меня пока в голове должно все уложиться для продолжения работы.
Пока предполагаетсяа такая организация:
Карта фона уровня. Может быть больше окна. Состоит из массива номеров спрайтов размером в 1 клетку (8х8 точек). На карте располагаются стены, проходы, заправки и другие неподвижные объекты.
Из карты уровня копируем в таблицу 1 номера одноклеточных спрайтов фона. В этой таблице будем хранить текущее состояние игрового окна с учетом возможных разрушений объектов. Размер таблицы: 21 строка по 32 клетки.
На основе первоначального состояния таблицы 1 заполняем графикой окно игры. Одноклеточные спрайты располагаются в двух соответствующих областях. BITMAP_1X1 - тут хранится черно-белый рисунок спрайта, по 8 байтов на спрайт. ATTR_1X1 - тут хранятся цвета спрайтов (атрибуты), по одному байту на спрайт.
Для изображения одноклеточных спрайтов на экране возможно будет организован буфер печати спрайтов. Предполагается, что различные подпрограммы в процессе цикла игры могут изменять состояние игрового окна. Например, нужно будет изобразить выстрел, затем стереть следы выстрела, стереть разрушенную стену и т.п. Это может происходить в произвольные моменты относительно положения луча телевизора на экране.
Поэтому, для избежания лишних мерцаний на экране, каждая такая подпрограмма будет только вычислять адрес одноклеточного спрайта и адрес на экране, куда этот спрайт надо впечатать. Затем эти адреса записывать в буфер печати спрайтов. Подпрограмма прерываний будет печатать эти одноклеточные спрайты из буфера.
Положение подвижных объектов типа танков будут хранится в таблице 2. Размер таблицы: 21 строка по 32 клетки. Каждый танк будет занимать в таблице 9 клеток в виде трех строк по три клетки. В этих клетках будет записан номер танка.
При движении снаряда или танка в новом месте проверяются таблицы 1 и 2 на наличие в этой клетке подвижного или неподвижного объекта. Зная номер одноклеточного спрайта фона или номер танка уже можно будет обрабатывать дальнейшие действия ...