русский

Болталка неочём (оффтоп)

3 Tage zurück, 23:36
Re: Болталка неочём (оффтоп)
 
uscheswoi_82 патриот
in Antwort uscheswoi_82 3 Tage zurück, 23:00

См. Игры ч3, воспоминание 31.05.2024


Я: Давай поговорим про QBasic, который фирма Microsoft распространяла с операционными системами MS-DOS, Windows 95, NT. Насколько помню фирма Microsoft разрабатывала так-же бейсик для игрового компьютера Commodore, так-же по моему не Microsoft а какая-то другая компания разрабатывала для игрового компьютера ZX Spectrum. В игровых компьютерах в отличие от IBM PC там была поддержка рисование спрайтов через PEEK и POKE. Но насколько я понимаю для QBasic советуют использовать Circle, Line, для заливки Paint. Я по моему в прошлом году попробывал нарисовать спрайт так, но медленно рисует что-то наверное:

DATA 15,15,15,15,15,7,12,12,12,12,12,12,12,15,15,15,15,15,15,15,0

DATA 15,15,15,15,8,12,12,12,12,12,12,12,12,12,12,12,12,15,15,15,0

DATA 15,15,15,15,6,4,6,6,6,12,12,12,6,12,8,8,8,15,15,15,0

DATA 15,15,15,15,6,6,6,6,6,6,14,14,6,14,7,15,15,15,15,15,0

DATA 15,15,15,6,6,6,14,6,14,14,14,14,6,14,14,14,14,15,15,15,0

DATA 15,15,15,6,6,6,14,6,6,6,14,14,14,6,6,14,14,6,7,15,0

DATA 15,15,15,6,6,6,6,6,6,14,14,14,6,6,6,6,6,15,15,15,0

DATA 15,15,15,8,7,8,6,14,14,14,14,14,6,6,6,6,8,15,15,15,0

DATA 15,15,15,15,15,7,6,6,6,6,6,6,6,7,7,7,15,15,15,15,0

DATA 15,15,15,15,6,6,6,6,12,6,6,6,6,15,15,15,15,15,15,15,0

DATA 15,15,15,6,6,6,6,6,12,6,6,6,12,6,6,6,6,15,15,15,0

DATA 15,7,6,6,6,6,6,6,12,12,12,12,12,6,6,6,6,6,7,15,0

DATA 15,7,6,6,6,6,6,6,12,12,12,12,12,6,6,6,6,6,7,15,0

DATA 15,15,14,14,14,6,6,12,14,12,12,12,14,12,6,6,14,14,15,15,0

DATA 15,15,14,14,14,14,14,12,12,12,12,12,12,12,12,14,14,14,15,15,0

DATA 15,15,14,14,14,12,12,12,12,12,12,12,12,12,12,12,14,14,15,15,0

DATA 15,15,15,15,12,12,12,12,12,7,7,12,12,12,12,12,15,15,15,15,0

DATA 15,15,15,8,6,6,6,6,7,15,15,7,6,6,6,6,8,15,15,15,0

DATA 15,15,7,6,6,6,6,6,15,15,15,15,6,6,6,6,6,7,15,15,0

DATA 15,7,6,6,6,6,6,6,15,15,15,15,6,6,6,6,6,6,7,15,0

DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

SCREEN 7

FOR Y = 0 TO 20

FOR X = 0 TO 20

READ c

if c <> 15 then PSET (X, Y), c

NEXT X

NEXT Y


AI: Здорово, что вы заинтересовались историей и использованием QBasic! Microsoft действительно приложила руку к разработке и распространению различных интерпретаторов BASIC, начиная с 8-битных игровых компьютеров, таких как Commodore, и до PC-систем под MS-DOS. ZX Spectrum использовал свою собственную версию BASIC, разработанную компанией Sinclair Research (а затем — другими лицензированными разработчиками), и он действительно позволял работать с памятью напрямую с помощью команд вроде PEEK и POKE.


В вашем коде для QBasic действительно используется метод рисования спрайта с использованием цикла и команды `PSET`. Это удобный способ, но он может быть медленным, особенно для больших спрайтов или анимации, поскольку команда `PSET` обрабатывает пиксели по одному.


Для повышения производительности можно попробовать другие подходы:

1. **Использование массивов:** Сначала записать данные в массив, а затем выводить на экран одним блоком. Это может быть быстрее.

