ads

Friday, June 10, 2011

Шахматные роботы =)

Поностальгировал. Запустил из-под дос-бокса игрушку, которую я писал в школе еще, в 1998 году. На, прости господи, бейсике. Работает! Роботы ходят, стреляют, шахматные правила там анализируются, даже рекордер есть и проигрыватель.



UPD. 11/Jun/2010.
Из той же оперы первая демка на ассемблере... 2229 байт =) На первом курсе универа.


Можно даже все два килобайта машинного кода распечатать, на страницу a4 поместятся.

Оттуда, мега-крутой алгоритм сжатия картинки =)))

UnPack macro
; Макрос восстанавливает рисунок из сжатого состояния.
mov bx,offset picture
mov si,offset pack
mov dh,y ; Принцип работы:
mov dl,halfx ; Каждая последовательность пикселов
goloop: mov al,[si] ; представляется в виде байта (!)
mov ah,al ; где старшие 4 бита указывают на
mov cl,4 ; длину последовательности, а младшие
shr ah,cl ; - на цвет. Причем цвет надо еще
mov cl,ah ; умножить на 4 чтобы получить весь
and al,0fh ; диапазон (исключая не кратные 4).
shl al,1 ; Таким образом, максимальная длина
shl al,1 ; последовательности = 15, но для
sml: mov [bx],al ; указания последовательности большей
inc bx ; длины можно использовать два байта.
dec dl
jnz nxl
mov dl,halfx ; Процедура оставляет место
add bx,halfx ; в памяти для работы Mirror.
dec dh
jz ext
nxl: loop sml
inc si
jmp goloop
ext: Mirror ; Делаем зеркальное отображение.
endm

1 comment:

  1. Да это вообще шедевр. Мне никогда терпения не хватало оттачивать всё так до деталей. А тут же и рамочки с тенями и фон отделён у роботов, и роботы друг на друга не наступают. И эстетически всё, опять же, очень качественно. И цвета и формы. Я как-то быстро терял интерес к проекту как только чисто технически открывалась возможность и понимание как сделать что-то, что до сих пор составляло изюминку и задачу в проектею

    ReplyDelete