Как сделать?
…
Oliver,
Спасибо разобрался
Lv2013,
Можете описать как игрок это должен видеть? Я просто не пойму вопроса.
не заметил что создалась еще страница на форуме)
в данный момент я делаю случайные события которые происходят с персонажем от простых типа подобрать монетку до квестов.
ACT 'к выбору': GOTO 'start'
SET чтото = RAND(1)
if чтото = 0 :
*Pl 'Ны заметили что возле вас что то блестит на полу'
ACT 'Посмотреть что на полу?':
IF RAND(0,1) = 1 : money + RAND(1,25) *PL 'Вы нашли пару монет'
ELSE *PL 'Просто мусор'
END
END
END
if чтото = 1 : *Pl 'У вас стащили пару монет'
вот что у меня есть.
хочу построить все на закономерностях и рандомах
Опять-таки может я чего-то не понимаю (скорее всего), но здесь можно все сделать куда проще (и я не знаю, что делает SET, но здесь он точно лишний) Также для приведенного примера не не принципиально gt к другим локациям, поэтому обойдусь без этого.
act 'Запустить случайное событие':
чтото = rand(1,2)
if чтото = 1:
pl 'То одно случается, то другое'
end
if чтото = 1:
pl 'А вот и монетки'
монетки+=rand(1,25)
end
gt $curloc
end
Обратите внимание, что нельзя записывать RAND - вот с одним числом, как вы это сделали. Кроме того, если вы пишите код после “:” в строчку, а не в столбик - end ставить не надо, прочтется весь код справа и только он. Если меняются переменные, такие, как монеты, часто имеет смысл ставить curloc - изменения вступят в силу сразу же.
Странный вопрос, но можно ли сделать так, чтобы была возможность загрузки состояния игры во время срабатывания WAIT
Объясню: в одном из развилок сюжета в моем проекте с герой происходит фальш-смерть. Он переносится на локацию, идентичную обычной локации проигрыша (полагаю, что дойдя до этого момента, игрок будет знаком с этой локацией более чем). Суть в том, что он должен просто подождать, не перезагружаясь - и через какое-то время игра продолжится. Для ожидания я использую WAIT, также я убираю все допменюшки (как и при реальной смерти)… но этот WAIT замораживает любые кнопки, в том числе загрузку. И опытный игрок может заметить этот подвох.
Уже пока писал этот пост, меня осенило, что наверняка есть другие команды по времени, кроме WAIT, мол, запускаем таймер, а когда его значение достигло вот такой величины, срабатывает такое-то событие. Но я забыл их.
mkir,
есть локация-счётчик counter. C её помощью можно делать любые реалтаймовые события. При этом, в отличие от wait, не блокируются ни действия, ни гиперссылки, ни прочие активные элементы.
Задать время, через которое обрабатывается код на локации counter можно с помощью оператора settimer
settimer 20 & ! устанавливаем период обработки counter в 20 миллисекунд.
Время, прошедшее с начала игры можно получить через функцию msecscount.
Для твоего случая, я бы предложил такой способ:
В самой первой локации игры пишем:
$counter='counter'
Создаём локацию с именем counter, где размещаем вот такой код:
if $curloc='название_локации_псевдосмерти' and возрождение<>1:
! если игрок находится на локации псевдосмерти, и "возрождение" ещё не произошло
if timer_resurrection=0:
! если таймер ещё не выставлен, выставляем. Для этого
! записываем в таймер текущее значение времени прошедшего с начала игры, плюс
! время (в миллисекундах), в течение которого игрок должен оставаться на локации,
! чтобы игра продолжилась (30 секунд, для примера)
timer_resurrection=msecscount+30000
end
! теперь проверяем, не достигло ли время, прошедшее с начала игры, времени, записанного
! в таймер, а если достигло, выставляем возрождение=1 и переходим на нужную локацию
if msecscount>=timer_resurrection:
возрождение=1
goto 'локация_возрождения'
end
end
Спасибо! (но уж про counter-то я знаю))
есть такой код:
:Еще
ROL1 = rand(1,6)
ROL2 = rand(1,6)
ROL3 = rand(1,6)
ROL4 = rand(1,6)
ROL5 = rand(1,6)
*pl '<<ROL1>> <<ROL2>> <<ROL3>> <<ROL4>> <<ROL5>> '
!покер
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'Покер!!!'
End
!Покер конец
!каре
if ROL1 ! ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 ! ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 ! ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 ! ROL5 :
set $ROLREZ = 'каре!!!'
End
!каре конец
pl '<<ROLREZ>>'
ACT 'Еще раз?':
jump 'Еще'
END
ACT 'уйти': GOTO 'start'
я все правильно сделал или есть способ это упростить?
Lv2013,
вот это не сработает:
ACT 'Еще раз?':
jump 'Еще'
END
если jump стоит внутри действия, то прыгать он может только на метку внутри действия.
Надо ставить:
ACT 'Еще раз?':
xgoto $curloc
END
xgoto — чтобы надписи не удалялись с экрана.
Хм, странно, зуб даю - у меня jump вполне выбирается и за пределы действия.
у меня тут под спойлером забавная штука, в доп описании переменная свежая а в основном она обнулена.
если я правильно понял мне нужно вывести текст через «выполнить при посещении»
???
к стати не пробовали позиционировать qsp как программирование для начинающих или школы? В этой штуке даже такая ракушка как я могу что то написать )
Lv2013,
а можешь привести полный код, или прикрепить файл игры? Сложно сказать так по скриншоту, почему такая разница. Вижу, что в основное описание значения сначала выводятся, а потом происходит “раздача”. А в доп описании всё нормально. Где-то не там поставил вывод, или немного нарушена логика.
Lv2013:
к стати не пробовали позиционировать qsp как программирование для начинающих или школы? В этой штуке даже такая ракушка как я могу что то написать )
А вот был на форуме человек, который в школе детей на QSP программированию обучал. Но его давно не видно.
Aleks Versus,
проблему с с текстом и переменными решил но все равно у меня ступор с реализацией покера на костях.
вроде все верно но нет ли более оптимального способа написания?
:Еще
ROL1 = rand(1,6)
ROL2 = rand(1,6)
ROL3 = rand(1,6)
ROL4 = rand(1,6)
ROL5 = rand(1,6)
pl '<<ROL1>> <<ROL2>> <<ROL3>> <<ROL4>> <<ROL5>> '
!покер
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'выпал ПОКЕР!!!'
End
!Покер конец
!каре
if ROL1 ! ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 ! ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 ! ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'каре!!!'
End
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 ! ROL5 :
set $ROLREZ = 'каре!!!'
End
!каре конец
if ROL1 = ROL2 and ROL2 = ROL3 and ROL3 = ROL4 and ROL4 = ROL5 :
set $ROLREZ = 'Покер!!!'
End
if ROLREZ = 0:
set $ROLREZ = 'ничего хорошего не выпало.'
end
pl '<<$ROLREZ>>'
*pl 'Бросив кубики выпала такая комбинация:
<<ROL1>> <<ROL2>> <<ROL3>> <<ROL4>> <<ROL5>>
а это значит что<<$ROLREZ>>'
ACT 'Еще раз?':
!jump 'Еще'
XGOTO '02'
END
ACT 'уйти': GOTO 'start'
Lv2013,
Вета в своей игре писала уже этот покер, можно посмотреть код, и что-то понять :)
podzemelya.rar
Oliver,
там сделано сложновато для новичка.
Lv2013,
не проще, но изящнее можно решить через массивы. А так — это самый оптимальный вариант.
