My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
RulesForGamers  
Правила для игроков
Featured
Updated Nov 7, 2009 by nbdar...@gmail.com

Введение

Примечание. Текст, выделенный курсивом, будет реализован в следующих версиях

  1. Битва — сражение между одинаковыми роботами, управляемыми программами участников (далее именуются роботами)
  2. Битва проходит на прямоугольной карте заранее неизвестных размеров, которая состоит из полей. Все объекты в игре размером с поле. Битва происходит в пошаговом режиме
  3. Поля бывают следующих видов:
    • обычное поле — обычное поле. По нему робот может проходить, может простреливать.
    • преграда — не проходимое, не простреливаемое поле
    • вода — не проходимое, но простреливаемое поле
    • (?)«кусты» — проходимое, но не простреливаемое поле
    • «зарядка» — поле с «зарядкой». Становясь на такое поле, робот получает боеприпас/энергию
  4. Роботы обладают следующими параметрами (у всех роботов на старте равными):
    • Уровень жизни — заранее неизвестен. При каждом попадании в робота уменьшается на единицу. Не восстанавливается. При достижении нуля — робот погибает
    • Боезапас — заранее неизвестен. При каждом выстреле робота уменьшается на единицу. Восстанавливается на полях «зарядки» боезапаса.
    • Уровень энергии — заранее неизвестен. Каждый ход уменьшается на единицу. От уровня энергии зависит «меткость» робота (возможно в обратной геометрической прогрессии? тут надо подумать). Может восстанавливаться дружественными роботами, находящимися в соседнем поле, путем перекачивания своей энергии, в количестве (?) 10% от первоначальной энергии за ход
  1. Роботы управляются программами игроков, программам доступны следующие операции (одна за ход) над роботами:
    • Операции перемещения:поворот влево, поворот вправо, шаг вперед
    • Операция обзора: применив эту операцию (и соответственно постояв на месте), к началу следующего хода робот получает информацию о полях в радиусе 4 клеток от себя (тут опять же надо подумать, может лучше о квадрате вокруг себя, и размер тоже обдумать надо)
    • Операция выстрела: выстрелить в противника в зоне видимости. Чем дальше до противника и меньше энергия стреляющего, тем меньше шансов попасть.
    • Операция «Idle»: стоять, ничего не делать
    • Операция «поделиться энергией»: В коммандной игре перекачать дружественному роботу, находящемуся в соседнем поле, свою энергию
    • Операция сообщения: отослать дружественному роботу, находящемуся недалеко (или в зоне видимости) сообщение. Содержание и смысл сообщений должны заранее обсуждаться с союзниками

Кроме того, в начале хода роботу доступна информация о видимом впереди него секторе. (о его форме и размерах нужно подумать). В коммандной игре также роботу сообщаются сообщения дружеских роботов и их координаты, если в предыдущем ходе они были на достаточно близком расстоянии (или в зоне видимости, надо подумать)

Формат ввода - вывода для игровых скриптов

Вначале каждого хода программа получает по STDIN:

  1. Свое имя:
  2. darvin_ROBOTHECH0066
    После имени посылается
    EON
  3. Карту:
  4. #....#..#..........#....
    ........................
    ......####........##....
    .###.........#.#........
    ........................
    ........................
    #.......................
    ........................
    ..E....____$$$$$$$....A.
    Все понятно:
    WALL = "#"
    GROUND = '.'
    AMMO = "A"
    ENERGY = "E"
    FOREST = "$"
    WATER = "_"
    После карты посылается
    EOM
  5. Параметры всех роботов (в json):
  6. {
        "ammo": 92, 
        "coord": [
            5, 
            0
        ], 
        "energy": 100, 
        "live": 94, 
        "name": "darvin_ROBOTHECH0066", 
        "position": "^"
    }
    {
        "ammo": 92, 
        "coord": [
            0, 
            6
        ], 
        "energy": 100, 
        "live": 87, 
        "name": "P_r_i_m_a", 
        "position": "<"
    }
    • ammo - боезапас
    • coord - координаты x,y
    • energy - уровень энергии
    • live - уровень жизни
    • name - имя робота, по нему можно узнать кто ты
    • energy - куда смотрит робот (восток - >, запад - <, север - ^, юг - \/)
    После списка роботов посылается
    EOR

В python-sdk все это уже распарсено в удобный (относительно) вид

Потом программа должна выдать в STDOUT одну из комманд (только одну за ход):

Left
Right
Go
Idle
KillMe
Fire ИмяРобота
  • Left - поворот налево
  • Right - поворот направо
  • Go - шаг вперед
  • Idle - простой
  • KillMe - самоубийство
  • Fire ИмяРобота - выстрелить в ИмяРобота. Стрелять можно в любого робота, на любом расстоянии, но вероятность попадания сильно уменьшается с расстоянием, в любом направлении (это пока)

Далее идет следующий ход.


Sign in to add a comment
Powered by Google Project Hosting