Как сделать?

Re: Как сделать?

Спасибо, всё работает.

Loner
useravatar
Offline
3 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Не могу найти на форуме ничего про статы гг. Нету примера или может кто знает как прописать банальное здоровье тоже. Для этого я так понимаю надо создать отдельную локацию где прописать
$здоровье = 100
if $здоровье < 0:
ACT 'Поражение':
GOTO 'Поражение'
END
END
Или типо того? Может у кого нибудь пример будет? Или статья.

Loner
useravatar
Offline
3 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Можно просто завести переменную для здоровья; health
Лично я делаю проверку на отдельной локации, так как у меня много чего проверять нужно. Проверку можно делать по разному. Вот мой, самый, простой код проверки;

Код:

if health<0:

gt 'game_over'
end

n3m0
Лентяй
useravatar
Offline
23 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Loner,
перед числовыми переменными не нужно ставить знак $.

Код:

здоровье = 100

Все статы хранятся в переменных. Локация — это просто блок кода, который можно выполнить. Сама по себе локация ничего не хранит.
Обычно все начальные характеристики определяются на самой первой локации в игре:

Код:

здоровье=100

макс_здоровье=100
мана=100
стамина=100

Затем по ходу игры эти показатели могут изменяться. Опять же, работаем с переменными:

Код:

act "Перелезть через колючую проволоку":

   здоровье=здоровье-15
   goto "свобода"
end

Так же распространена практика вывода статистики в окно дополнительного описания. Для этого при изменении каждого параметра, окно доп описания очищается и выводятся все параметры заново:

Код:

act "Перелезть через колючую проволоку":

   здоровье=здоровье-15
   clear
   pl "Здоровье: <<здоровье>>/<<макс_здоровье>>"
   pl "Мана: <<мана>>"
   pl "Стамина: <<стамина>>"
   goto "свобода"
end

Но чтобы не писать целую гору кода, обычно пишут отдельную локацию, которая будет отвечать за вывод в окно доп описания:

Код:

# stat

! это код локации stat, отвечающей за вывод статистики в окно доп описания
clear
pl "Здоровье: <<здоровье>>/<<макс_здоровье>>"
pl "Мана: <<мана>>"
pl "Стамина: <<стамина>>"
- stat

# любая другая локация
act "Перелезть через колючую проволоку":
   здоровье=здоровье-15
   gosub 'stat' & ! обновляем статистику через вызов локации stat
   goto "свобода"
end
- любая другая локация

Aleks Versus
воздвигатель башни
useravatar
Offline
1618 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Приветствую. Как можно придать текстовое значение цифровой переменной? Необходимо сделать описание персонажа, к примеру тип лица, который может менятся в зависимости от ивентов и действий. Пока додумался только до того что бы прописать в первой локации все начальные параметры персонажа сразу в текстовой переменной, а при изменении на какой либо локации, менять через изменение значения текстовой переменной. А хотелось бы что бы Тип лица был записан в цифровой переменной, к примеру Лицо=1, а в описании выводилось <<ЛицоГГ>> такое то.
Вопрос второй. Как вообще можно сделать характеристики персонажа? Отдельной служебной локацией? Тогда каким образом оформить обращение к ней, что бы в результате действия менялись параметры?
Заранее спасибо.

Piksha
useravatar
Offline
8 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

Piksha написал(а):

Как можно придать текстовое значение цифровой переменной?

Никак. Переменные только хранят значения, и только определённого типа. Числовая переменная не может хранить текстовое значение, а текстовая переменная не может хранить числовое. Можно конвертировать значения, когда это возможно, с помощью функций. Подробнее можно прочитать в статье "Преобразование типов в QSP" (альтернативная ссылка).

Piksha написал(а):

хотелось бы что бы Тип лица был записан в цифровой переменной, к примеру Лицо=1, а в описании выводилось <<ЛицоГГ>> такое то.

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

Код:

$название_месяца[1]='Январь'

$название_месяца[2]='Февраль'
$название_месяца[3]='Март'
$название_месяца[4]='Апрель'
$название_месяца[5]='Май'
$название_месяца[6]='Июнь'
$название_месяца[7]='Июль'
$название_месяца[8]='Август'
$название_месяца[9]='Сентябрь'
$название_месяца[10]='Октябрь'
$название_месяца[11]='Ноябрь'
$название_месяца[12]='Декабрь'

Как видишь, это массив, и в нём перечислены названия месяцев в двенадцати ячейках. При этом номера месяцев совпадают с номерами ячеек, в которых эти названия записаны. Таким образом можно удобно считать месяцы в различных формулах по числу, а вывод делать в текстовом виде.

Код:

текущий_месяц=7

*pl "Текущий месяц: "+$название_месяца[текущий_месяц]

То же самое можно сделать и для любых параметров, определять которые нужно числом, а выводить в виде текста:

Код:

! где-то заранее заполняем массив

$лицо[0]='Негр'
$лицо[1]='Белый'
$лицо[2]='Краснокожий'
$лицо[3]='Азиат'
$лицо[4]='Метис'

