четверг, 3 мая 2012 г.

FiguresWars - продвижение вперёд.

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

Юниты 
  • Исследовательский центр - как видно из названия в нём можно изучать новые технологии. Пока из всего три. И следовательский центр может у игрока всего один. Жизни: 20.
  • Лучники - новый юнит, который может атаковать на расстояние до трёх клеток (по прямой). Для того, чтобы его можно было производить необходимо первое исследование из ветви атаки. Жизни: 15, Атака: 5, Радиус атаки: 3.
Команды для лучника(особые):
rattack x y d r - атаковать юниту с координатами x y в направление d, на расстояние r
marcher x y - запомнить лучника с координатами x y 
marmove  d - запомненный лучник идёт в направлении d
marattck d r - запомненный лучник атакую в направлении d на расстояние r
Древо технологий
Пока древо технологий представляет из себя корень и двух потомков (названия пока что рабочие):
  • Основное исследование - добавляет 1 к атаке и 2 к жизни войнам
  • Первая технология атаки - позволяет строить лучников
  • Первая технология защиты - добавляет 1 к атаке и 5 к жизни башен
 Чтобы исследовать технологию атаки или защиты надо сперва исследовать основную технологию.
 Команды
Блоки
Введены операторы block, которые по сути своей составляют процедуры языка FW. Каждому блоку при задании присваивается номер. И затем с помощью команды callblock блок может быть вызван. Так же есть команда multi_callblock, которая вызывает указанный блок указанно число раз.
Расположение блока в программе - любое, однако два блока не могут пресекается. При этом возможно рекурсия - в блоке можно вызывать этот блок. 
Синтаксис:
block N {
...
}
callblock N
multi_callblock N M
N - номер блока, M - натуральное число, сколько раз надо вызывать блок.
Пример:
block 2 {
mbcreate 2
mwarrior 2 1
mfor 10 warrior move 1
}
callblock 2 
block 2 - это номер блока, затем идёт пробел и открывающая скобка, когда блок заканчивается идёт закрывающая скобка. Команда callblock 2 вызывает второй блок.

Условия
Условия есть двух типов if и negif. Первое - срабатывает. когда условие истинно, второе - ложно.
Синтаксис:
 if <условие> {
...
};
Аналогично negif.
Возможные условия:
  1. cellempty x y - условие истинно, если клетка с координатами x y пуста
  2. mcellempty type d - условие истинно, если клетка в направлении d от запомнено юнита типа type пуста(про типы напишу ниже)
  3. cellenemy x y - условие истинно, если на клетке с координатами x y стоит враг
  4. mcellenemy type d - условие истинно, если на клетке в направлении d от запомненного юнита типа type стоит враг.
  5. makestep x y - условие истинно, если юнит с координатами x y может сделать шаг
  6. mmakestep type - условие истинно, если запомненный юнит типа type может сделать шаг 
Используя условия и блоки можно уже сделать какую-никакую тактику, без привязке к карте, вот например:
block 1 {
mwarmove 1
negif mcellenemy warrior 1 {
callblock 1
};
}
Данный код делает следующее: запомненный войн идёт по прямой в вправлении 1, пока не встретит врага.
Циклы
Не помню - писал о них или нет, но напишу. Фактически цикл можно организовать следующими способами:  используя multi_callblock и используя рекурсию, однако до того, как их сделать я ввёл два двух оператора цикла. Они задают делают юниту действие некоторое число раз.
for n x y command
mfor n type command
Первый - говорит юниту с координатами x y выполнять команду n раз, второй - запомненому юниту типа type.
Возможные команды:
  1. move d - передвигаться в направлении d
  2. build t d - построить юнита типа t в направлении d
  3. basecreate t - если юнит в цикл - база, он производит юниты типа t
  4. attack d - атаковать в направлении d
  5. rattack d r - атаковать в направлении d на расстояние r
Пример:
for 5 3 2 move 2
mfor 10 warrior move 1
Первый цикл говорит юниту в клетке (3,2) 5 раз пойти в направлении 2, второй говорит запомненному войну пройти 10 раз в направлении 1.

Типы юнитов
В тех местах, где я указываю type нужно писать номер юнита, где t - код типа юнита, вот их список:
0 - worker - Рабочий
1 - base - База
2 - warrior - Войн
3 - tower - Башня
4 - rschcenter - Исследовательский центр
5 - archer - лучник

Графическая статистика
Отображает количество юнитов у игроков на том или ином ходе. По оси абсцисс отображается номер шага, по оси ординат - количество юнитов, график масштабируется автоматически, внизу можно включить/отключить учитываемых юнитов. Идея пришла сегодня, когда играл в Героев и пожалел, то там такого нет.

 Планы на ближайшее время
Доработать сеттинг, добавить модельки. Сделать возможно получить информацию о последнем созданном юните, добавить условий и ресурс - очки исследований, доработать уже имеющиеся вещи.

Комментариев нет:

Отправить комментарий