Первую версию змейки я написал за пару часов, и весила она чуть больше 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[свернуть]
более подробно можно почитать на хабрахабр