https://habrastorage.org/webt/eu/a6/...u0cnzj617w.png
Первую версию змейки я написал за пару часов, и весила она чуть больше 150 байт. Я вспомнил про статьи в электронном журнале и захотел побить рекорд. Следующая версия уже весила 100 байт, но и потраченное время разработки перевалило за 6 часов. Остановившись на этом, показал свою версию игры, а начинающий программист – свою, и после я забыл об игре на некоторое время.
Разбирая папку со своими проектами и исходниками, я наткнулся на исходный код своей Змейки и понял, что код можно немного модифицировать и сократить еще на пару байт. Процесс оптимизации занял целый день, а сокращение составило только 5 байт. В итоге игра стала весить 95 байт.
- 59 строчек кода без комментариев
- Полная релоцируемость программы (размещение в любой адрес без перекомпиляции)
- Не используется стек
- Используется только основной набор регистров: a,b,c,d,e,h,l и r как генератор случайности
- Без использования процедур ПЗУ
- Честная инициализация экрана и бордера
- Классическое управление клавишами: 6,7,8,9 (Sinclair Joystick)
- Каждую инициализацию псевдослучайным образом расставляться кролики
Исходный код:
Скрытый текст
Код:org #8000
begin ld de,#598f;snake xy
ld hl,#5aff
ld b,l
ld c,l
;---
rabbit1 ld (hl),b
ld a,r
cp l
jr z,rabbit2
inc (hl)
rabbit2 dec hl
bit 3,h
jr nz,rabbit1
ex hl,de
;---
l1 xor a
out (#fe),a
clr ld (de),a
dec de
bit 6,d
jr nz,clr
;---
ld (hl),33
ld d,#5a
move1 ld a,(de)
dec a
cp 254
jr nc,move2
ld (de),a
move2 jr nz,move3
dec (hl)
move3 dec de
bit 3,d
jr nz,move1
;---
ld a,#ef
in a,(#fe)
rra
rra
jr c,$+5
ld bc,#ffe0
rra
jr c,$+5
ld bc,#0020
rra
jr c,$+5
ld bc,#0001
rra
jr c,$+4
ld b,e;ld bc,#ffff
ld c,e
;---
ld a,(hl)
and %00100000
add hl,bc
or (hl)
inc a
cp 7
jr nc,begin
ld a,h
inc a
and %00000011
jr z,begin
jr l1
[свернуть]
более подробно можно почитать на хабрахабр

