В игре все инструкции(команды) состоят из 3-ех символов(как в ASM'e), и имеют 2 аргумента "а" и "b".
список допустимых инструкций(команд) в игре:
mov:
передвижение машины на одну клетку, в зависимости от ее направления
trn a:
поворот машины. если a=0, то поворот влево; а=1, поворот вправо
jmp a:
безусловный переход на инструкцию (а), относительно положения данной команды в программе
scn:
проверка следующей клетки от положения машины. #1 принимает значение 0, если клетка пустая;
1 если в ней находится копия процесса; 2, если в ней находится другой процесс; 3, если в следующей клетке стена.
crt a,b:
создать копию процесса и передать ему команды начинающиеся с "a" и заканчивающиеся "b"
относительно данной команды в программе
cmp a,b:
сравнение "а" с "b", если а=b, то будет выполняться следующая инструкция, иначе следующая
инструкция будет пропускаться
set $a,b:
записать в переменную $a значение b
add $a,b:
прибавить к переменной $a значение b
kll:
убить процесс в следующей клетке
rnd $a,b:
поместить в переменную $a случайное целое значение от 0 до b
Если вы уже скачали саму игру, то успели заметить в ней клетчатую таблицу, и бегающих в ней окружностей(если включали эмуляцию). Давайте каждую ячейку таблицы назовем клеткой, тогда каждый кружок в этих клетках назовем машиной. Цель этой игры и заключается чтобы написать такую программу, которая бы перемещала эти машины по экрану и убивала вражеские машины, стоящие в соседних клетках.
В каждом кружочке(машине) есть стрелка, которая показывает направление машины. Так как таблица(далее поле) двумерна, то направлений может быть всего 4: влево, вправо, вверх и вниз.
Как создавать свои программы:
Свои программы писать очень легко для этого потребуется любой текстовый редактор(я пользуюсь блокнотом). Нужно просто запомнить одну важную деталь - первая строка в каждой программе - это название самой программы, поэтому эта строка не выполняется как инструкция. Кличество инструкций в программе ограничено до 100. Написанную программу нужно сохранить с расширением .prg
ВСЕ ИНСТРУКЦИИ ДОЛЖНЫ ПИСАТЬСЯ МАЛЕНЬКИМИ БУКВАМИ
Передвижение машин по полю:
передвинуть машину в соседнюю клетку очень просто, для этого есть команда "mov".
повернуть машину можно с помощью команды "trn", если вы напишите "trn 0", то машина повернется влево. если напишите "trn 1" машина повернется вправо.
попробуйте создать свою программу с таким тектсом:
[пример]
mov
mov
mov
mov
trn 0
mov
mov
mov
mov
trn 0
mov
mov
mov
mov
trn 0
mov
mov
mov
mov
В этом примере в первой строчке написано "[пример]", именно этот текст отобразится в списке программ, когда вы ее откроете в игре. Протестируйте данный пример.
Безусловные переходы по программе:
Безусловный переход в программе можно осуществить с помощью инструкции jmp. Для чего нужен безусловный переход? - Ну предположим такую ситуацию, когда нужно создать бесконечный цикл, не будем же мы до бесконечности писать одни и те же инструкции! Тут на помощь и приходит этот самый jmp.
Пример:
[пример]
mov
trn 0
jmp -2
как этот пример работает:
в первой строке как и принято мы указываем название программы. Затем команда mov двигает машину на одну клетку вперед, затем команда trn 0 поварачивает машину влево. Далее идет этот самый jmp -2. в данном случае -2 означает, что дальнейшее выполнение программы перейдет на 2 строчки вверх, то есть обратно к команде mov.
аргумент инструкции jmp укзаывает на сколько строчек программа должна перепрыгнуть для дальнейшего своего выполнения. Если нужно чтобы программа перепрыгнула на несколько строчек назад, то аргумент должен быть указан со знаком минуса. Если нужно чтобы программа перепрыгнула на несколько строчек вперед, то аргумент указывается без знака минуса.
Переменные. Запись, чтение переменных:
Каждому процессу запущеной программы доступно до 10 числовых переменных. Пока есть 2 команды для записи и изменения переменных:set и add.
команда set записывает число в переменную, а команда add добавляет число к переменной. пример:
[пример]
set $1,5
add $1,2
add $1,-11
mov
jmp #1
как этот пример работает. для более сложных примеров я приведу таблицу, где опишу, что делает каждая инструкция программы:
[пример] |
первая строка программы - название
программы |
set $1,5 |
записать в переменную $1 значение 5. Имен
у переменных нет, есть просто их порядковые номера(1-10).
Когда мы что-то записываем в переменную, то перед ее номером
нужно ставить знак "$". Когда мы вызываем
переменную или нам нужно получить ее значение, то перед
номером переменной нужно ставить знак "#" |
add $1,2 |
прибывляем 2 к переменной $1. так как мы
изменяем значение переменной, то это значит, что в ней
проводится перезапись, поэтому перед номером переменной
нужно снова ставить "$". так как в переменную
$1 мы уже записали число 5, то после прибавления к $1
числа 2, в $1 будет находится число 7. |
add $1,-11 |
эту инструкцию я написал для того, чтобы
показать, что add работает также с отрицательными числами,
то есть здесь мы вычитаем 11 из $1, в $1 остается -4. |
mov |
двигаем машину вперед |
jmp #1 |
делаем безусловный переход, но куда???
- в значение переменной #1. так как здесь мы читаем значение
переменной #1, то перед номером переменной ставим знак
"#". так значение #1 равно -4, то мы переходим
на 4 инструкции назад, т.е. обратно к команде set. |
Клонирование, создание новых машин:
Для того, чтобы создать одноименный процесс(создать машину такого
же цвета) используется команда crt.
пример:
[пример]
crt 3,7
trn 0
jmp -2
mov
mov
mov
trn 0
jmp -4
[пример] |
первая строка программы - название
программы |
crt 3,7 |
инструкция создания новой машины. аргументы
этой функции указывают какие инструкции передать созданной
машине. цифра 3 показывает что через 3 строчки начнутся
инструкции, которые будут переданы новой машине. А цифра
7 показывает что через 7 строчек закончутся инструкции,
которые должны быть переданы новой машине.
Этот пример содержит в себе как бы 2 программы - главную(которая
создает новые машины), и второстепенную(программа, которая
будет содержаться в новых машинах). до команды jmp
-2 будет выполняться главная программа и далее
будет идти второстепенная. второстепенная программа в
главной никогда не запустится. |
trn 0 |
повернуть машину налево |
jmp -2 |
перейти на две инструкции назад к инструкции
crt |
mov |
здесь началась второстепенная программа,
которая будет содержаться в новых машинах, которые создаются
главной программой |
mov |
передвинуть новую машину вперед |
mov |
передвинуть новую машину вперед |
trn 0 |
повернуть новую машину налево |
jmp -4 |
перевести исполнение инструкций в новой
машине на 4 инструкции назад |
Инструкции сканирования, сравнения:
Для того чтобы посмотреть, что находится в соседней клекте
от машины используется команда scn. Эта команда
возвращает в переменную #1 значение в зависимости от того,
что находится в соседней клетке. Если в соседней клетке ничего
нет, то #1 будет равно 0; если в следующей клетке находится
одноименный процесс(процесс, который был создан таким же процессом),
то #1 будет равно 1; если в соседней клетке находится вражеский
процесс, то #1 будет равно 2; если в соседней клетке находится стенка поля, то #1 будет равно 3.
Команда cmp нужна для того чтобы сравнить
2 значения, если два значения не равны друг другу, то выполнение
следующей инструкции будет пропущено.
пример:
[пример]
scn
cmp #1,0
mov
trn 0
jmp -4
[пример] |
первая строка программы - название
программы |
scn |
посмотреть что находится в соседней клетке |
cmp #1,0 |
как я уже и писал, инструкция scn записывает
результат в переменную #1. командой cmp #1,0
мы сравниваем переменную #1 с 0, так как если в соседней
клетке ничего нет, то scn запишет в #1 значение 0. Если
#1 равно нулю, следующая инструкция выполнится, иначе
она будет пропущена. |
mov |
если #1 всетаки равно нулю, то мы делаем
шаг вперед |
trn 0 |
если #1 не было равно нулю при сравнении,
то мы сразу переходим на выполнении этой инструкции |
jmp -4 |
перейти на 4 инструкции назад |
Как убить чужую машину:
Убить чужую машину можно используя команду kll. Но нужно быть очень осторожными с этой командой, если использовать только команду kll, то можно убить машины, которые были созданы самой же программой. Поэтому команду kll нужно использовать в комбинации с командами scn и cmp. сама команда kll используется без каких либо аргументов.
P.S.:
Очень советую посмотреть примеры, которые находятся в архиве вместе с игрой, в частности обязательно посмотрите примеры sample1.prg, killer.prg и monster.prg.
|
|