перед 5 байт числа еще 0E. гиблый способ.
перед 5 байт числа еще 0E. гиблый способ.
Проще хранить и читать прямо в памяти POKE/PEEK. Читай элемент какой тебе заблагорассудится.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Через массив DIM n[$](m[, m1, m2, .. mx]) где n - имя переменных массива, $ - необязательный параметр (только для строковых переменных), m - количество переменных в массиве (если массив многомерный, добавляются параметры m1, m2, .. mx).
На практике, это может выглядеть так:
При этом дав команду go to 20, массив (в данном случае) заполниться уже другими значениями....
10 DIM A (10) ; задаем массив из 10 элементов
20 FOR I = 1 TO 10 ; организуем цикл
30 LET A (I) = RND ; заносим данные в массив
40 NEXT I ; конец цикла
...
---------- Post added at 15:39 ---------- Previous post was at 15:37 ----------
Можно узнать, откуда будут браться данные для заполнения в первом и во втором случае? Если вы храните в DATA-строке глобальные переменные (положение окон, начальные данный, карты уровней и т.п.) не вижу сложности в том, что будет несколько однотипных строк, для выборки данных из которых делаем RESTORE n (где n - адрес строки с данными), а потом READ a, b, .. x. В данном случае при разных значениях n, данные a, b, .. x будут разными.
А заменять программным способом значения в троках DATA - это какой-то "китайский коммунизм"! Все можно организовать намного проще. Например, вот как я организовывал хранение данных об окнах в DATA-строках (см. вложение - игра сапер). Со строки 7000 идут блоки микропрограмм с параметром "выбора окна" (строка RESTORE n), подпрограмма для работы с данными начинается со строки 9500, сами данные расположены со строки 9900.
Последний раз редактировалось null_device; 03.05.2011 в 12:01.
Когда есть, но не знаешь где - это все равно, что нету.
Через ту же связку restore n, read n, data n. Как альтернатива, если числа целые, через PEEK n [+256*PEEK (n+1) - если число "двухбайтное"], но их нужно, все равно, предварительно как-то загрузить в память (вручную, через data-строки или с кассеты\диска).
---------- Post added at 16:09 ---------- Previous post was at 16:05 ----------
Только, числовые переменные (и массивы, как частный случай числовой переменной) в бейсике "сьедают" много памяти..
Тогда можно использовать массив DIM A (x, n), где x - зависит от того сколько одинаковых x-наборов будет у вас, а n-количество чисел для "выборки".
---------- Post added at 16:11 ---------- Previous post was at 16:09 ----------
Внес кое-какие изменения в 19 сообщение - перечитайте, на всякий случай..
---------- Post added at 16:11 ---------- Previous post was at 16:09 ----------
В соседней ветке увидел новую игру, анонсированную вами. Возможно ошибаюсь, но не для нее ли вы искали алгоритм хранения данных?!
Рассмотрев листинг, пришел к выводу, что данные хранятся, несколько "неоптимально". Как массив, так и DATA-строки можно было оформить в виде символьный переменных. Тогда перенос лабиринта из строки DATA в массив можно было бы выполнить "целой строкой" READ d$: LET a$ (t)=d$, где t - это "строка", а не счетчик очередного элемента лабиринта.
Последний раз редактировалось null_device; 03.05.2011 в 21:04.
Когда есть, но не знаешь где - это все равно, что нету.
В смысле, "код" нажатой клавиши (число от 32 до 164-255)? Либо, с помошью "конструкции" LET n = CODE INKEY$, либо через переменную last_k (23560), не забывая "обнулять" ее после процедуры обработки нажатия клавиши. Например так:
----Код:.. 10 poke 23560,0 ; "обнуляем" переменную 20 let n = peek 23560 ; присваиваем значение 30 if not n then goto 20 ; "ждем" нажатия 40 if n = 32 then print "press space" ; обработка факта нажатия space 42 if n = 13 then print "press enter" ; обработка факта нажатия enter 50 goto 10 ; завершение "цикла" ..
Важно!
Таким способом можно "опрашивать" только нажатие одной клавиши. Т.е., при одновременном зажатии нескольких клавиш ни одна из них, не будет "распознана".
Последний раз редактировалось null_device; 17.11.2011 в 16:32.
Когда есть, но не знаешь где - это все равно, что нету.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Скрытый текст
Не обязательно.. данная программа проверяет нажатие двух клавиш и выводит надпись о факте их нажатия. У вас это может быть реакция для управления спрайтом\курсором и т.п.
Допустим, вам нужно определить нажатие одной из пяти клавиш (например 67890). Коды этих клавиш можно поместить в массив (или ячейки памяти) и сравнивать с ними так:
----Код:for i = 1 to 5 : read k(i) : next i data 54, 55, 56, 58, 48 .. if n = k(1) then.. if n = k(2) then... if n = k(3) then... if n = k(4) then... if n = k(5) then... ..
Хотя, более компактно, при использовании массива хранить значения для клавиш в "символьном" виде. Занимает меньше места в памяти и позволяет "на лету" менять "управляющие" клавиши.
При этом для смены управляющий клавиш в программе, достаточно присвоить переменной k$ другую символьную последовательность, например let k$ = "qaopm".Код:let k$ = "67890" .. if chr$ n = k$(1) then.. if chr$ n = k$(2) then.. if chr$ n = k$(3) then.. if chr$ n = k$(4) then.. if chr$ n = k$(5) then.. ; либо так if n = code k$(5) then.. ..
[свернуть]
---------- Post added at 20:53 ---------- Previous post was at 20:40 ----------
Для "высвечивания" только кода нажатой клавиши можно поступить намного проще:
Обьясните, подробно, для чего вам нужен код нажатой клавиши?Код:10 print at 0, 0; code inkey$ ;" " : goto 10
Последний раз редактировалось null_device; 17.11.2011 в 17:15.
Когда есть, но не знаешь где - это все равно, что нету.
Не совсем понял? Речь о чем-то типа "програмного буфера" ввода с клавиатуры? Нэ?!
----
Если что - вся "таблица" клавиш есть в конце книжки ZX Spectrum для пользователей и прграммистов..
Когда есть, но не знаешь где - это все равно, что нету.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)