2. **Машинный код:** Для действительно высокой производительности можно вызвать машинный код с помощью QBasic, хотя это требует знаний ассемблера.

3. **Другие режимы графики:** Если QBasic позволяет, можно использовать более быстрые графические режимы или те, которые поддерживают манипуляции сразу с блоками памяти.


Ваш спрайт выглядит любопытно! Если его нужно оптимизировать или улучшить, могу помочь. Давайте попробуем что-то доработать или протестировать! 🚀




Я: Я спрашивал как-то, и в одном форуме мне порекомендовали какую-то функцию в Visual Basic которая читает из массива, и записывает сама в видеопамять. Не знаешь как это функция называется? В Borland C++ в BGI есть тоже такая функция, но она сохраняет в переменную из видеопамяти, и читает из переменной и записывает в видеопамять, не помню как они называются.


AI: В Visual Basic функция,...


Что касается Borland C++ и BGI (Borland Graphics Interface), функции, которые вы упомянули, вероятно, это getimage и putimage. Они позволяют сохранять графические данные из видеопамяти в переменную и обратно. Вот пример их использования:



Я: Нет это была опечатка не в Visual Basic а в Qbasic.


AI: Ах, в QBasic! В таком случае, наиболее подходящая функция для работы с массивами и вывода графики, о которой могли упоминать, это использование команды `PUT`. Она позволяет записывать массивы данных непосредственно на экран, что гораздо быстрее, чем рисовать каждый пиксель по отдельности с помощью `PSET`.


Выглядит это примерно так:

```basic

DIM Sprite(1000) ' Создаем массив для хранения изображения

GET (x1, y1)-(x2, y2), Sprite ' Считываем участок экрана в массив

PUT (x, y), Sprite, PSET ' Выводим массив на экран

```

Команда `GET` сохраняет графику из заданного участка экрана в массив, а `PUT` выводит содержимое массива на экран. Это очень эффективно для работы со спрайтами и позволяет не замедлять процесс.

Если хотите, могу помочь адаптировать пример к вашим нуждам или объяснить, как лучше использовать это в вашем коде! 🚀




Я: Да точно это те функции в Qbasic. А они быстрые да?


AI: Да, функции `GET` и `PUT` в QBasic работают намного быстрее, чем использование `PSET` для рисования отдельных пикселей. Это связано с тем, что они работают с блоками данных, а не обрабатывают каждый пиксель по отдельности. Особенно заметна разница в производительности, если вы работаете с большими спрайтами или анимацией.


`PUT` выполняет вывод содержимого массива на экран одним действием, что минимизирует количество операций и снижает нагрузку на процессор. Однако стоит помнить, что производительность также зависит от графического режима (`SCREEN`) и мощности компьютера, на котором выполняется программа.


Эти функции отлично подходят для создания динамичных графических приложений, таких как игры или интерактивные визуализации. Если вы хотите оптимизировать свою программу и сделать её ещё быстрее, могу подсказать дополнительные приёмы. 😊 Что думаете, попробуем?




Я: Я хотел тебя спросить тоже про QBasic. В них есть возможность сделать свою структуру с помощью TYPE и END TYPE, и можно было сериализовать и записать в файл или прочитать из файла структуру. Как ты думаешь, это можно было заменить если не было возможности работы с базой данных? Насколько я знаю была версия Visual Basic под MS-DOS и там вроде бы можно было работать с базой данных, но QBasic он бесплатный, и я думаю можно было даже программу по домашнему бухучёту написать. Я прав?


AI: Вы абсолютно правы! Возможности `TYPE` и `END TYPE` в QBasic позволяли создавать пользовательские структуры для хранения и организации данных, а также реализовать примитивную сериализацию данных через записи в файл и чтение из файла. Это делало QBasic вполне пригодным для создания простых программ, таких как домашний бухгалтерский учет или инвентаризация.


С использованием таких структур в QBasic, можно обойтись без полноценной базы данных, создавая свои системы хранения данных через файлы. Конечно, это менее эффективно, чем работа с полноценными базами данных в Visual Basic, особенно если у вас большой объём данных или сложные связи между ними.


Что касается Visual Basic для MS-DOS, вы правы: там действительно была поддержка работы с базами данных, и это делало его удобным для более серьёзных приложений. Но так как QBasic бесплатный и довольно простой, он отлично подходил для небольших и личных проектов. Например, домашний бухучет вполне можно было реализовать с его помощью.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
 

Sprung zu