! теперь можем выбирать рассу, просто изменяя номер
*pl "Ваш персонаж <<$лицо[моё_лицо]>>."
act "Изменить расу":
    моё_лицо+=1
    if моё_лицо>4: моё_лицо=0
    goto $curloc    & ! возвращение на текущую локацию
end

Нужно помнить, что нумерация ячеек массива всегда начинается с нуля!
Теперь что касается вопроса

Piksha написал(а):

Как вообще можно сделать характеристики персонажа?

Это очень невнятный вопрос. Или очень размытый. Все характеристики персонажа хранятся в переменных. "Сделать характеристики" в моём понимании означает "поместить нужные значения в переменные". Как правило, все характеристики задаются в самом начале игры. То есть всем необходимым переменным прописываются необходимые значения:

Код:

$раса="Орк"

возраст=23
вес=125
рост=189
$имя="Грог'Бул"

Что затем можно делать с этими данными? Их можно выводить на экран, и их можно изменять. Следует помнить, что это два разных процесса. Если ты изменяешь значения переменных, это ещё не значит, что ты увидишь их на экране. И если ты выводишь их на экран, это не влияет на их значения.
Чтобы вывести все значения переменных в окно дополнительного описания, нужно использовать соответствующие операторы вывода текста. Например, так:

Код:

clr & ! очищаем окно доп. описания

pl "<<$имя>> (<<$раса>>)
возраст: <<возраст>>
вес: <<вес>>
рост: <<рост>>"

Скорее всего тебе так придётся выводить значения множество раз, поэтому чтобы не писать весь этот код, можно вынести его в отдельную локацию, а уже эту локацию вызывать в удобном для тебя месте. Например, я вынес этот код в локацию "stat" и теперь могу обновить информацию на экране, просто вызвав локацию "stat":

Код:

gosub 'stat'

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

Код:

act "Съесть один килограмм песку":

    вес=вес+1        & ! изменяем значение
    gosub 'stat'    & ! обновляем информацию на экране
end

Aleks Versus
воздвигатель башни
useravatar
Offline
1618 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Благодарю. Еще вопрос -
Для создания времени, использовал код из гайда

 Спойлер Show Spoiler Hide Spoiler
 ! 2440 минут = 1 день + 16 часов + 40 минут
время = 2440

дни = время / (24*60)
часы = (время - дни*24*60) / 60
минуты = время - часы*60 - дни*24*60
*PL 'Время: <<дни>> день, <<часы>>:<<минуты>>.'
Но нигде не нашел обьяснения, каким образом применить время не на одной локации, а что бы оно работало на всём протяжении игры, и менялось в зависимости от действий. Логика подсказывает прописать данный код в отдельной служебной локации, и при каждом изменении времени (к примеру переходе между локациями) обращаться к служебке. Но каким образом это сделать?
Команду gusub понимаю очень смутно, каким образом она работает?

Piksha
useravatar
Offline
8 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Piksha,
Есть служебная локация $ONNEWLOC. Она срабатывает автоматически при каждом обновлении локации. Тебе нужно создать локацию и инициализировать ее на стартовой локации.
$ONNEWLOC=локация - имя локации любое.
Далее, создай локацию с этим именем и помести туда код времени.
Скажу сразу, т.к. $ONNEWLOC используется при каждом обновлении, то чем больше кода туда запихнешь, тем больше будет тугодумить плеер.
Команда gusub заходит на локацию читает и выполняет на той локации код, но переход на ту локацию не осуществляется. Ты остаешься на исходной локации, вот и все. Т.е., вместо gs ты можешь вставлять на исходую локацию тот код, который подгружается с целевой локации. Но, тогда придется на каждой локации дублировать один и тот же код по сто раз, потому и используют gs.

dmvikar
useravatar
Offline
126 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Piksha написал(а):

Благодарю. Еще вопрос -
Для создания времени, использовал код из гайда

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

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

Лично я бы посоветовал набросать сам "алгоритм" на бумаге и осмыслить "что" делать и "как" реализовать.
Написание игр состоит из оперирования переменными и их значением. Шаблонизировать очень полезно для средних и больших проектов. Однако если на данном этапе у тебя трудности - напиши что-то маленькое. По-экспериментируй, закрепи знания. Это и правда полезно и на практике много вопросов решаться сами собой. Открой справку, подумай для чего это использовать, пробегись по функциям, операторам - это даст понимание того, что делаешь и что за что отвечает.

И главное - не бойся ошибаться.
HronoS.

HronoStranger
Странник
useravatar
Offline
39 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

HronoStranger,
Этот код предназначен для подсчета времени из переменной 'время', т.е. ты руками прописываешь время+=10, обращаешься к вышеуказанному коду, и он тебе выводит дни, часы, минуты. Правильность я не проверял.

dmvikar
useravatar
Offline
126 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
1006
Всего опросов:
14
Всего сообщений:
16790890
Всего сообщений сегодня:
2
Пользователи форума:
 
Всего пользователей:
2585
Последним зарегистрировался:
McFly