Всем привет! Поиграл тут недавно в игру Вася-2. И захотел сделать нечто подобное, но не знаю с чего начать. Кто нибудь, подскажите плиз, где взять информацию о том как пишутся игрушки, или совет дайте, ведь есть же здесь люди, которые сами до всего додумались, помогите други пожааааааааалуйста!!!! %))))))))
Неактивен
Что тебе конкретно не понятно?
Обычно в программе организуется псевдо-бесконечный цикл. В котором:
1) проверяются флаги,
2) отрабатывают демоны (отложенные события)
3) увеличиваются счетчики
4) анализируется команда игрока и реакция на нее
5) ожидается ввод очередной команды после идем на пункт 1).
Тебе не понятно как на С++ это писать?
Неактивен
serega написал:
В том то все и дело не понимаю как это реализовать в программе
начнем с самого начала:
псевдо бесконечный цикл
void main()
{
boolean flag_of_exit = TRUE;
while (flag_of_exit)
{
// получаем команду из устройства ввода
// обрабатываем ее
if (you_are_deadman) { flag_of_exit = FALSE }
}
printf("%s","Хо-хо-хо! Вот ты и помер, дружище!");
}
![]()
Неактивен
Я думаю, что можно сделать например так:
заводишь массив или список структур для комнат, предметов.
Например:
struct room{
room* if_go_north,if_go_south,...;
char* short_desc;
char* long_desc;
}
аналогично создаешь свойства предметов и их структуры, можешь выделить разные структуры (или объекты) для разнотипных предметов и т.п.
А дальше в игре просто оперируешь нужными тебе структурами или объектами.
Неактивен
Согласен ООП (Объектно Ориентированный Подход
) в данном случае оптимален. А по поводу текстового ввода тут задачу нужно разбить на несколько частей:
1. получение команды от пользователя (собственно работа с устройством ввода)
2. разбиени команды на части с предварительным анализом введенной информации (парсинг)
3. реакция игры на команду
Вот и решать нужно эти задачи отдельно и обстоятельно.
Неактивен
Согласен. Ты на чем пишешь ? Я вот хочу на object pascal - оно же Delphi, накатать библиотеку классов облегчающую создение своей игрушки.
Неактивен
А я вот подумал, что писать все одному будет стремно, скорее всего брошу из-за природной лени, я вот с переводом TADS уже больше года сижу и не очень далеко сдвинулся.
На ++ писать тоже можно, только мне трудновато будет, не писал на нем серьезных проектов.
Неактивен
Не согласен. Нельзя объединять и так довольно общие пункты, нужно дробить-дробить и еще раз дробить. 8)
Например:
1. Интерфейс
1.1. Получение информации с устройства ввода
1.2. Разбить команду на составляющие
1.3. Составить шаблон для дальнейшей обработки
....
и т.д.
Подсказки по словарю не делают из соображений "секретности"
Т.е. да бы исключить прямой перебор. Хотя, в принципе, я считаю, что при достаточно большом словаре в этом нет необходимости. Некоторы, возможно, таким образом скрывают бедность словаря.
Моделирование состояний различных объектов - это сама жизнь.
Любую систему можно представить совокупностью объектов и взаимосвязей между ними (практически одно из определений системы в системном анализе).
Создать среду для работы с такими объектами и их связями и есть задача "движка".
Собственно можно начать с продумывания интерфейса, парсера, объектного пространства, объектов (комнат, предметов, персонажей и т.п.).
Неактивен
Что хочется иметь на выходе подпрограммы анализа (того, что я называю интерфейсом в целом?)
На мой взгляд на выходе мы в идеале должны получить ссылки на объекты. Глагол и предметы упомянутые в команде. Т.е. я ввожу "укусить змею с помощью вставной челюсти моей пра бабушки" - на выходе получаем:
объект - глагол - укусить, кусать, ...
объект - предмет - змея, аспид, гад ползучий, ...
объект - предмет - челюсть, вставная челюсть, ...
и еще нужно как-то связать объекты между собой. Т.е. выдать на выходе, что глагол применяется на объект1, а объект2 - это параметр.
Какую часть работы по взаимодействию с пользователем следует возложить на анализатор, а какую - моделингу?
ИМХО, они должны быть переплетены и взаимосвязаны, идея самодостаточного парсера, на мой взгляд ошибочна.
Наверно, возможно написать парсер, достаточно интеллектуально объясняющий игроку почему нельзя "открыть свечу" или "зажечь дверь"
Но, если уж приспичитвдруг сделать именно это - все прийдется переписывать.
Вообще, не стоит забывать про маштабируемость (и непредсказуемость творчества).
Поэтому, нужно что бы парсер - парсил, а обработкой занимался автор, но нужно оставить и "стандартные" обработки для типовых действий и объектов, да бы исключить рутину.
Анализатор - занятная задачка.
Нужно ли учитывать порядок слов в обрабатываемой фразе?
учитывать порядок слов можно, это облегчит парсинг-анализ, но закрепостит игрока. Я бы пока остановился на ограниченном варианте ввода, т.е. с оговоренным порядком слов. Так проще.
А как на счет предлогов?
Нужны. Так же как и местоимения. Должны учитываться в действиях игрока.
"положить иголку на шкаф" и "положить иголку в шкаф"
Это разные вещи.
Можно ли допустить присутствие неопознанных слов?
На мой взгляд, нельзя.
Стоит ли замахиваться на сложные предложения или ограничиться короткими?
Для начала, думаю, что не обязательно.
Неактивен
Нужны ли на самом деле развесистые словестные конструкции ? (и какой минимальный набор необходим)?
Насколько целесообразно заставлять пользователя применять жесткие (like English) правила грамматики и следования слов?
Настолько ли действительно необходим этот идеальный парсер? Недоумеваю! :-/
На мой непосвященный взгляд, идеальный парсер приятен, но далеко не необходим. Вспомним времена Z80 - Spectrum, Commodore, Amga... Парсер никакущий, словарь маленький, НО какие игры!!!! ![]()
Неактивен