Как сделать?
…
Нужно придерживаться правила. Либо использовать для массива всегда только текстовый индекс, либо всегда только числовой. Тогда нужды в “извлечении текстового индекса” не возникнет.
Что же касается выполнимости самой задачи…
Можно выяснить, какому числовому индексу соответствует известный текстовый индекс. Но текстовый индекс нам должен быть известен заранее.
Также, можно выяснить, присутствует ли вообще в массиве элемент с известным текстовым индексом.
При любом раскладе, автор должен знать заранее значение текстового индекса, чтобы искать его. Извлечь каким-то образом текстовый индекс из массива, кроме как перебором, невозможно. Текстовые индексы хранятся в памяти интерпретатора, но функций чтобы достать их, нет.
Доброго всем времени суток.Итак,мои вопросы:
1)Как сделать в игре смену дня и ночи,чтобы на каждое действие уходило какое-то время.(Только не нужно отсылать меня смотреть раздел время,я его читал,там слишком мало информации)Например в 21:00 базар закрывается,а в 7 открывается.И самое главное - отсчёт дней недели.
2)Также хотелось бы спросить про навыки и вероятности.Например,как прописать возможность нападения на моего героя волков в лесу ночью?Я видел в начале страницы посты про команду RAND или Rnd,но там несовсем понятно обьясняют.
3)Как мне прописать зависимость вероятности от навыков.Например,если навык ловли рыбы = 7,то вероятность поймать рыбу была бы 20% + <<Навык ловли рыбы>> = 27% ?
4)Ещё в некоторых играх я видел,что есть не три,а 4 или 5 окошек ,и именно в них отображается время,навыки и т.д.Это какая-то другая версия плеера или AeroQSP?Или может быть можно сделать какую-нибудь вещь,и из неё смотреть характеристики и время?
P.S.Вообще у вас чудесный обучающий материал,я,человек с нулевыми знаниями,уже на второй день могу хоть что-то сотворить,но этого мало:тебя обучают простейшим вещам,но чтобы сделать что-то интересное,нужно многое уметь.
extensive:
1)Как сделать в игре смену дня и ночи,чтобы на каждое действие уходило какое-то время.
Ответ есть в FAQ: Как сделать время?
Открывай пример, запускай, читай, разбирай код. Что будет непонятно, спрашивай.
extensive:
Например в 21:00 базар закрывается,а в 7 открывается.
дни = время / (24*60)
часы = (время - дни*24*60) / 60
IF (часы >= 7) AND (часы < 21):
'С базара слышится оживлённый гомон. Торговцы, зазывалы, покупатели, попрошайки. Ворота приветливо распахнуты.'
ACT 'Зайти':
GOTO 'Базар'
END
ELSE
'Базар закрыт. Приду утром.'
END
extensive:
И самое главное - отсчёт дней недели.
! В начале игры
$неделя[1] = 'Понедельник'
$неделя[2] = 'Вторник'
$неделя[3] = 'Среда'
$неделя[4] = 'Четверг'
$неделя[5] = 'Пятница'
$неделя[6] = 'Суббота'
$неделя[7] = 'Воскресенье'
! В месте с расчётом текущего дня недели
дни = время / (24*60)
день_недели = (дни MOD 7) + 1
'Сегодня <<$неделя[день_недели]>>.'
IF день_недели = 3:
'Извините, среда - санитарный день.'
END
extensive:
3)Как мне прописать зависимость вероятности от навыков.Например,если навык ловли рыбы = 7,то вероятность поймать рыбу была бы 20% + <<Навык ловли рыбы>> = 27%
Это ж просто. Вероятность попадания в одно число из ста как минимум один к ста. Значит попадание в двадцать семь чисел из ста - это грубо 27%.
! задаём вероятность (в тысячных долях):
вероятность = 200
! задаём навык (в тысячных долях):
навык_ловли = 70
! выбрасываем случайное число от 1 до 1000
случай = RAND (1,1000)
! сравниваем выпавшее значение со значением вероятность+навык
if случай > вероятность + навык_ловли:
! если выпавшее число больше 270 - не повезло
*pl "Ты не поймал рыбу"
else
! если меньше - повезло
*pl "Ты поймал рыбу"
end
extensive:
Ещё в некоторых играх я видел,что есть не три,а 4
В классическом плеере 4 окошка по-умолчанию.
Aleks Versus,
5.
Большое всем спасибо! :) Пойду разбираться
P.S.Ещё один тупой вопрос:У меня такой алгоритм:
ACT’Охотиться на уток’:
If Ружье >= 1:
ADDOBJ’Утка’
ELSE
‘Из пальца никого не затрелишь:нужно ружье’
end
end
Проблема такая:когда у тебя нету ружья тебе выскакивает то,что я написал,но если нажать два и больше раз,то ’тот текст “Из пальца никого не затрелишь:нужно ружье” беспонечными строчками проецируется вниз,Хотелось бы,чтобы только 1 раз.Пробовал $Curloc , GOTO Curloc , GOTO ‘Озеро’(изначальная локация),но тогда текст вообще не появляется.
Самое простое решение - убрать это действие:
ACT'Охотиться на уток':
If Ружье >= 1:
ADDOBJ'Утка'
ELSE
'Из пальца никого не затрелишь:нужно ружье'
DELACT $selact
end
end
Самый простой вариант:
ACT 'Охотиться на уток':
IF Ружье >= 1:
ADDOBJ 'Утка'
ELSE
*CLR
'Из пальца никого не заcтрелишь: нужно ружье.'
XGOTO $CURLOC
END
END
Если нужно, чтобы действие исчезало после выдачи предупреждения, добавляем переменную:
IF (нужно_ружье = 0) OR (Ружье >= 1):
ACT 'Охотиться на уток':
IF Ружье >= 1:
ADDOBJ 'Утка'
ELSE
нужно_ружье = 1
*CLR
'Из пальца никого не заcтрелишь: нужно ружье.'
XGOTO $CURLOC
END
END
END
Вариант Ньюсаша подойдёт только в том случае, если допустимо, что при любом обновлении локации (будь то переход с другой локации, либо перезаход на текущую по GOTO $CURLOC), действие появится заново.
Nex,
пятое - поле ввода? Забываю его считать.
подскажите пожалуйста как установить максимальное и минимальное значения для жизни, маны и т.д.?
ЗакТеррен:
подскажите пожалуйста как установить максимальное и минимальное значения для жизни, маны и т.д.?
Легко. Создай локацию счетчик, в которой выставь
if HP>максимальное_HP:
HP=максимальное_HP
end
спасибо
RomaDova:
Создай локацию счетчик
На форуме вопрос уже много раз обсуждался. Подход с локацией-счетчиком, хоть и выглядит простым и понятным, но ошибочен.
Нормальным путём будет сделать, например, локацию “change_HP” с кодом
HP = HP + args[0]
if HP > max_HP: HP = max_HP
if HP < min_HP: HP = min_HP
и менять здоровье вызовом этой локации:
!Добавим 10 HP
GS 'change_HP', 10
!Отберём 20 HP
GS 'change_HP', -20
Когда по игровой механике допустим кратковременный выход параметра за границу (например, было 10/10, вылечили на 5 и ударили на 12 в течение одного хода 10+5=15, 15-12=3 или 10-12=-2, -2+5=3), то нужен другой подход - сделать локацию ‘check_HP’ и выполнять её перед моментом, когда HP должно укладываться в рамки.
спасибо
а еще такой вопрос: количество денег в дополнительном описании не меняется, а в основном описании меняется
подскажите в чем может быть причина, почему в дополнительном не меняется?
ЗакТеррен,
основное описание меняется при каждом обновлении локации. При переходе на эту локацию с другой, или при перезаходе на текущую (”GOTO $CURLOC”).
Дополнительное описание, обновляется только принудительно. Для его обновления нужно специально написать вызов очистки окна и заполнить по новой.