а зачем нужны хобеты-то для этого?? просто обычные файлы.
Вид для печати
Вся соль в том, что бы грузить стандартные файлы прямо с фатов, не используя костыли типа образов диска.
дык хобета и есть костыль! образ хоть и не диска, но файла на диске, с лишней инфой. желание чтения простых файлов - это-то понятно.
Делайте уже на стандартном Басике с УДГ через DATA. Так будет ТРУ!
UPD: запустил, написал пару строчек на Басике, аж слеза пробила :) Может вам какую пену подкину, для массовки :)
Впомнил игру на басике в которую давно рубался http://www.worldofspectrum.org/infos...cgi?id=0005140
Вот как выглядит движок на одном бейсике. Тут нет ничего, только опрос клавы (QAOP) через INKEY$ и вывод 4 символов через PRINT. Скорость отсутствет, чтобы перегнать спрайт в правый край нужно зажать кнопку вправо секунд на 5. Можно чуть оптимизировать стирание (старая и новая области всегда перекрываются), но значительного выигрыша это не даст.
Вот уж действительно только пошаговые стратегии делать.
можно разрешить только процедуру вывода спрайтов, причем только одну утвержденную реализацию.
Если разрешить в маш.коде вывод спрайтов - победит один участник, если разрешить вывод эллипса - другой, если 3D-box-а, то третий. Если музыку, то четвёртый. Так что конкурс нужно проводить так: сначала жюри определяет победителя, потом разрешаем то, что нужно ему, потом устанавливаем сроки, все пишут игры, и объявляется победитель. :)
Ну вы блин даете
учитесь как народ игры писал в 1985 году
На чистом басике.
а мне в юности вот эта нравилась http://www.worldofspectrum.org/infos...cgi?id=0005628
Я наоборот полночи ворочался, идей в голову полезли. Да, Барсик медленный... но там много фич есть. :wink:
Вот только со временем хз как будет.
По выводу спрайтов/заливке - не стоит. А то еще чего-нить захочется сразу же. :cool_std:
---------- Post added at 11:03 ---------- Previous post was at 11:00 ----------
...потому что сделано фигово. Я могу в пару раз быстрей сделать, но не скажу как. :wink:
Написано, в целом - не очень оптимально. Все "сьедают" операторы GO SUB , ненужные пересылки между переменными с длинными именами и логические операторы.
Не сильно выигрывая в скорости, можно написать это же кусок, намного проще.
Весьма неплохо, если делать скидку на бейсик. Хотя, для 85 года - не очень играбельно, в 82-83 еще может быть.
Бука, быстро и просто. Одно НО: при перемещениии, спрайт "моргает" как ненормальный.
Мужики, погодьте, мы ж не выводилку одного спрайта пишем, а движок. В мой код без изменения структуры и логики легко всандаливается управляемый компьютером персонаж. Для того и подпрограммы, для того и "лишние" переменные.
Вариант с большими массивами, но с выбором управления. :)
USR это функция, которую можно прикрутить к любому оператору использующему числовые операнды. Например можно легко сделать BORDER USR XXXXX, или DIM A(USR XXXXX). Единственное, почему для вызова процедур в кодах используется RANDOMIZE - отсутствие влияния на выполняемую программу в бейсике, в то время, как все остальные операторы будут принимать за значение содержимое пары BC по выходу из процедуры. Если же выход из кодов не планируется, то можно вовсе намудрить что то вроде LIST USR или #OPEN USR.
Черта лысого! Команда RANDOMIZE n задает начало последовательности для оператора RND. Что в некоторых случаях делает ее и без того "не совсем случайной".
Если на выходе из кодовой процедуры в ВС будет "лежать" значение, которое не переваривает оператор - получим остановку с выводом сообщения об ошибке.
Если уж, так хочется, можно для этих целей использовать локальную переменную, значение, которой не критично на данном участке программы (к примеру, переменную "отработавшего" цикла): LET z= USR n
---------- Post added at 19:07 ---------- Previous post was at 19:04 ----------
Пойду писать игру на бесике... ;)
Предлагаю опрос клавиш повесить на прерывания, и из массива брать переменные состояния нажатий клавиш. Иначе перекрёстное нажатие клавиш не получится красиво реализовать.
#00 - клавиша нажата
#FF - клавиша не нажата.
Вот, держите процедурку:
Код:ORG #8000
KEYS_ISR:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD HL,KEY_MAP
LD DE,KEY_MAP+1
LD BC,40
LD (HL),L
LDIR
LD B,40
LD HL,KEY_MAP
LD DE,KEYTAB
SCANLP LD A,(DE)
IN A,(#FE)
INC DE
EX DE,HL
AND (HL)
EX DE,HL
INC DE
JR Z,$+4
LD (HL),#FF
INC HL
DJNZ SCANLP
POP AF
POP BC
POP DE
POP HL
EI
RET
KEYTAB DB #FD,1 ;#14
DB #7F,16 ;#23
DB #FE,8 ;#21
DB #FD,4 ;#16
DB #FB,4 ;#0C
DB #FD,8 ;#17
DB #FD,16 ;#18
DB #BF,16 ;#19
DB #DF,4 ;#11
DB #BF,8 ;#1A
DB #BF,4 ;#1B
DB #BF,2 ;#1C
DB #7F,4 ;#25
DB #7F,8 ;#24
DB #DF,2 ;#12
DB #DF,1 ;#13
DB #FB,1 ;#0A
DB #FB,8 ;#0D
DB #FD,2 ;#15
DB #FB,16 ;#0E
DB #DF,8 ;#10
DB #FE,16 ;#22
DB #FB,2 ;#0B
DB #FE,4 ;#20
DB #DF,16 ;#0F
DB #FE,2 ;#1F
DB #EF,1 ;#09
DB #F7,1 ;#00
DB #F7,2 ;#01
DB #F7,4 ;#02
DB #F7,8 ;#03
DB #F7,16 ;#04
DB #EF,16 ;#05
DB #EF,8 ;#06
DB #EF,4 ;#07
DB #EF,2 ;#08
DB #7F,1 ;#27
DB #BF,1 ;#1D
DB #FE,1 ;#1E
DB #7F,2 ;#26
ORG #8100
KEY_MAP:
DS 41,#00
KEY_A EQU KEY_MAP+#00
KEY_B EQU KEY_MAP+#01
KEY_C EQU KEY_MAP+#02
KEY_D EQU KEY_MAP+#03
KEY_E EQU KEY_MAP+#04
KEY_F EQU KEY_MAP+#05
KEY_G EQU KEY_MAP+#06
KEY_H EQU KEY_MAP+#07
KEY_I EQU KEY_MAP+#08
KEY_J EQU KEY_MAP+#09
KEY_K EQU KEY_MAP+#0A
KEY_L EQU KEY_MAP+#0B
KEY_M EQU KEY_MAP+#0C
KEY_N EQU KEY_MAP+#0D
KEY_O EQU KEY_MAP+#0E
KEY_P EQU KEY_MAP+#0F
KEY_Q EQU KEY_MAP+#10
KEY_R EQU KEY_MAP+#11
KEY_S EQU KEY_MAP+#12
KEY_T EQU KEY_MAP+#13
KEY_U EQU KEY_MAP+#14
KEY_V EQU KEY_MAP+#15
KEY_W EQU KEY_MAP+#16
KEY_X EQU KEY_MAP+#17
KEY_Y EQU KEY_MAP+#18
KEY_Z EQU KEY_MAP+#19
KEY_0 EQU KEY_MAP+#1A
KEY_1 EQU KEY_MAP+#1B
KEY_2 EQU KEY_MAP+#1C
KEY_3 EQU KEY_MAP+#1D
KEY_4 EQU KEY_MAP+#1E
KEY_5 EQU KEY_MAP+#1F
KEY_6 EQU KEY_MAP+#20
KEY_7 EQU KEY_MAP+#21
KEY_8 EQU KEY_MAP+#22
KEY_9 EQU KEY_MAP+#23
KEY_SPC EQU KEY_MAP+#24
KEY_ENT EQU KEY_MAP+#25
KEY_CS EQU KEY_MAP+#26
KEY_SS EQU KEY_MAP+#27
Верно-верно. Я хотел написать "видимое отсутствие влияния", но упустил в процессе набора.
Кстати, очень интересная получится фишка, если запутать ход выполнения через GOTO USR XXXXX, а в процедурах перед RET задавать в BC номер строки куда нужно перейти. Есть сложность только с вызовом процедуры из разных мест программы, но это тоже решается. :)
Очень интересная фишка задавать процедуры через DEF FN.
Вот смотрю в книжке пример - рисование треугольника машкодом. DEF FN t(x,y,p,q,r,s), весит 80 байт. Вызывается FN(x1,y,x2,y2,x3,y3) - где x y координаты трех точек.
З.Ы. Но все-таки конкурс на ZX-Basic, не на асемблер. ;)
Сваял карту. Да, "Герои М&М" на барсике не взлетят. :biggrin:
Скорость еще так себе, но вот как раскрашивать? :confused_std:
Все идеи медленноваты будут...
Бука, попробуй грабер Алекс Райдера. Интересно на сколько быстрее будет.
Наверно я что-то пропустил. Это где?
Но тут дело не в граблении. Вопрос, как быстро цветовые атрибуты вывести.
Безумная идея - а если в массиве будут цветовые токены перед элементами пейзажа - взлетит?
Надо их вспомнить, лет двадцать не мучал. ;)
З.З.Ы. Немного оффтопа на тему ГероевМММ. Лет десять назад видел образ диска с кучей арта от НоММ2, сконверченного для ZX. Хз где, у себя не нашел, на VTRDOS тоже. Там даже не дема была - просто листалка картинок.
http://zx.pk.ru/showpost.php?p=689975&postcount=88
Спрайты в цвете выводятся.
Да, раза в 4 шустрей. Но это компилятор (кстати какой? BASinовский я так и не вкурил). Будем иметь ввиду, но чем меньше кода на конкурсе, тем лучше.
Попробовал массив сделать с кодами цветности перед символом - печатает ? и пробелы. Пичалька... :frown:
И посимвольно выводить пытался, и строкой. Кажется это одна из известных ошибок ПЗУ. Цветовые коды нужны были для работы с телетекстом, а эту фичу так и не допилили. (планировался чисто текстовый режим 40*24).
---------- Post added at 21:54 ---------- Previous post was at 21:49 ----------
Из машкода...:rolleyes_std:
А что им там выводить? Если он будет им выводить спрайты по одному, лучше не станет.
---------- Post added at 21:58 ---------- Previous post was at 21:56 ----------
Без специальных ухищрений один цвет на спрайт. Либо одинаковые разноцветные спрайты хранить повторно, либо менять файл спрайтов с помошью хитрых POKE.