RU 📌 Pinned

Как сделать?

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

Здравствуйте, возникла такая проблема. Я хочу с помощью цикла вывести несколько ссылок(по сути вывожу значения переменных из текстового массива), так, чтобы при нажатии на одну из них возвращался ее порядковый номер. Как это можно сделать?

S.Burner,
можешь более конкретно? Что по сути должно происходить, с точки зрения игрока?

И желательно без терминов программирования вроде “переменная”, “цикл”, “массив”.

Я хочу сделать “служебную” локацию в которую выводятся имена всех персонажей. Игрок должен выбрать одно из них, игра - вернуть некоторую реакцию. Вызывать эту локацию я планирую в разных ситуациях, поэтому мне нужно передать в другую локацию данные о ситуации в которой была вызвана эта служебная локация и данные о персонаже, который был выбран, чтобы уже другая локация выдала какую - то информацию игроку. С первым проблем нет, а вот со вторым - немного не получается.
Делаю я это таким заковыристым образом, потому что игра планируется отчасти как песочница и не все персонажи определены заранее, причем их может быть довольно много.

S.Burner,

i = 0
:loop
IF i < ARRSIZE('$персонажи'):
    'Персонаж <<i>>: <a href="EXEC: выбран_персонаж = <<i>> & GS ''выбрал_персонажа''"><<$персонажи[i]>></a>'
    i = i + 1
    JUMP 'loop'
END

Большое спасибо

Не могу найти такую простую вещь, как смена места расположения окон… Хочу окно с дополнительным описанием разместить слева от основного окна, справа от него инвентарь, а внизу на всю ширину разместить окно действий. И вот нигде не могу найти данную информацию… Подскажите пожалуйста:)

Vadom,
только самостоятельными экспериентами с файлом “qspgui.cfg”. Официальной информации по этой теме, как и задокументированных возможностей, просто нет.

Спасибо:) Беда конечно, ну да ладно, может как то выпытаю у автора игрушки, в которой я это видел:) Выглядит просто удобно, если там размещать фото персонажа, над ним дату, возраст, уровень например… Можете тогда еще один момент осветить, а то я второй день всего знакомлюсь с данным языком:)
Вот видел, причем не в одной игре, в панели инвентаря кнопки. К примеру кнопка статистика, при нажатии на которую выскакивала подменюшка (ее я вроде нашел как делать, правда для кнопок в окне действи) с вариантами статистик. При выборе одного из вариантов высвечивалась нужная статистика в окне доп информации. По другой же кнопке “сумка” открывалась (как я понимаю) локация сумки, в основном окне были изображения предметов, в окне действий кнопка выхода из сумки, при нажатии на изображения предмета опять же высвечивалось его подробное описание с вариантами применения… Короче насколько я понял, работает эта радость так. Кнопка “Инвентарь” служит переходом в локацию “Инвентарь” В ней посредством переменных и прикрепленных к ним изображений (тут не совсем уверен можно ли к переменной прикрепить изображение, но это ладно, это потом). При клике на предмет открывается отдельно созданная локация под этот предмет с подробным его описанием и кнопками в окне действий. Вот если это все я понял правильно, то непонятным для меня остается лишь один момент, как код прописывать в окне инвентаря, если программе есть только окно описания, окно для кода основного окна, окно действий и окно доп описания?
Так то вроде можно мною описанное реализовать через ACT, но вот как его прописать в инвентарь?…

Vadim,

как то выпытаю у автора игрушки, в которой я это видел

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

непонятным для меня остается лишь один момент, как код прописывать в окне инвентаря

Код никогда не прописывается “в инвентаре”.

Вместо этого, код прописывается:

1. В локации-обработчике выбора предмета. Задаётся переменной $ONOBJSEL.

2. В описываемой версии инвентаря, видимо, код (основное описание и действия) прописан в соответствующих авторских “вспомогательных” локациях. Реализация у всех разная. Затык у авторов в основном происходит в том, чтобы уйдя на такую локацию, потом вернуться обратно на ту, где этот инвентарь открыл.

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

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

