Для тех, кто читал статью в песочнице: добавил раздел «Можно ли сделать игру меньше?».
Прочитав
историю одного байта, вспомнил свою историю.
Когда я учился в школе и только начинал программировать меня очень привлекал ассемблер и оптимизация. А именно — кропотливая оптимизация, с подсчетам тактов и байтов. На летних каникулах у меня с двоюродным братом появилась идея написать самую маленькую игру в мире.
Первый прототип, размером 80 байт, был готов на следующий день. (Поскольку о контроле версий тогда я даже не догадывался, то остается верить воспоминаниям). С этого момента началась моя борьба за байты. Помню, довольно быстро размер был уменьшен до 65 (или около того), дальше каждый байт давался все с большим и большим трудом. К концу лета результат был 58 байт.
Сюжет и управление
Вы несетесь по трассе на грузовике с двумя прицепами. Слева от вас разделительная полоса, справа обочина укрытая травой. На дороге встречаются люди и деревья (может ямы). Ваша задача: не сбивать людей и не врезаться в деревья (не попадать в ямы).
Управление: стрелки влево-вправо — поворот; Esc — пауза.
Скриншот
Исходный код
begin:
; ds указывает на видеопамять
push 0b800H
pop ds
; установить графический режим 40×25
int 10H
; bx = 700H - смещение, по которому находиться грузовик
mov bh, 7H
main_loop:
; Задержка и вывод грузовика на экран
xchg cx, ax ; mov ah, 0
int 1AH
mov [bx], dl
delay:
int 1AH
cmp [bx], dl
je delay
; si - смещение следующего препятствия
xchg ax, si
add al, dl
xchg ax, si
xchg ax, cx ; mov cx, 0
; Получение нажатой клавиши
in al, 60H
cmp al, 77
jnz keytest1
; вправо
inc bx
inc bx
keytest1:
; влево
ja keytest2
dec bx
dec bx
keytest2:
; очистка буфера клавиатуры
mov ah, 0CH
int 21H
; скролл экрана на 1 строчку
mov ax, 0701H
mov dx, 1827H
int 10H
; вывод препятствия
mov [si], ax
; вывод травы и разделительной полосы
mov [di+51], dx
; проверка что перед грузовиком нет препятствий
cmp [bx], dh
ja main_loop
ret
Архив с исходником и бинарником (для компиляции использовался Tasm)
Комментарии
В XP программа работает, но таймер работает не гладко и сначала не обнулено состояние клавиатуры. В DosBox'е работает без проблем.
В исходнике, две инструкции (push 0b800H и mov [di+51], dx) записаны в машинном коде (db 68H, 00H, 0b8H и db 89H, 55H, 51H), это связано с тем, что Tasm их не воспринимал в режиме компиляции по умолчанию. По-моему он требовал включения инструкций x386, хотя могу и ошибаться.
Можно ли сделать игру меньше?
Скорее всего — да. Много места занимает прокрутка экрана (8 байт) и задержка (10 байт). Если поменять направление движения (препятствия надвигаться снизу вверх), то скролл можно заменить быстрым выводом символа перевода строки (
mov al, 0Ch; int 29h). Задержку можно заменить проверкой состояния двойного слова по адресу 0040:006Сh. Там должен находиться счетчик отсчетов таймера с полуночи (Timer ticks since midnight).
UPD: Спасибо! Перенес в блог «Ассемблер»
UPD2: Imp5 подсказывает, что я не совсем прав. Shifticida — игра для двоих игроков, которая занимает 32 байта. Так что правильное название топика: «Самая маленькая гоночная игра в мире»
комментарии (131)
По-хорошему, програмеры разных микроконтроллеров порой тоже весьма зажаты в байтах…
Кстати, пустая SWF-ка, в которой ничего нет, занимает 36 байт.
программа на WPF занимает 20кб, но что бы ее запустить нужно .netFramework 3.5 который весит 200мб :)
Хотя Am486SX в PQFP возможно ещё легче был.
Таких людей осталось мало, и скоро, к сожалению, совсем не будет. Vale!
например, моя программа ExactMouse для win32 написана на Ассемблере (-:
Графика, конечно, не как в .kkrieger, но и места занимает в полторы тысячи раз меньше. Респект.
такие как siemens и sony ericsson с поставленным на них эльфпаком
Это копия (клон, как нынче модно говорить) нинтенды.
ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D0%BC%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8%D0%B3%D1%80%D1%8B_%D1%81%D0%B5%D1%80%D0%B8%D0%B8_%C2%AB%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0%C2%BB
Можете минусовать, но правда именно такая :)
Сам ссылку поставил, а толком не вчитался — виноват:)
Это была байка такая, не знаю, факт или нет: собрали мобильник полностью из российских деталей. Получился агрегат весом 950 грамм.
www.3dnews.ru/auto/glospace_sgk_70/
На уссурийского тигра ВВП надел ГЛОНАСС-передатчик, чтобы всегда знать, где находится это редкое животное. Теперь все знают, где тигр — там, где его с передатчиком оставили, т.к. передвигаться с ним он уже не может.
www.youtube.com/watch?v=O0gAgQQHFcQ
Поставлю всем плюсов…
В ячейку Х вводилось число 555555.
В ячейку Y вводилось число 222222.
Затем, нажимая на кнопку таб, собственно можно было начать наблюдать игру: «Танцующие змеи»:
Помню как в одном журнале увидел программу для МК-61 играющую в игру «Бридж», и при этом занимающую то ли 8, то ли 16 байт. Другой аналог этой программы занимал более 100 байт, и играл гораздо медленее и хуже.
F Прг
01.5 02.5 03.5 04.5 05.5 06.5 07.5 08.5
09.B↑
10.2 11.2 12.2 13.2 14.2 15.2 16.2 17.2
18.(F ¤)
19.(БП 18)
F Авт
В/О
С/П
Самой большой неприятностью казался однострочный экран. «Эх, а вот с многострочником я бы наворотил!» — главная мысль того времени.
А потом уже появилась какая-то из «Электроник»-клонов «Спектрума». До сих пор дома пылится, кстати.
шютка, респект.
зы: про подтормаживает — я не шучу
Очень хочется еще подобных топиков. Что бы не только старички вздрагивали, в хорошем смысле, но и юные дарования задумывались о «настоящем»…
В тот момент, когда я заканчивал свой килобайтный 3д движок, мне показали 4кб демку Меша (названия точно не помню, но в архивах должна где-то быть) — 10 минут 3д сцен и музыки. Она убила мою веру в себя.
я когда ее в первый раз увидел — долго смотрел на свой комп и думал, как это вообще возможно )) потом понял
на самом деле советую скачать некоторые демки, которые распространяются вместе с сорцами, там много интересного
Впрочем, любителям этой темы стоит основательно покопаться в архиве демосцены. Особого внимания заслуживают конкурсные работы с демо-пати Assembly, Breakpoint, The Gathering и почившей в бозе Mekka & Symposium.
это история
я уже и не сосчитаю, сколько я оттуда скачал и насмотрелся
вот умеют же некоторые с компом обращаться!
да и сейчас тоже запустил, посмотрел, нет слов…
Есть две программы, выполняющие одно и то-же(объем проделанной работы) первая — 50 байт, вторая — 100, соответственно первая выполняется за 50 тактов, вторая за 100 (если считать одна команда — один байт). Какая программа быстрее и, соответственно, у которой
больше производительность?
2. Выбрать игру.
3. Играть.
до для такого размера файла — простительно
Интерестно было потыркаться… Молодость всполмнил…
«Но это время прошло, но это было давно,
Теперь y каждого нудной работы полно,
И заказчик-дурак тычет мышкой в картиночки гордо...»
…
"… Теперь нам лень изощряться, оптимизировать код,
И интерфейс с дураками мы пишем из году в год,
Свыклись с мощной машиной, отвыкли от всякого риска.
Забыли коды команд и старых трюков запас..."
Удачи автору!
www.pouet.net/prod.php?which=50234&howmanycomments=100
К слову, минус ставил не я.
Так вот, Dr. Max — это я (;
а k.y.k. мы писали с моим однокласником. так сказать «на перегонки». модемов тогда ещё не было в нашей деревушке, по этому мы активно менялись дискетами в классе (боже мой, сколько всего интересного влезало в эти 1457664 байта! Умопомрочительно!).
Я сделал первую версию весом байт в триста. Серёга на следующий день принём версию в 280 или около того… я сдела 188… он ответил на это 128 байтами… кончилось тем, что я упаковал это в 37.
до сих пор с умилением вспоминаю эти дни… (;
Сейчас доделаю кой чего по дому и может выложу куда архивчики этих забавных древностей (если компашка с бэкапом не накрылась).
p.s. Кто этот Pirx и откуда он взял мою игрушку и инфо о ней? ооочень интересно… (8
не смотрите на даты, там небольшой косяк с ними. по идее всё это происходит в 1997 году (может осенью, а может весной). из-за этого же косяка очень сложно восстановить порядок в котором они были написаны. но, подозреваю что чем меньше получаемый комок, тем более поздняя это версия. (8
narod.ru/disk/10887439000/kyk_history.tar.bz2.html
сейчас поставлю себе dosbox и буду смотреть чего там ещё есть в этом архивчике (а там что-то уж сильно дофига всего :)
Только вот очень обидно, что не сохранились серёгины версии. Хоть и без исходников, но всё равно забавно было бы поизучать.
Но теперь, думаю, что можно и меньше сделать ;)
Или разработчикам LinkedIn, который написан на Java.
И вообще, только вот грязи не надо.
Я тоже начинал с MK-52 и с журналом «Техника-Молодежи», кстати, очень помогло в институте на информатике (сразу посадили самостоятельно изучать… хм… бейсик на Ямахах, он кстати от Майкрософта был) и ..., вы не поверите — астрономии! Дали задание: кто напишет самую короткую программу для преобразования сферических координат — вот тогда пятерку я этим себе честно заработал.
А еще был такой ПК «Вектор», кстати, нравился он мне больше чем БК, т.к. там аж целых 32Кб было под видеопамять выделено, а это 256*256*16 из 256 возможных цветов… предел мечтаний! :) Правда видеопамять там была по уродски устроена, постраничная, цвет пиксела складывался из битов расположенных друг от друга на расстоянии 8 Килобайт. И чтоб одну точку поменять, надо было 4 байта изменить, но зато благодаря такой организации памяти можно было видеопамять под данные отдавать за счет уменьшения битности цвета…
А игруху я писал, это я в тетрадке, по тактам процессора рассчитывал, насколько та или иная процедура на ассемблере будет более быстрой для вывода спрайта. «Профилирование» кода в тетрадке… :)
И дисковода не было грузился с магнитофона, загрузишь с магнитофона ассемблер, напишешь, сохранишь на кассету исходник, скомпилируешь, скинешь на кассету, выгрузишь ассемблер, загрузишь что скомпилировал, потестируешь… и все по новой — романтика!
А сейчас? Столько возможностей, пиши на чем хочешь, для чего хочешь! И порой думаешь: эх, молодежь нынче ленивая стала — им сейчас все на блюдечке с голубой каёмочкой, а они — лентяи, ничего делать не хотят! Но вот только сейчас от всего этого IT изобилия я периодически испытываю настоящий шок — так все быстро меняется, появляется так много новых технологий, что только успеешь освоить одну, как она уже устаревает. Поэтому и молодежи сейчас даже видимо тяжелее, чем нам, они другие сейчас так как время сейчас другое…
Вспоминаю FORTH :)