RU 📌 Pinned

Как сделать?

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

Dark[Ol(U23)leneri] #34 14.05.2010 21:34 (15 years ago)

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

Потратив 2 дня, а может даже намного больше на попытки хоть как-то организовать предметы, я пришел к следующему:

Начало:

usehtml=1

$действие_дождь[0]=‘open:open’
$действие_дождь[1]=‘pick:pick’

$действие_ветер[0]=‘open:open1’
$действие_ветер[1]=‘pick:pick1’

$предмет[0]=‘Дождь’
$предмет[1]=‘Ветер’

$описание[0]=‘Дождик продолжает капать. Обычный летний дождь.’
$описание[1]=‘Ветерок приятно освежает’

if no obj ‘Дождь’: ‘<a class = ‘‘plain’’ href=“EXEC: menu ‘‘$действие_дождь’’ “><<$предмет[0]>></a>’

if no obj ‘Ветер’: ‘<a class = ‘‘plain’’ href=“EXEC: menu ‘‘$действие_ветер’’ “><<$предмет[1]>></a>’

pick:

add obj ‘Дождь’
goto ‘Начало’

pick1:

add obj ‘Ветер’
goto ‘Начало’

open:

‘<<$описание[0]>>’

open1:

‘<<$описание[1]>>’

И это только, чтобы предметы работали в основном окне… Для инвентаря можно взять пример…
А надо ли? я тут подумал… выходит, что add obj добавляет не obj, а всего-лишь строку в инвентаре. Бессмысленную бесполезную строку…
Не лучше ли сделать например так:
Добавить оператор create obj со следующим синтексом
create obj ($Название_объекта:локация_обработчик, число=кол-во_действий, перечисление_действий_через_запятую )
А после этого создавалась бы локация_обработчик, где шаблоном бы вставлялись например:
if seloption (забыл сказать… пусть это будет функция выбранного действия) =‘название_действия’: ну и соответственно что происходит. end

А еще желательно добавление библеотек шаблонов, а не отдельных примеров…
И все-таки сделайте меню быстрого вызова команд… чтобы нажимаешь и он тебе сам выводит arros(число, $массив, $значение)

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

Dark,
“строка в инвентаре” нужна, в первую очередь, для того, чтобы игрок видел, какие предметы у него с собой;
во вторую очередь, для упрощенного “учета” игровых предметов - спец. операторы ADDOBJ, DELOBJ и функция проверки наличия предмета OBJ не только экономят код, но и делают его более понятным, читаемым.

OBJ - не “объект” в программерском понимании этого слова, а просто “предмет”, вещь в заплечном мешке, единица игрового мира.

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

Обычная игровая логика, поясню на примере:

Есть игровая локация “Комната”. Будем считать, что эту локацию можно посетить многократно(распространенная ситуация).
На локации есть предмет “ключ”. Наличие предмета на локации хранится в переменной “комната_ключ”.

#Комната
! описание локации:
*PL ‘В комнате пусто.’
! часть описания локации, которая зависит от наличия предмета:
IF комната_ключ=0:
*PL ‘На полу лежит ключ.’
END

! действия:

! переход на соседнюю локацию
ACT ‘Подойти к двери’: GOTO ‘Дверь’

! если ключ находится на локации, игрок может его подобрать:
IF комната_ключ=0:
ACT ‘Взять ключ’:
! добавляем предмет в инвентарь
ADDOBJ ‘ключ’
! не забываем установить переменную
комната_ключ=1
! делаем переход на эту же локацию, чтобы обновилось описание и список действий
GOTO $CURLOC
END
END
-
#Дверь
*PL ‘Вы подошли к двери. Дверь заперта.’

ACT ‘Вернуться’: GOTO ‘Комната’

! если у игрока есть с собой ключ, можно открыть дверь и выйти
IF OBJ ‘ключ’:
ACT ‘Открыть дверь и выйти’: GOTO ‘коридор’
END

Dark[Ol(U23)leneri] #34 16.05.2010 08:54 (15 years ago)

Это я уже умею. Спасибо игре 7.40. Речь-то сейчас о другом… речь именно о том, чтобы было одинаково просто сделать игру без использования ACT и с использованием данного оператора… надеюсь это оператор.
Ну просто реально… я тут подумал, что так было бы намного удобнее… я понимаю, что на данный момент obj является скорее визуальной составляющей, чем информационной) Но мне хочется именно понавешать действий на объекты в локации… как-то так…

Если хочешь сделать игру “чисто на ссылках”, тебе необходимо очень хорошее знание QSP.
Въехать “с ходу” во все тонкости вряд ли выйдет, даже с нашей помощью.