Спасибо) В виде терминов объяснение не понял, но натолкнуло на мысль, которая вами видимо и была вложена в ответ) Вместо кнопок в окне предметов создаются предметы с названиями этих самых кнопок, а им в значение уже прописывается переход на локацию?) То есть в окно предметов вписывается предмет “Инвентарь”, в значение к которому (или как то так, не силен в терминологии языка) уже прописывается переход на созданную под него локацию. Я по крайней мере так понял) Тогда у меня из насущных вопросов, в которых по вики сам пожалуй не разберусь, осталось лишь подменю при нажатии на предмет… К кнопкам в меню действий я код нашел:

! нет иконки
$usr_menu[0] = ‘Взять предмет:take_item’
! иконка задана gif-файлом
$usr_menu[1] = ‘Положить предмет:put_item:images/put_item.gif’
! иконка задана значением $icon_file
$usr_menu[2] = ‘Осмотреть предмет:look_item:<<$icon_file>>’
! пункт меню задан 3-мя переменными
$usr_menu[3] = ‘<<$name>>:<<$loc>>:<<$file>>’

menu ‘usr_menu’ &! покажет меню из 4-х пунктов

Там как то так же нужно делать?

P.S. Я рад бы попроще, но сама задумка игры требует достаточно развернутого инвентаря и довольно большого кол-ва различных данных типа опыт, ловкость, сила и т.д., что в одном окне будет смотреться слишком громоздко, а вот как без этого их все разбить на удобные отдельные блоки, выдаваемые при выборе различных вариантов статистик я себе слабо представляю) Потому и хочется для начала хотя бы по минимуму разобраться с большей частью интересующих меня деталей интерфейса, а дальше уже садиться писать) Терпения просто писать у меня хватает, но вот если потом придется чуть не половину кода переделывать… Тут уж я в себе не уверен))

Vadim,
в инвентарь добавляются просто предметы.

В момент, когда игрок нажимает предмет в инвентаре, срабатывает вызов локации, имя которой прописано в переменной “$ONOBJSEL”. Эту переменную должен заполнить сам автор. Также он должен сам создать локацию-обработчик, имя которой вписал в переменную.

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

Далее, автор пишет код, в зависимости от того, какой предмет был выбран. Обычно, это вывод описания предмета. Иногда, в локацию добавляются действия. Ну или вызывается контекстное меню, как ты описал.

По завершению обработки, выделение предмета нужно снять, вызвав оператор UNSEL.

Пример.

! Начало игры
$ONOBJSEL = 'ONOBJSEL'

! Локация "ONOBJSEL"
IF $SELOBJ = 'Топор':
    'Хороший топор, острый. Тварь я дрожащая или... Стоп. О чём это я?'
ELSEIF $SELOBJ = 'Лодка':
    'Самая лёгкая лодка в мире. Она зовёт меня отправиться в путешествие.'
END
UNSEL

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

День = 1

значит в таблице(не привожу полный код таблицы)

<td valign="top">Справа от моста расположен магазин оружия. Зайти внутрь?</td>

а, соответственно, если

День = 0

то эта надпись исчезает из таблицы или заменяется на другую.

Upd. Ах да, и еще одно. Как можно по-человечески сделать в текстовой переменной переход на новую строку? Это значит не

$Text = 'Вас зовут Незнайка
'

а как-то

$Text = 'Вас зовут Незнайка' & \n

Ибо по регулярным выражениям на сайте шиш да грош, как использовать - непонятно, примеров нет. В том же ActionScript есть такая клевая функция “newline”.

RealCrazyMan,
1. Как я понял, нужно, чтобы сама ячейка осталась, а текст в ней пропал.

*P '<td valign="top">'
IF День = 1:
    *P 'Справа от моста расположен магазин оружия. Зайти внутрь?'
END
*P '</td>'

2. Записать в переменную - практически никак. Только первым способом, разбивая на две строки.
Для удобства, впрочем, можно завести собственную служебную переменную:

$nl = '
'
$Text = 'Вас зовут Незнайка' + $nl

Адские способы извлечения символа перевода строки из описания или регулярных выражений, приводить не стану, оно тебе не надо.

Nex, Вот спасибо! Все отлично заработало и не пришлось приделывать медные костыли ;)

Log in or Register to post comments.