Зачем нужен аккаунт на Viva-Games?
Пользователи, у которых есть аккаунт, могут сохранять игровой процесс на сервер в любой игре и создавать списки игр (как на Youtube, например).
Создание аккаунта абсолютно бесплатно и займёт всего минуту Вашего времени.
Для создания аккаунта просто кликните в блоке "Войти на сайт" иконку социальной сети, в которой у вас уже есть активный профиль и следуйте подсказкам.
Smooth Moves
https://viva-games.ru/game/smooth-movesYour Spectrum (Великобритания), 1984
Автор: Simon N. Goodwin
Жанр: Утилиты: Визуализация
Язык
- Русский
- English
Управление
- Клавиатура(?)
Игроков
- Один
Рассказать друзьям
Доступные версии
Доступные версии
- Описание (авт.пер.)
- Информация
! 0 ^ ^ ^ ..
! B H11 H07 H10 H02 Плавные движения H11 H01 ! 2 ^ ^ ^ ^ ^ ^ Есть ли в вашей выход Speccy иногда выглядеть это страдает от тяжелый случай трясет? Расслабьтесь … не обращать внимания с Саймоном Лечение Гудвина для резкими графикой!
! 1 ^ ^ ^ ^
Представленные здесь рутинной короткое машинный код
что позволяет перемещать графику плавно вокруг Экран, без страдает от ограничений характер спектра сетки. Графика и ASCII символы можно расположить на любой высокой резо- olution координат с помощью простой команды Basic.
Вы не ограничены в ‘PRINT POS-704 itions “- ряды нуля до 21 и колонны нуля до 31 – Вы можете разместить символы в любой точке 256 176 Привет-Res сетке.
Программа использует всего 120 байт памяти и полностью перемещаемым, что означает, что вам можете загрузить его в любом месте в памяти. Он работает без проблемы на компьютере 16К. Еще одно преимущество по обычным PRINT AT команды является то, что этот позволяет использовать дополнительный девяносто странный пользователь- определенные графики. В дополнение к обычным 21 пользовательские графики (коды символов 144-164), Вы можете определить и положение символов 165 с 255 с Ю.С. Smooth Move рутины.
! 0 ^ ^ ^ ..
! B В нагрузку РЕЖИМЕ ! 1 ^ ^ ^ ^ Основные листинг загружает машинный код в любая область памяти. Введите в перечислении, принимая заботиться над заявления DATA, а затем решить, где вы хотите сохранить код. На 48К спектров тра вы можете поместить код по адресу 64500. Очистить Тип 64499 рассказать Basic, что это не должны использовать адреса выше 64499, а затем RUN программа. Вам будет предложено для “Load решения “- введите 64500. Программа читает Данные и сохраняет их от адресного 64500 и далее.
Если вы сделали опечатку в DATA, появится соответствующее сообщение. Исправьте ошибки и запустить снова. Не проверяйте рутину до “Позиция характера …” сообщение появляется; Код после этого она готова к использованию. Это хорошая идея, чтобы сохранить все, на всякий случай ошибка проскочила “проверки” в погрузчик.
На 16К Spectrum (если вы не имеете никакой другой машинный код в памяти), вы можете поместить код в адрес 31670. Очистить Тип 31669, а затем указать “Load адрес” из 31670. Конечно, Вы можете загрузить код где угодно, хотя лучше, чтобы защитить его с явным Команда, или это может быть перезаписаны Basic.
Процедура обеспечивает Привет-Res версия Команда: ! 0 ^ ^ ^ ..
PRINT INK 8; ДОКУМЕНТ 8; OVER 1; AT Y, X; CHR $ с ! 1 ^ ^ ^ ^ Синтаксис довольно сильно отличается: ! 0 ^ ^ ^ ..
RANDOMIZE х и у = с + USR ! 1 ^ ^ ^ ^ Где «х» и «у» являются горизонтальное и vert- ские координаты левого верхнего угла характер, ‘с’ является ASCII код характе- актер и “а” это адрес, где вы хранили подпрограмма. Итак: ! 0 ^ ^ ^ ..
RANDOMIZE 0 и 175 = 65 + USR 64500 ! 1 ^ ^ ^ ^ будет позиционировать букву «А» (символ 65) в верхний левый угол экрана, предполагая вас хранятся в машинный код по адресу 645000. The RANDOMIZE является “манекен” держать результат USR вызов. Если ваша программа использует случайные числа Вы должны заменить RANDOMIZE с манекеном присваивания, такие как: ! 0 ^ ^ ^ ..
ПУСТЬ манекен = 0 и 175 = 65 + USR 64500 ! 1 ^ ^ ^ ^ Вы можете указывать координаты или отличающийся актер коды с выражениями, а также переменная ременных или цифры. Например: ! 0 ^ ^ ^ ..
RANDOMIZE XPos + xdir И ypos- ydir = CODE “*” + USR шаг ! 1 ^ ^ ^ ^ допускается. Наша процедура использует аккуратный технику к получить три предыдущих выражений на линия, перед вызовом USR. Если есть более или менее чем за три значения, ошибка ‘Параметр’ будет сообщается. Убедитесь, что вы использовали правильные разделители – И, равна и плюс – между координатами, код символа и USR вызов. Если вы используете расчеты более сложнее, чем сложение, вычитание, мульти- пликация и деление, вам может понадобиться, чтобы положить друг координировать или код символа в скобках – так что процедура может отличить их.
Машинный код содержит обширную ошибку улавливания. Это не позволит вам использовать у координаты менее семи лет, так как у каждого персонажа есть восемь Линии высокие. Персонаж в точке с координатами 0,6 будет иметь практический результат в координату минус один!
Появляется сообщение об ошибке “Integer вне диапазона” если вы используете вертикальные координаты менее семи или больше, чем 175. X координаты за 248 просто “обернуть вокруг” на противоположной стороне экран; десятичные значения округляются до ближайшего целого числа.
! 0 ^ ^ ^ ..
! B Комбинатор ! 1 ^ ^ ^ ^ Вторая Базовая программа показывает особенности подпрограмма довольно четко. Мяч отскакивает вокруг Экран при различных скоростях. Это возмож- itioned помощью “Пусть D =” вместо “RANDOMIZE” так что последовательность случайных чисел, не постоянно вновь начал всякий раз, когда мяч движется.
Перечень довольно проста, но сделать что вы введите запятые (не точкой с запятой) в строке 330.
Код машина всегда использует более 1 установка, так что любой символ можно стереть не разрушая фон, просто по повторно рисунок его на том же месте. Персонажи принимают от цвета чернил, где они находятся нанесены. Это позволяет избежать необходимости сложной Код для сохранения и восстановления цвета, и предотвращает странные эффекты, как объектов разъехаться.
Спектр обычно использует коды символов 165 до 255, чтобы представить ключевые слова – слова, как ТОГДА, PRINT и так далее. Там никогда не бывает необходимость увеличения тех, кто вокруг экрана, так машинного кода Программа позволяет определить дополнительный 91 пользователь- определенные графики на их месте. Вместе с 21 стандартных пользовательских графика, это дает 122 символов, чтобы играть с.
! 0 ^ ^ ^ ..
! B
ЭТИКЕТКИ | АДРЕС | КОММЕНТАРИЙ
| | Системные СТРЕЛКИ
UDGS | 5C7B | графика пользователей | | Указатель CHARS | 5C36 | Набор символов | | Указатель BLKCH | 5C92 | Блок графический | | Буфер СТЕК | 5C65 | Математика стек конец | | Указатель STBOT | 5C63 | Математика стек
| | Начало указатель
| | ROM ROUTINES
MAKEB | 0B38 | Сделать графический | | В B PIXEL | 22Аа | поиск адрес | | Пикселей POP_A | 2DA2 | Поп от
| | Стека математике
! 2 ^ ^ ^ ^ ^ ^
В приведенной выше таблице показаны системные указатели и ROM правила, используемые в Smooth Move, давая свои метки и адреса. Это для Использование ассемблера только, и не нужно быть набраны в. ! 1 ^ ^ ^ ^
! B В принципе новые символы определены в точно так же, как и старые. Они следовать другим в памяти, а это означает, что вам придется расширить определяемые пользователем Графическая область, прежде чем вы можете определить более стандартные 21 символов. На компьютере 48К Вы бы использовать следующие команды, чтобы расширить графика площадь, чтобы справиться с 122 символов: ! 0 ^ ^ ^ ..
CLEAR, 64559: POKE 23675,48: POKE 23676.252 ! 1 ^ ^ ^ ^ В тычет настроить систему переменная UDG так что он указывает дополнительный 728 (91 * 8) байт дальше памяти. Они не оставляют память для любой машинный код, так что вы, вероятно, использовать CLEAR, 64499 и загрузить Smooth код Move на 64500 (или поблизости).
На компьютере 16K загрузить машинный код в 31670 и резерв пространство с: ! 0 ^ ^ ^ ..
CLEAR, 31669: POKE 23675,48: POKE 23676.124 ! 1 ^ ^ ^ ^ Когда вы приходите к программе определяется пользователем графика, вы POKE закономерности в памяти как обычно. Разница лишь в том, что вы не можете использовать USR функция “письмо”, чтобы найти символы после USR “у”. Лишние символы по-прежнему следовать в восемь байт интервалами. Определяемые пользователем графический “” Имеет код символа 144, так что вы можете найти определение характера с кодом ‘N’ по набрав: ! 0 ^ ^ ^ ..
PRINT USR “” + 8 * (п-144)
! B Маленькие хитрости ! 1 ^ ^ ^ ^ Гладкая Move использует интересную машинный код трюки, так что я перечислил ассемблера код Программа так же как Basic погрузчик. Это длинный список, собранный с помощью версии 2.1 из Отличная EDITAS ассемблера живописных в.
! 0 ^ ^ ^ ..
100 REM SMOOTH ДВИЖ.ОБ 110 REM Саймон N Goodwin 120 REM 130 REM код нагрузки 140 CLEAR, 30999 150 НАГРУЗКИ “Двигатель” КОД 31000 160 REM Set область 170 ЛЕТ Xmax = 247 180 ЛЕТ утах = 168 190 REM Установка позиции 200 LET XPOS = INT (RND * 200) 210 LET YPOS = 17 220 ЛЕТ xdir = INT (RND * 6 + 1) 230 LET ydir = -INT (РНД * 5 + 1) 240 REM Определение мяч 250 ВОССТАНОВЛЕНИЕ 260 Ибо я = USR “” К USR “е” 270 READ d 280 POKE I, D 290 NEXT I 300 ЛЕТ форма = 144 310 INK 6: PAPER 2: ГРАНИЦА 5 320 ДЛЯ = 0 TO 21 330 PRINT AT я, 0, INVERSE 1, 350 NEXT I 360 GO TO 480 390 REM Переместить мяч 400 ЛЕТ oldx = XPOS 410 LET Oldy = YPos 420 LET XPOS = XPOS + xdir 425 IF XPOS>1 THEN IF XPOS
! 2 ^ ^ ^ ^ ^ ^
Демонстрационная программа с участием мяч подпрыгивая Экран при различных скоростях. (Убедитесь, что вы вводите запятые и не точка с запятой в строке 330.) ! 1 ^ ^ ^ ^
! B Листинг ассемблера начинается с оп суперпозицию нескольких констант, используемых впоследствии в Программа. Они определены в главе перечисление так, что они могут быть проверены и изменены легко. Они также делают программу легче читать, особенно, если он не сразу приходят на ум, что, скажем, 5C65H это адрес указателя математике стека! Три подпрограммы ROM были использованы, чтобы свести к минимуму размер и программы держать вещи простыми.
Код машина находится в трех основных разделов.
Во-первых, параметры (координаты и харак- актер номер) проверяются, то характер Определение расположен, и, наконец, характер позиционируется на экране. Параметр проверка опирается на пути оце- Спектр uates выражения. В простой суммы как: ! 0 ^ ^ ^ ..
PRINT 2 + 3 * 4 ! 1 ^ ^ ^ ^ компьютер должен отработать умножение прежде, чем это делает добавление. Это происходит потому, Правильный ответ 14 (или 2 + 12), а не 20 (5 * 4).
Гладкая код Move использует преимущества способ Basic работает на результат из расчета, путем обеспечения того, координат и характера Число были разработаны, но не в сочетании вместе, как выполняется вызов USR.
три цифры томятся на “математике стек” временных результатов во время разговора USR.
машинный код может читать цифры, которые имеют было так услужливо приготовили по Basic, а затем положить вещи аккуратные потом так, что Basic может вести только вызов USR закончилась.
! 0 ^ ^ ^ ..
100 REM SMOOTH MOVE погрузчик 110 REM Саймон N Goodwin 120 REM 200 INPUT “Load адрес”; л 210 Пусть C = 0 220 ДЛЯ I = L Для л + 119 230 READ d 240 с = C + D 250 POKE I, D 260 NEXT I 270, если с<>13017 затем распечатать “Er ROR в DATA “: СТОП 280 PRINT “Позиция характер с AT х, у с ” 290 PRINT “RANDOMIZE х и у = с + USR “; л 300 PRINT “” Сохранить все, дзю ул случай … ” 310 SAVE “гладкий / BAS” 320 SAVE “SMOOTH / COD” КОД л, 120 330 СТОП 400 DATA 42,101,92,229,235,42 410 DATA 99,92,1,15,0,9 420 DATA 237,82,40,2,207,25 430 DATA 205,162,45,254,128,56 440 DATA 11,71,214,144,56,19 450 DATA 237,91,123,92,24,4 460 DATA 237,91,54,92,38,0 470 DATA 111,41,41,41,25,24 480 DATA 6,205,56,11,33,146 490 DATA 92.229.221.225.205.162 500 DATA 45,103,229,205,162,45 510 DATA 225,111,229,14,8,225 520 DATA 37,229,36,197,68,77 530 DATA 205,170,34,193,71,175 540 DATA 176,221,126,0,40,17 550 DATA 235,38,0,111,62,8 560 DATA 144,71,41,16,253,235 570 DATA 126,170,119,35,123,174 580 DATA 119,221,35,13,32,213 590 DATA 225,225,34,101,92,201
! 2 ^ ^ ^ ^ ^ ^
Если вы еще не овладели ассемблера, вот Basic погрузчик программа позволяет загружать Smooth Move.
! 1 ^ ^ ^ ^
! B Это дает нам удобный способ прохождения числа от Basic до машинного кода, без хлопот выглядывает и POKEing. Мы можем гарантировать, что временные результаты готовы по нашему выбору сепараторов между координатами. В Команда: ! 0 ^ ^ ^ ..
RANDOMIZE х и у = с + USR ! 1 ^ ^ ^ ^ Основные должны сделать добавление первых, чтобы получить Правильный ответ – добавив всегда делается перед сравнение (=) и сравнения делаются до И. Эта идея объясняется на странице 12 тонкий “Введение” руководство, которое поставляется вместе с Speccy.
По дороге через выражение, основных работ любые расчеты необходимы, чтобы найти х, у, и с, поскольку эти расчеты должны быть выше приоритет, чем «плюс» в конце линии.
Если вы хотите использовать на равных, и, или других так называется “логические операции” в расчете х, у и С, вы должны поставить соответствующий Расчеты в скобках, так что Basic будет выработать всю стоимость, прежде чем он достигнет USR вызов. Список приоритетов на странице 201 руководство Спектр. Логические операции имеют Приоритет ‘2’, ‘3’, ‘4’ или ‘5’.
Основные ставит временные результаты в области под названием “математика стек”. Два системных переменных используются в ознаменование верхнюю и нижнюю часть этой области; каждый Значение, хранящееся в нем занимает пять байт.
Линии 1340-1450 ассемблера используются для убедитесь, что математика стек длиной 15 байт, когда вызов USR достигается; это означает три значения готовы. Если стек не содержит три значения, процедура остановки с «параметром» Ошибка – это от линий 1440 и 1450.
! 0 ^ ^ ^ ..
! B ХАРАКТЕР ИССЛЕДОВАНИЕ ! 1 ^ ^ ^ ^ ROM подпрограмма POP_A используется для чтения число от математики стека и в А зарегистрируйтесь. Линии 1470-1560 начнут извлекать характер Код, который является последней вещью, рассчитывается и следовательно в “верхней” части стека. Они тестируют Код решать персонаж является блок графический, определенный пользователем графический или ASCII характер. Там нет определение блока графика в ROM – те, которые генерируются как требует рутину под названием MAKEB, что ставит картина определяется кодом в B заре- тер по адресу BLKCH.
В случае ASCII или определяемые пользователем харак- метры, программа находит соответствующий старт адрес из системных переменных (UDGS точки в пользовательских графики и символов указывает на в ASCII символы). Код характер мульти- курсировали по восьми (так как каждый определение берет восемь байтов), и расположение символа Установлено, добавив начальный адрес, чтобы результирующее значение. GFONT копирует адрес определение характера в регистр IX, для обеспечить при хранение.
POP_A используется в два раза больше, чтобы принести у и х координирует где персонаж должен быть отображается. Петля из ПЛИНИЯ года ставит характер в видеопамяти, по одной строке за раз.
Регистрация C используется для подсчета строк.
Программа берет координаты каждой линии и использует вызов ROM, чтобы найти адрес, где должна появиться, что линия. ROM подпрограмма по имени PIXEL принимает координаты х и у в заре- метры C и B, возвращаясь с адресом байт требуется в HL и положение в байт в А. Определение характера извлекается и сместился в сторону, если это будет необходимо.
Каждая строка дисплея спектра соответствует 32 байт видеопамяти. Содержание что память определяет то, что отображается на линия. Один нормальный распорядок PRINT Спектр использует байт на символ в каждой строке, а это означает, что персонажи не могут быть напечатаны частично в одном байт и частично в следующем. Гладкая Move позволяет вам разделить персонажей от одного байта и Следующий (отсюда управления тоньше над позиционированием). Символьный код введен в одном конце HL зарегистрируйтесь пара, которая не сдвигается вбок, пока это в нужном месте на границе между H и L. ADD HL, инструкция HL является используется сдвинуть значение – каждый раз при добавлении двоичное значение к себе он движется на одно место влево, потому что каждый столбец имеет удвоенное значение один в его право.
В магазине графический линии подмешивается дисплей с инструкцией XOR – машину Код эквивалент печать по. Петли программы не к ПЛИНИЯ до всех восьми линий Характер были размещены.
! 0 ^ ^ ^ ..
! B Уборки ! 1 ^ ^ ^ ^ Процедура не может вернуться в базовый, пока оба стеки – стек процессор и математика стек – Были возвращены, как они были найдены.
Линия 2330 отбрасывает информацию координат который был в стеке процессора. И, наконец, значение указателя математике стека извлекается, так что Basic не запутаться внезапное Потеря трех элементов данных. Функция USR возвращает нулевое значение, так как В и С имеют оба обратный отсчет до нуля.
Эта программа является лишь введением в высоком разрешении анимация на Spectrum. Лучший графический Процедуры обработки больших фигур, с автоматическим анимация и движения, обнаружение столкновений, и пр. Однажды я мог бы разглашать секреты YS Sprite система, которая ставит большинство мощность выделенной аркада машины на ваш Кончики пальцев – это, если я когда-либо после завершения ввода его …!
! 2 ^ ^ ^ ^ ^ ^
! B Код ассемблера для Smooth Move – просто так, что вы можете увидеть интересные трюки машинного кода, что Саймон используются.
FDE8 1320 ORG 65000
1330; “Fetch конец стека” FDE8 2A655C 1340 MOVER LD HL, (СТЕК) FDEB E5 1350 PUSH HL 1360; “3 числа на стеке?” FDEC EB 1370 EX DE, HL FDED 2A635C 1380 LD HL, (STBOT) FDF0 010F00 1390 LD BC, 15 FDF3 09 1400 ADD HL, BC FDF4 ED52 1410 SBC HL, DE FDF6 2802 1420 JR Z, FCODE 1430; “3 параметры нужны!” FDF8 CF 1440 RST # 08 FDF9 19 1450 DEFB 25 1460; “Найдите символ. Код” FDFA CDA22D 1470 FCODE ЗВОНОК POP_A 1480; “Разделить на 3 группы:” 1490; “0-127 ASCII символы” 1500; “128-143 блок графика” 1510; “144-255 определяется пользователем” FDFD FE80 1520 CP 128 FDFF 380B 1530 JR C, ASCII FE01 47 1540 LD B, FE02 D690 1550 SUB 144 FE04 3813 1560 JR C, БЛОК 1570; “Должен быть УДГ” FE06 ED5B7B5C 1580 LD DE, (UDGS) FE0A 1804 1590 JR ИНДЕКС 1600; FE0C ED5B365C 1610 ASCII LD DE, (символов) 1620; “Найти форму символа” FE10 2600 1630 ИНДЕКС LD H, # 00
FE12 | 6F | 1640 | LD L, |
FE13 | 29 | 1650 | ADD HL, HL |
FE14 | 29 | 1660 | ADD HL, HL |
FE15 | 29 | 1670 | ADD HL, HL |
FE16 | 19 | 1680 | ADD HL, DE |
FE17 1806 1690 JR GFONT 1700; FE19 CD380B 1710 вызов блока MAKEB FE1C 21925C 1720 LD HL, BLKCH FE1F E5 1730 GFONT PUSH HL FE20 DDE1 1740 POP IX 1750; “Fetch Y координат” FE22 CDA22D 1760 ПРИЗЫВ POP_A FE25 67 1770 LD H, 1780; “Fetch координаты Х” FE26 E5 1790 PUSH HL FE27 CDA22D 1800 ПРИЗЫВ POP_A FE2A E1 1810 POP HL Fe2B 6F 1820 LD L, FE2C E5 1830 PUSH HL 1840; “Процесс 8 экран линии” FE2D 0E08 1850 LD C, 8 FE2F E1 1860 PLINE POP HL 1870; “Шаг до следующей линии” FE30 25 1880 декабрь H FE31 E5 1890 PUSH HL FE32 24 1900 INC H 1910; “Преобразование коорд в H, L” 1920; “Обратиться в HL & A” FE33 C5 1930 PUSH BC FE34 44 1940 LD B, H FE35 4D 1950 LD C, L FE36 CDAA22 1960 ПРИЗЫВ PIXEL FE39 C1 1970 POP BC 1980; “Копировать битным смещением к B” FE3A 47 1990 LD B, 2000; “Смотрите, если символ находится на сетке” Fe3B AF 2010 XOR Fe3C B0 2020 ИЛИ B 2030; “Читать шрифт в любом случае” FE3D DD7E00 2040 LD (IX + 0) 2050; “Храните СООБЩЕНИЕ если на сетке” FE40 2811 2060 JR Z, МАГАЗИН 2070; “Генерация битовую маску 16” FE42 EB 2080 EX DE, HL FE43 2600 2090 LD H, 0 FE45 6F 2100 LD L, 2110; “Количество Обратный переход” FE46 3E08 2120 LD, 8 FE48 90 2130 SUB B FE49 47 2140 LD B, FE4A 29 2150 SHIFT ДОБАВИТЬ HL, HL FE4B 10FD 2160 DJNZ SHIFT 2170; “Положите маску в DE” FE4D EB 2180 EX DE, HL 2190; “Смешайте в дисплее” FE4E 7E 2200 LD (HL) FE4F А.А. 2210 XOR D
FE50 | 77 | 2220 | LD (HL), |
FE51 | 23 | 2230 | INC HL |
FE52 | 7B | 2240 | LD A, E |
FE53 | AE | 2250 | МАГАЗИН XOR (HL) |
Fe54 | 77 | 2260 | LD (HL), |
2270; “Прогресс через шрифтом” FE55 DD23 2280 INC IX 2290; “Граф одна линия сделано” Ре57 0D 2300 Декабрь C FE58 20D5 2310 JR NZ, PLINE 2320; “Чистые стеки; N.B. BC = 0” FE5A E1 2330 POP HL FE5B E1 2340 POP HL FE5C 22655C 2350 LD (СТЕК), HL FE5F C9 2360 RET 2370 КОНЕЦ ! 1 ^ ^ ^ ^
! B – с Вашего Spectrum # 7 (Sep.1984) – $
?
Запустите Smooth Moves и играйте. Программа для визуализации, опубликованная в Великобритании в 1984 году командой Your Spectrum, которую разработал Simon N. Goodwin.
Сохранённые игры[X]
Справка[X]
Помощь уже в пути!
- x1
- x2
- x3
<<<<
<<<<
<<<<
Не забывайте периодически сохранять игровой прогресс на сервере (клавишей F8), чтобы уверенно продвигаться вперёд!
Если вы гость на сайте, то прогресс будет сохранён только в памяти браузера и потеряется при закрытии. Чтобы этого не произошло - просто войдите в свой профиль.
Для загрузки сохранённой игры жмите F3 или откройте меню "Диск" кнопкой на правой панели.
Если игра не запускается, или у вас есть вопросы по игре - задайте их ниже.
Не запускается или глючит игра, или не можете пройти? Спросите в комментариях.