Попробуй сначала сделать игру попроще, со стандартными действиями (ACT), получишь базовые навыки, тогда и за технические ухищрения можно будет браться.

Пока что, из твоих сообщений я даже не понимаю, в чем именно проблема.

Всем привет. Я полный новичёк в роли разработчика игр. Сейчас я пытаюсь сделать игру по “Вселенной Метро 2033” только в Минске. У меня очень много вопросов=)
Начну с того для чего нужно поле “Выполнить при посещении”? И для чего “Базовые действия”?
Лично я использую раздел “Базовые действия” для вставки кода на переход в другую локацию.

Dark[Ol(U23)leneri] #34 17.05.2010 13:10 (15 years ago)

Nex:

Если хочешь сделать игру “чисто на ссылках”, тебе необходимо очень хорошее знание QSP.
Въехать “с ходу” во все тонкости вряд ли выйдет, даже с нашей помощью.

Да уже вышло хД

Nex:

Попробуй сначала сделать игру попроще, со стандартными действиями (ACT), получишь базовые навыки, тогда и за технические ухищрения можно будет браться.

7.40 - на мой взгляд достаточно опыта.

Nex:

Пока что, из твоих сообщений я даже не понимаю, в чем именно проблема.

я предлагаю добавить функцию Предмета, которая была бы одинаково активна как и в инвентаре так и в описаниях… ну в самом тексте игры)

Максим:

Всем привет. Я полный новичёк в роли разработчика игр. Сейчас я пытаюсь сделать игру по “Вселенной Метро 2033” только в Минске. У меня очень много вопросов
Начну с того для чего нужно поле “Выполнить при посещении”? И для чего “Базовые действия”?
Лично я использую раздел “Базовые действия” для вставки кода на переход в другую локацию.

Максим, советую для начала скачать примеры и, также для начала, можно скачивать легкие игры с открытым кодом - это очень помогает.
Например, для обучения отлично подойдут игры с конкурсов “Вжжж” и “TWIFcomp”. Говорю как новичек новичку)

Оператор “create obj” не нужен.

Dark[Ol(U23)leneri] #34 17.05.2010 13:56 (15 years ago)

:D :D :D
я ведь знал, что пошлете… блин… а ведь на деле получается, что QGen - это не прога для писателей, а прога для программистов.

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

добавить функцию Предмета, которая была бы одинаково активна как и в инвентаре так и в описаниях… ну в самом тексте игры)

Не понимаю.

Максим,
Написал тебе в ЛС.

Dark,
QGen - для авторов текстовых игр, а они, как правило, немножко писатели и немножко программисты.

Давай придерживаться темы - вопросы “как сделать?”

Dark[Ol(U23)leneri] #34 17.05.2010 14:16 (15 years ago)

Nex:

QGen - для авторов текстовых игр, а они, как правило, немножко писатели и немножко программисты.

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

Nex:

Давай придерживаться темы - вопросы “как сделать?”

Окей

После просмотра примеров на сайте заинтересовала реализация одного из них но более интересным способом
В примере rpg.gam в начале есть момент повышения скила в зависимости от количества очков. Все прекрасно работает только есть проблема
Проблема: как сделать чтобы после выбора скила он пропадал. (не пойму пока я тут массивы IF)
Объяснение : Есть переменная Скилл=0. При нажатии на выбор скила она изменяется на if Скилл=0: cls & Скилл=Скилл+1 в результате чего он должен пропасть из доступного выбора.
Не пойму этот момент.
=======================Вопрос снят решение найдено================

gr1mm3r,
Для того, чтобы наличие действия на локации зависело от переменной, в твоем случае следует задать действия в коде - область “выполнить при посещении”.

Например, у тебя есть базовое действие “Выбрать скилл мечника”, с кодом “Скилл=Скилл+1 & XGOTO $CURLOC”.
Записываем его в коде локации:

ACT ‘Выбрать скилл мечника’:
Скилл=Скилл+1 & XGOTO $CURLOC
END

Оборачиваем его в условие, чтобы действие появлялось только если Скилл=0

IF Скилл=0:
ACT ‘Выбрать скилл мечника’:
Скилл=Скилл+1 & XGOTO $CURLOC
END
END

Можно в коде действия написать if скилл=0:delact $selact

Byte,
вернее,

if скилл=0: скилл=1 & delact $selact

Этот способ хорош, но подходит только для локаций, посещаемых один раз за всю игру.

Впрочем, можно и так, и так.

Log in or Register to post comments.