RU 📌 Pinned

Как сделать?

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

RomaDova:

Так, я это и сделал.

Spoiler

Сначала каждому числу дается свое текстовое пояснение

$здоровье[10]="Здоров" 
$здоровье[9]="Слегка ранен" 
$здоровье[8]="Слегка ранен" 
$здоровье[7]="Глубокая рана" 
$здоровье[6]="Глубокая рана" 
$здоровье[5]="Серьезное ранение"

… и т.д.
В игре будет возможность проверить свое здоровье и если оно полное, то бишь переменная “здоровье” равна 10, то будет написано “Здоров”, если упадет до 5 например, то текстовое значение сменится на “Серьезное ранение”, но это по замыслу. В итоге, у меня постоянно отображается “Мертв”, так как это слово присвоено к $здоровье[0], вне зависимости от того, какой на самом деле уровень здоровья. Конечно все можно было бы сделать так

if здоровье=10:
 msg "Здоров"
end

и т.д., но в некоторых случаях, эта штука слишком громоздкая, а я не люблю огроменные строки кода с незнакомыми операторами - в этой куче трудно найти ошибку. Если на то пошло, там вообще трудно что-то найти.

Могу предложить поссмотреть код игры “Крутузная балада” там используется такой принцип с оружием.

А как можно остановить все звуки в игре? Например если из одного диалога игрок перешел в другой, то слова останавливаются?
Каким образом можно “склеить” две игры, если там разные концовки?

Команда CLOSE AL

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

msg $здоровье[здоровье]

Oliver,
не CLOSE AL, а CLOSE ALL.

snail:

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

msg $здоровье[здоровье]

Oliver,
не CLOSE AL, а CLOSE ALL.

Не заметил, дико извиняюсь.

Добрый день, я в программировании новичок, но сценарий к игре лежит уже давно, и я решила воплотить его, но пока не все клеится.
Дело в том, что по идее у героя есть 6 способностей, это: Здоровье, Владение оружием, Ловкость, Вера, Красноречие и Благосостояние. Изначально на выбор даются 4 героя, у каждого есть определенный бонус (или наоборот) к четырем способностям. Например, у воровки такие бонусы: +5 к Владению оружием, +10 к Ловкости, +5 к Красноречию, -5 к Вере. При этом, базовое состояние каждой способности - 50. Вопрос первый: когда я создаю отдельную локацию на каждого выбранного персонажа в начале, как сделать так, чтобы приплюсовать к его базовым навыкам эти бонусы?

И еще вопрос про рандомизатор: в тексте очень часто встречаются проверки на определенную способность - прошел или нет. Раньше я думала с помощью кубика это все делать и приплюсовывать к случайному числу очки способности, но теперь решила перенести все на компьютер и немного запуталась)

вот что у меня выходит, но когда иду проверять, все время пишет ошибку:

Spoiler

l = rand + 105:
if l < 600:
goto ‘не уклонилась’
if l > 601:
goto ‘уклонилась’
end
end
end

помогите разобраться, пожалуйста)

Lisichka:

помогите разобраться, пожалуйста)

Нужно чуть больше контекста. Пока в глаза бросается лишнее двоеточие в конце первой строки. И при l=600 ничего не произойдёт.

Spoiler

l = rand(2,1)
if l = 1:
gt ‘не уклонилась’
if l = 2:
gt ‘уклонилась’
end
end

Как-то так.

Пытаюсь сделать функцию для добавления падежей, что-то не работает.

Case_set
IF Args[1] > 1:
$RESULT = $ARGS[2] + “а”
ELSE
$RESULT = $ARGS[2]
END

Вызываю из другой локации с параметрами:
$s = FUNC(’Case_set’, “раз”, 2)
При печати всегда получаю “раз”, а не “раза”
В чем ошибка?
И еще вдогонку, какая разница между двойными и одинарными кавычками в QSP?

rutigl:

$s = FUNC(’Case_set’, “раз”, 2)

при таком вызове строка “раз” будет в переменной $ARGS[0] а не $ARGS[2]

rutigl:

И еще вдогонку, какая разница между двойными и одинарными кавычками в QSP?

никакой

Lisichka:

l = rand + 105:
        if l < 600:
            goto 'не уклонилась'
        if l > 601:
            goto 'уклонилась'
        end
    end
end

лишнее двоеточие в первой строке
if l > 601: - это условие находится внутри условия if l < 600 и соответственно никогда выполнено не будет

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

А по поводу контекста - количество бонусов должно влиять на шанс игрока выиграть, то есть те, у кого больше ловкости, в проверках на ловкость будут иметь большую вероятность успеха, нежели другие.
я решила это так:

Spoiler

if бонус_ловкость = 1:
l = rnd + 5
if l < 400:
gt ‘не уклонилась’
if l = 400:
gt ‘не уклонилась’
if l > 400:
gt ‘уклонилась’
end
end
end
else
l = rnd
if l < 500:
gt ‘не уклонилась’
if l > 500:
gt ‘уклонилась’
if l = 500:
gt ‘не уклонилась’
end
end
end

Правда, теперь он уверяет меня, что я на первой строчке не поставила end почему-то.

Огромное спасибо, werewolf, я думала, что ARGS[0] - это имя функции

Спасибо, получается, для того, чтобы выполнить все условия, нужно их как-то обособить или вынести отдельно?

Все, спасибо, переделала, вот это вроде работает:

Spoiler

if бонус_ловкость = 1:
l = rnd + 5
if l < 400:
gt ‘не уклонилась’
end
if l = 400:
gt ‘не уклонилась’
end
if l > 400:
gt ‘уклонилась’
end
end
else
l = rnd
if l > 600:
gt ‘уклонилась’
end
if l = 600:
gt ‘не уклонилась’
end
if l < 600:
gt ‘не уклонилась’
end
end

Oliver:

Спойлер
l = rand(2,1)
if l = 1:
gt ‘не уклонилась’
if l = 2:
gt ‘уклонилась’
end
end
Как-то так.

Спасибо, так тоже попробую)

Lisichka:

Спасибо, так тоже попробую

Не надо так пробовать: Oliver ошибся. У него условие if l = 2 находится внутри условия if l = 1.
Правильно писать так:

l = rand(2,1)
if l = 1: gt 'не уклонилась'
if l = 2: gt 'уклонилась'

В данном случае можно обойтись без многострочной формы оператора IF.

Во втором твоём примере лишний end в строке 12. Правильно и компактно написать так:

if бонус_ловкость = 1:
	l = rnd + 5
	if l > 400:
		gt 'уклонилась'
	else
		gt 'не уклонилась'
	end
else
	l = rnd
	if l > 600:
		gt 'уклонилась'
	else
		gt 'не уклонилась'
	end
end

Log in or Register to post comments.