четверг, 3 декабря 2009 г.

Прототип 1

Недавно вышел закрытый прототип 1.
Первые прототипы пока будут закрытыми, потому что функционала в них поддерживается мало, и смотреть в них особенно нечего :) Собственно, функционал первого прототипа я сейчас опишу.
Он был рассчитан на простой use case (пример использования): игрок может побродить по локациям, осматриваясь. Т.е. игровой мир состоит из нескольких локаций, а игрок может только перемещаться между ними (обычные команды сторон света - север, воcток, юг, запад) и осматриваться (осмотреться). Ничего "лишнего" не было реализовано (будет в следующих прототипах).
Поэтому возможности системы следующие:
  • локации с именами, описаниями и ссылками друг на друга по сторонам света
  • действия с шаблонами (простые литералы) и ссылками на процедуры
  • процедуры с двумя инструкциями: ПоказатьОписаниеЛокации(Локация) и ПерейтиНаЛокацию(Локация)
  • системная переменная ТекущаяЛокация
  • вычисление выражений (передаваемых в качестве параметров в процедуры) типов: системная переменная; свойство какого-то объекта; формальный параметр
С локациями и системной переменной, я думаю, всё понятно, а вот про остальное вкратце расскажу.
Вы как создатель игры описываете игровой мир, состоящий из локаций и их взаимосвязей.
Далее, чтобы дать игроку возможность управлять этим как-то, вы описываете возможные команды. Это действия. Они состоят из шаблона команды и ссылкой на процедуру обработки этой команды. Шаблоны пока довольно простые - это набор элементов, каждый из которых может быть либо просто текстовой константой (литералом), либо указанием, что тут идёт обращение к объекту в каком-либо падеже. Собственно, пока уверено реализованы и протестированы только литералы.
Процедуры, которые выполняются в качестве реакции на введённую игроком команду (и верно распознаную по шаблону парсером), довольно простые - они состоят из набора инструкций с параметрами. Фактические передаваемые параметры формируются из объектов, которые игрок упомянул в команде. Например, если игрок ввёл команду "осмотреть комнату", то парсер разбирает эту команду на 2 части: первая - литерал "осмотреть", вторая - ближайший объект с именем в словаре "комната". Собственно, если вызвать инструкцию ПоказатьОписаниеЛокации с параметром №2, то она выведет на экран описанием комнаты.
С инструкциями, я думаю, тоже всё предельно понятно, подробности можно спросить в комментариях к посту, либо потом воспользоваться документацией.
Выражения нужны для того, чтобы вызывать инструкции не с заранее описанными константами, а, к примеру, использовать системные переменные или их свойства. К примеру, логично для переход на север создать действие с шаблоном "север" (литерал), а в качестве реакции в процедуре вызывать инструкцию ПерейтиНаЛокацию с параметром Локация="ТекущаяЛокация.Север".

Для поста, я думаю, достаточно текста, закругляюсь :) Все вопросы - в комментарии.
В следующем посте расскажу о скоупе второго прототипа и его текущем состоянии.

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

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