Помощь: ZX81 «Основная» функция PEEK [дублировать
Вопрос
Этот вопрос уже имеет ответ здесь:
- Помощь: ZX81 Основная функция «PEEK» 3 ответа
Мне нужен способ узнать, попал ли персонаж ('<') на стену (черный пиксельный график)
-В игре ZX81.
Я смотрел на другую игру ... в которой используется код
Если Peek (Peek 16398 +256*Peek 16399) = код "Blackpixel Graphic" тогда ...
Что, кажется, работает для них ...
Это правильный код?
Я на самом деле не знаю с адресами и получаю память и прочее.
Помогите мне, пожалуйста...
-Еice вы знаете лучший способ. Пожалуйста, ответьте :) -Кто -то упомянул «позицию курсора», что, черт возьми, это на ZX81? Спасибо,
Решение
PEEK(PEEK 16398+256*PEEK 16399)
это идиома, означающая «получить номер символа в текущей позиции печати». Это работает, потому что два байтового слова на 16398 используется ZX81 Basic/ROM для хранения указателя на местоположение памяти в блоке данных экрана, соответствующего положению печати.
Итак, чтобы сделать обнаружение столкновений, вам сначала нужно установить:
PRINT AT X,Y;
координируется, где >
собирается двигаться, тогда читать
LET C= PEEK(PEEK 16398+256*PEEK 16399)
тогда вы можете распечатать >
на экране (перезапись предыдущего персонажа, чей код сейчас находится в C
) Если вы хотите, прежде чем делать чек:
IF C=128 THEN ...
(Я предполагаю, что персонаж, который вы хотите,-это черный персонаж 128, █.)
О, мальчик, я чувствую себя старым.
Другие советы
Вау, это возвращается. Я не использовал ZX81, но я написал несколько игр на TRS-80
Внутренняя часть:
(Peek 16398 +256*Peek 16399)
в значительной степени принимает значение двух мест памяти (8 бит) и создает 16 -битный
число от них, которое затем используется в качестве адреса внешнего взгляда; Вы можете переписать это как:
addrtocheck = (Peek 16398 +256*Peek 16399)
pixelvalue = peek (addrtocheck)
Если PixelValue = Code "BlackPixel Graphic", тогда ...
Я предполагаю, что значение «addrtocheck» на самом деле является позицией персонажа в игре, выраженной как адрес на экране. Поэтому, если значение не является стеной, то вы бы обновили бы значения в адресах 16398 и 16399 с новой позицией символа (используя «poke», без сомнения).
Надеюсь это поможет