Каждый игрок, участвующий в основной игре RW1, может представить свою команду роботов для участия в групповых боях. Команда состоит из одинаковых или разных роботов в количестве от 1 до 5 штук. По своему усмотрению игрок может предусмотреть взаимодействие между роботами, а может и нет. Пока все будет делаться через меня (robots@shaos.ru), минуя почтового робота. Роботы должны быть откомпилированы компилятором RW1_COMP версии 1.99 и иметь в тексте поле AUTHOR с указанием псевдонима игрока. Бои будут проводиться с помощью RW1_DUEL версии 1.99 в режимах -gr и -dm. Команды воюют каждая с каждой по два раза, причем второй раз команды в списке меняются местами (точно так же как и в основной игре). Победителем боя считается команда, в которой остался в живых последний робот до истечения 10000 тактов боевого времени. TSIMPLE.RW1 - simple team robot Команды взаимодействия роботов ------------------------------ Каждый робот, участвующий в бою, имеет строку автора и порядковый номер. Роботы одного автора считаются роботами одной команды и видят друг-друга как объекты типа 7. SAY "string without russian letters" Эта команда была раньше, но теперь она имеет дополнительный смысл как команда взимодействия между роботами - сказанная роботом фраза может быть прочитана любым другим роботом с помощью команды TEST. Новая сказанная фраза затирает собой старую строку. Команда выполняется за 1 такт боевого времени. TEST "string with * and ?" : label Команда для проверки последнего сказанного через команду SAY. Если сказанное точно соответствует шаблону, то происходит переход на метку label. В шаблоне могут быть использованы символы * и ?, заменяющие собой: ? - один символ, * - любое количество символов. Команда выполняется за 1 такт боевого времени. SEND var varn Команда передачи кода по "радио". Код var (число, переменная или элемент массива) отправляется по "радио" роботу с порядковым номером varn (число, переменная или элемент массива). Причем если varn равно нулю, то передача является широковещательной, т.е. код получает каждый робот, участвующий в игре. Команда выполняется за 1 такт боевого времени и вызывает уменьшение энергии на 1. RECV var Команда приема кода по "радио". Принятый код записывается в var (переменная или элемент массива). Кроме того в регистры заносится следующая информация: если N равен 0, то буфер принятых сообщений пуст, если нет, то это порядковый номер робота-передатчика; в X и Y записываются относительные координаты робота-передатчика; в регистр K помещается значение счетчика время T, в которое был отправлен код (для определения приемником того, насколько давно было отправлено сообщение). При однократном использовании команды RECV количество сообщений в буфере принятых сообщений уменьшается на одно. Размер буфера - 100 сообщений. Команда выполняется за 1 такт боевого времени. Новое в версии 1.99 ------------------- Вводятся два новых регистра I и S. Регистр I - порядковы номер робота в бою (начиная с 1). Регистр S - количество адресов возврата в стеке возвратов. Команды GOTO, CALL, RET и DEF (без инициализации) не занимают больше тактов боевого времени! Т.е. в один такт может быть выполнено до 10 команд (одна полноценная, остальные бесплатные). Ограничение на количество команд введено для того, чтобы избежать зацикливания и зависания программы проведения соревнований. AUTHOR "nickname" Объявление автора робота. Указывается сразу же за ROBOT "". Как только соревнования будут проводится по версии 1.99, наличие этого поля в новых роботах станет обязательным для участия в соревнованиях. POP Команда особождения стека возвратов на 1 значение. Полезна при экстренном выходе из прерывания для перехода на метку внутри основной программы. Команда выполняется за 1 такт боевого времени. SHOT arr[k] Сохранение регистров в массиве. В массив arr записываются значения всех внутренних регистров робота, начиная с элемента k и заканчивая элементом k+15 (т.е. предусмотрено место для 16 регистров - пока используется только 10). Записываются регистры в следующем порядке: arr[k+0]=X, arr[k+1]=Y, arr[k+2]=D, arr[k+3]=N, arr[k+4]=K, arr[k+5]=R, arr[k+6]=T, arr[k+7]=E, arr[k+8]=M, arr[k+9]=I, arr[k+10]=arr[k+11]=arr[k+12]=arr[k+13]=arr[k+14]=0, arr[k+15]=S. Команда выполняется за 1 такт боевого времени. DEF arr[число] = {init} Объявление массива с инициализацией. В фигурных скобках перечисляются через запятую значения элеметов массива. Если перечислено меньше элементов, чем объявлено, то оставшиеся заплняются нулями. Пример: DEF aa[10]={1,2,3} ячейки с 3 до 9 заполняются нулями. Команда выполняется за 1 такт боевого времени. Примечания ---------- Длинные выражения пока сюда не включены - после доработки они появятся в версии 2.0 под Windows. Добавились несколько опций: -dm включает режим deathmach (идея - Сергей Коваль). -gr включает режим групповых боев (разрешается SEND и код 7). -E/M где E и M числа соответственно уровень энергии и количество снардов для последнего упомянутого робота в командной строке. Пример: RW1_DUEL robot1.rw0 -10/10 robot2.rw0 -13/50 Также появилась возможность записать опции в файл и подключить его через @. Пример: RW1_DUEL @list.txt - где в файле list.txt записаны опции и имена роботов по одному в строке. Разрешается использовать различные комбинации файлов с опциями и самих опций в командной строке. Теперь незарегистрированным пользователям доступны ВСЕ возможности программы, но в течение только лишь 200 тактов. Без ограничений программа работает когда в качестве аргумента был записан единственный робот в виде исходного текста (RW1), а также при наличии ключа -f2 (отключение визуализации). Последнее означает, что программа RW1_CMP2 отныне будет доступна абсолютно всем!