перед 5 байт числа еще 0E. гиблый способ.
Вид для печати
перед 5 байт числа еще 0E. гиблый способ.
Проще хранить и читать прямо в памяти POKE/PEEK. Читай элемент какой тебе заблагорассудится.
Через массив 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.
Через ту же связку 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 - это "строка", а не счетчик очередного элемента лабиринта.
В смысле, "код" нажатой клавиши (число от 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 ; завершение "цикла"
..
Важно!
Таким способом можно "опрашивать" только нажатие одной клавиши. Т.е., при одновременном зажатии нескольких клавиш ни одна из них, не будет "распознана".
Скрытый текст
Не обязательно.. данная программа проверяет нажатие двух клавиш и выводит надпись о факте их нажатия. У вас это может быть реакция для управления спрайтом\курсором и т.п.
Допустим, вам нужно определить нажатие одной из пяти клавиш (например 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
Не совсем понял? Речь о чем-то типа "програмного буфера" ввода с клавиатуры? Нэ?!
----
Если что - вся "таблица" клавиш есть в конце книжки ZX Spectrum для пользователей и прграммистов..