Чувство пространства в текстовых играх

Источник:gcmsite.yaroslavl.ru
Дата публикации:2001
Twitter Facebook Vkontakte

Как организовать и правильно обрабатывать структуру внутреннего мира игры?

Данная статья расскажет об одном из вариантов решения проблемы...
Для описания программного кода будет использоваться Borland Pascal 7.0

Вопрос: с чего начать?
Ответ: Описание лабиринта лучше вначале производить на бумаге, расчертив карту на квадраты, и пронумеровав их.

например
 N U
 ############# |/
 # 1 | 2 | 3 # W--+--E
 #########---# /|
 # 4 # D S
 #####
из первой комнаты можно идти только на восток из второй - на запад и на восток из третьей - на запад и на юг из четвертой - только на север

Вопрос: по какому принципу вы писали передвижение между локациями?
Ответ: Смотрим, сколько будет у нас комнат. Например, 100. Тогда

..................
 z: array[1..100] of record
 s,n,u,d,w,e : integer;
 что-то еще : как-то еще;
 end;
..................
..................
for i:= 1 to 100 do 
 begin
 z[i].s := 0;
 z[i].n := 0;
 z[i].w := 0;
 z[i].e := 0;
 z[i].u := 0;
 z[i].d := 0;
 end;
..................
Ноль означает, что выхода в этом направлении нет. Пример, 2 комнаты, из 1 есть выход на юг, а из 2 - на север.
..................
 z[1].s := 2;
 z[2].n := 1;
..................
Вывод, в каждой комнате мы можем идти только в одном направлении. Получилась замкнутая система комнат. Движок с этим справляется.
Что-то еще - это элемент (массив), отвечающий за количество предметов на локации. У меня по умолчанию используется 20. Т.е. более этого числа предметов мы не сможем положить на локацию.

Вопрос: как перейти из одной комнаты в другую?
Ответ: Всё очень просто. Например, мы находимся в комнате 2, т.е. MyLocation = 2
Хотим идти на север

 if z.[MyLocation].n >0
 then MyLocation := z.[MyLocation].n
 else WriteLn('Нет пути...')

Вопрос: Есть ли смысл использовать динамические структуры и насколько критичен код программы к скорости выполнения?
Ответ: Нет, динамика здесь не нужна. Зачем затруднять себе жизнь, когда с помощью простых массивов можно реализовать всё, что захочется. Насчёт скорости... Игры данного жанра не требуют скорости обновления экрана 30-90 кадров в секунду, хотя код программы работает очень быстро!



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017