metamorpho, немного бустануть программу можно используя basic 2.62
Вид для печати
metamorpho, немного бустануть программу можно используя basic 2.62
2.62 даст проценты ускорения, на глаз незаметно.
Если оставаясь в рамках бейсика говорить например о рисовании лабиринта 32x32, то быстрее сделать можно, но быстро все равно не будет. Если разных видов тайлов немного, например 4, то можно объединить их по 2 и сделать 16 вариантов рисования. При выводе с использованием POKE удобно объединить 2 по вертикали, если тайлы одинаковые, то можно нарисовать 2 одним POKE.
В детстве я проходил этот путь когда делал редактор спрайтов и "мегаигру". Постепенно перекладывал медленные операции на машиннокодовые процедуры, в частности и рисование уровня. Редактор в принципе и на бейсике+коды получился нормально, а вот игру надо было полностью перевести на ассемблер. Это было возможно, но проблема была с графикой и анимацией главного героя, красиво или хотя бы приемлемо у меня не получалось.
- - - Добавлено - - -
2.62 более ценен тем, что там исправлены известные баги.
Я деталей тоже не помню, но bas25hook.chai дописывает 0 0 0 d3 d3 d3 0 в конец виртуального .cas-файла перед контрольной суммой.
@metamorpho а есть где-то текст твоей программы целиком, чтобы запустить?
Оишбся, не в конец, а после имени. Три нуля подряд интерпретируются как признак конца bas-файла. Видимо ты клонишь к тому, что если в конце .bas файла не нашлось трех нулей, их стоит додумать. Это можно сделать, просто мне не встречалось таких bas-файлов раньше. Пришли плс.
Добавил архив с BAS и TXT.
BAS, насколько я понимаю, был в свое время форматом для хранения на дискетах, поэтому контрольная сумма там не требовалась. На тему тонкостей BAS надо бы посмотреть BT.COM от авторов вектора.
Спасибо, пока я не добрался сделать чего-то полноценно, можно вставить
в bas25hook.chai в строке 59. И тогда твой .bas загружается.Код:for (var i = zeroseq; i > 0; --i) {
this.cas.push_back(0)
}
cs &= 0xffff // это было
В bas файлах контрольной суммы нет, это все про cas.
Ещё протестировал вариант вывода графики уровня с командой PUT, скорость тоже медленная.
Прежде чем выводить через PUT нужно резервировать массив (- память), потом нарисовать спрайт (- память) и потом
запоминать это в GET и только потом использовать PUT. Минусы - затраты памяти и много лишних движений.
Над плюсами ещё думаю есть ли они.
Запускал программу в Бейсик 2.62 - если мерить строго на глаз то ощущение что есть небольшой прирост скорости, но
в целом всё так же медленно.
Вариант с машинными кодами - решил не использовать (кроме опроса клавиатуры), чтобы было чисто на Бейсике.
Сейчас решаю какой вариант из оставшихся трёх выбрать - возможно будет комбинированное решение.
Пока что нигде нету. После завершения проекта выложу здесь.
Скорее всего в этой игре будет один уровень в конце которого главный герой на чём-то куда-то улетает.
Этот проект задумывался мной как небольшое исследование и как результат демонстрация того какие можно было делать игры чисто на Бейсике с использованием некоторых специфичных моментов Вектора.
....и вот что получается - нарисовал с помощью LINE ракету и вылетает надпись "памяти больше нет". Как так нет, я же "почти" ничего ещё не рисовал :)
Однако быстро память кончилась, а я не успел внедрить и половины того что хотел. Придётся ужимать код программы и использовать другой вариант вывода персонажа игры (сейчас он через ресурсоёмкий PUT выводится).
Игра и на базовом этапе (уровень и человечек бегает - типа LodeRunner) была довольно медленная, а с прибавлением каждого нового элемента скорость падает уже до неиграбельности. Однако меня подкупает включение режима 12Мгц - всё прекрасно летает и парит (может сделаю настройки под режим 12Мгц). Вообщем хочется ещё немного поэксперементировать с некоторыми идеями, но уже сейчас понятно что на стандартном режиме 3Мгц на Бейсике мало что можно выжать в отношении скорости.
На данный момент в ходе экспериментов с Бейсиком удалось реализовать идею (она конечно не новая, но думаю немного в новой форме) анимации различных объектов (в основном статичных) с помощью программирования палитры. Т.е. можно хоть весь экран привести в движение без особых нагрузок на процессор, всё что нужно сделать это заранее правильно нарисовать графику, а потом в ходе игрового цикла менять только палитру.
Есть ещё идея сделать скроллинг уровня вверх-вниз, но это наверное совсем уничтожит скорость игры :)
Хотя на 12Мгц думаю всё будет неплохо работать.
Вообщем процесс создания пока продолжается, но память в Бейсике всё же коротка и сколько не ужимай программу довольно скоро упрёшься в потолок - а значит скоро (наверное) будет выдан результат моих экспериментов :)
С нехваткой памяти можно бороться несколькими способами:
1. Отключать плоскости, но что-то мне подсказывает, что в данном случае этот вариант не подойдет.
2. Более экономно хранить данные
2.1. Разделить программу на основной блок (загружаем по cload"") и блок данных, подгружаемый по bload"".
2.2. Компромиссный вариант - упаковывать данные в строки после REM и читать оттуда по PEEK.