RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2432424 views

Nex,
А где ее искать? Единственное что приходит в голову, что я накосячил где то в верстке файла “gameAwesomium” когда выводил блок со списком действий за блок основного описания, но я не знаю как найти там ошибку.

Mxat2008,
в HTML и CSS.

Если хочешь научиться верстать, придётся научиться искать ошибки вёрстки. Чтобы исследовать блоки, часто помогает назначить им цветные границы толщиной в пиксел, либо цветом залить их фон. Тогда будет нагляднее, какой блок где находится, как соотносится с остальными, отступы и пр.

Nex,
Да, я так и делал когда изменял оригинал. И ведь расположение основных блоков в окне правильное, проблема только в позиционировании элементов внутри этих блоков. :( Ладно, завтра буду думать и даже может что и надумаю.

А можно сделать “прыжок” (имею ввиду оператор jump), но такой, чтобы он мог выйти за пределы локации?

Aleks Versus Moderator 11.10.2014 12:20 (11 years ago)

RomaDova:

А можно сделать “прыжок” (имею ввиду оператор jump), но такой, чтобы он мог выйти за пределы локации?

Может это подойдёт?

!#текущая локация
gosub 'другая локация', 'метка'

!#другая локация
if $args[0]!'': jump $args[0]
! ...много-много кода
:метка
! ...много-много кода

Ты exit забыл

Aleks Versus Moderator 12.10.2014 14:44 (11 years ago)

KOLANICH,
ничего я не забыл. exit может и не понадобится. Я предпочитаю вместо exit ставить jump на метку в конце локации.

Простите, друзья, нет сил и времени прочесть 220+ страниц. Подскажите, как с помощью регекса разбить строку, неизвестно из скольки слов (может одно, может - шесть) на слова. Мне нужен именно шаблон регекса. А то сейчас приходится тоже самое делать с использованием цикла. Спасибо.

P.S. Кстати, зашел на http://regex101.com/ нашел подходящий регекс \b(\w+). Но он работает с модификатором g (global). Как в qgen его использовать я не понял.

Edited at 15.10.2014 20:05 (11 years ago)

Алекс, приведи, пожалуйста ещё пару примеров, как ты работаешь со своей базой данных объектов, ну типа, объект находится в локации и ГГ берёт его в руки, или объект перемещается из одной лок в другую. Я это сейчас делаю так:

$inv['ключ'] = 'гостиная'
#Когда ГГ берёт объект, происходит так:
$inv['ключ'] = 'руки'

Спасибо.

Aleks Versus:

Jolly Roger:

пытаюсь сделать что-то вроде сундука, чтоб туда положить, а потом забрать. Или передать одному объекту свойства другого,

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

Spoiler

В двух словах, как “помещать” один объект в другой: У каждого объекта есть идентификатор, т.е. помимо

$object_name[N]='Апельсины'
$object_type[N]='еда, ингредиент'
object_weight[N]=35
object_kolvo[N]=5
...и т.д.

должен быть ещё массив

$object_id[N]='bErTui'

который хранит уникальные идентификаторы объектов. У меня идентификаторы генерируются случайным образом каждый раз, когда создаётся новый объект. Не менее восьми символов (букв и цифр) - и вероятность совпадения двух идентификаторов близка к нулю. И есть ещё один массив:

$object_position[N]='Crkfldl'

В этот массив помещается идентификатор того объекта, в котором хранится текущий объект.
Пример для объектов Склад и Апельсины:

$object_name[N]='Апельсины'
$object_type[N]='еда, ингредиент'
object_weight[N]=35
object_kolvo[N]=5
$object_id[N]='Food:bErTui'
$object_position[N]='Chest:Crkfldl'

$object_name[M]='Склад'
$object_type[M]='хранилище, сундук'
object_weight[M]=0
object_kolvo[M]=0
$object_id[M]='Chest:Crkfldl'
$object_position[M]=''

Основная сложность состоит в том, чтобы научить игру работать с этой базой. Но зато когда всё делано, тебе уже не нужно волноваться и запоминать переменные, отвечающие за одно хранилище, за другое, какие в инвентаре, какие для предметов, какие для облаков.

Есть недостаток у подобных “упрощений” - приходится долго и упорно работать над кодом.

NaaMan:

Простите, друзья, нет сил и времени прочесть 220+ страниц. Подскажите, как с помощью регекса разбить строку, неизвестно из скольки слов (может одно, может - шесть) на слова. Мне нужен именно шаблон регекса. А то сейчас приходится тоже самое делать с использованием цикла. Спасибо.

P.S. Кстати, зашел на http://regex101.com/ нашел подходящий регекс \b(\w+). Но он работает с модификатором g (global). Как в qgen его использовать я не понял.

В qsp нет функций, работающих с модификатором g, т.к. функции возвращают одно значение. Циклом всё равно придется пользоваться.

Aleks Versus Moderator 16.10.2014 08:01 (11 years ago)

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

!ключ
$object_name[0]='Ключ'
$object_id[0]='hGtRfS45'
$object_type[0]='key;'
object_weight[0]=1
object_kolvo[0]=1
$object_position[0]=''
!рука
$object_name[1]='Правая рука'
$object_id[1]='сМуAs34g'
$object_type[1]='bodypart;'
object_weight[1]=0
object_kolvo[1]=0
$object_position[1]=''
!комната
$object_name[2]='Запертая комната'
$object_id[2]='roomIDzk001'
$object_type[2]='room;'
object_weight[2]=0
object_kolvo[2]=0
$object_position[2]=''

Чтобы поместить объект “Ключ” на локации, в $object_position[0] заносится идентификатор локации.

$object_position[0]='roomIDzk001'

Чтобы поместить “Ключ” в руку, в $object_position[0] заносится идентификатор нужной руки.

$object_position[0]='сМуAs34g'

Приведённая выше таблица - гипотетическая. На деле у меня нет такого количества колонок. Все объекты строго типизированы и для каждого типа объекта написана своя как-бы программа-обработчик (назовём это “процедура”). При посещении локации, например, автоматически вызывается процедура, которая выводит список сброшенных на локации предметов в виде действий. Соответственно на каждое типово действие с любым объектом пишется своя процедура: одевание, поедание, чтение и пр.

NaaMan:

Подскажите, как с помощью регекса разбить строку, неизвестно из скольки слов (может одно, может - шесть) на слова.

Думаю, QSP не может обойтись без цикла, хотя мне не совсем ясно, что ты имеешь ввиду.

Похоже, NaaMan пытается парсер сделать.

Nex:

Похоже, NaaMan пытается парсер сделать.

Ну, что-то типа того. Вот, к примеру, оцени: ##text## Это я для своего сына (11 лет) накатал за неделю.

Алекс, а такой вопрос: у разных объектов - разные свойства. Дверь можно открыть, зеркало - разбить. Если попытаться применить “разбить” к “двери”, то ничего не выйдет. Как прописать такие свойства, если можно?

И: можно ли глянуть на какой-нибудь код твоей игры, чтобы попытаться разобраться?

Парсерную игру будет легче сделать на специальном парсерном движке, например RTADS или RInform.

Есть ещё менее популярные, но предположительно более простые в освоении отечественные разработки: 6 дней, TOM.

Log in or Register to post comments.