Как сделать?
…
Каждый лишний Wait может разозлить игрока настолько, что он нажмет Альт+Ф4 и больше не будет играть в ваше творение. Это уже общеизвестный факт.
Каждый лишний Wait может разозлить игрока настолько, что он нажмет Альт+Ф4 и больше не будет играть в ваше творение. Это уже общеизвестный факт.
Тысячу раз да.
Белый Шарик,
Nex,
и бог с ними :) если проигрывается 90 секундная анимация, которую я тщательно создавал и обрабатывал, что мне до игрока, который не хочет досмотреть моё творение до конца? игр пока ещё не миллионы, а интересных игр и того меньше, между тем пользователей намного больше и наверняка найдутся и те, кто любит неспешные игры )))
Есть-ли простой способ(переменная) сделать так что-б при изменении одного параметра менялся другой
что-бы при параметре if сытость<10: , параметр "здоровье" тоже падал
skunsss,
задавай вопрос точнее. Тебе нужно, чтоб один параметр изменялся с течением игрового времени, если другой параметр принял определённое значение.
Проще всего добавить это условие туда, где постоянно пересчитывается время, т.е. в календарь:
Spoiler
JDN = JDNStart + time/1440
hour = (time/60) MOD 24
minut = time MOD 60
weekday = (JDN MOD 7) + 1
! -- кусочек кода, отвечающий за изменение параметров с течением времени --!
if time_last < time and сытость < 10:
! если сытость меньше 10 и последнее значение времени,
! которое мы запомнили, меньше текущего,
! пересчитываем здоровье, для этого
! высчитываем, как долго персонаж голодает в минутах
time_golod = time_golod + (time - time_last)
! предположим, здоровье падает на 10 ед каждый час
! высчитываем, сколько часов персонаж голодает
time_golod_hour = time_golod/60
! запоминаем остаток времени голода
time_golod = time_golod mod 60
! снижаем здоровье на 10 ед каждый час
здоровье = здоровье - time_golod_hour * 10
! обнуляем число часов, которые персонаж голодает
killvar 'time_golod_hour'
! проверяем, жив ли персонаж
if здоровье < 1: goto 'локация_смерти'
end
! -- кусочек кода, отвечающий за изменение параметров с течением времени --!
! после пересчёта всех параметров,
! запоминаем текущее значение времени,
! как последнее значение:
time_last = time
! остальной календарь:
JDa = JDN + 32044
JDb = (4*JDa + 3)/146097
JDc = JDa - (146097*JDb/4)
JDd = (4*JDc + 3)/1461
JDe = JDc - 1461*JDd/4
JDm = (5*JDe + 2)/153
day = JDe - (153*JDm+2)/5 + 1
month = JDm + 3 - 12*(JDm/10)
year = 100*JDb + JDd - 4800 + JDm/10
$hour = iif (hour < 10, '0<<hour>>', '<<hour>>')
$minut = iif (minut < 10, '0<<minut>>', '<<minut>>')
Кстати сюда же можно впихнуть и пересчёт голода и других параметров, изменяющихся с течением времени, а не создавать локации типа !golod, о которых мы говорили в прошлый раз.
Но вообще, по хорошему, нужно пересчитывать параметры не в календаре, а в отдельной локации, которая будет отвечать за изменение времени. Т.е. по аналогии с локацией !golod, которую мы создавали в прошлый раз, нужно написать локацию !time, с таким кодом:
Spoiler
time = time+ args[0]
! -- кусочек кода, отвечающий за изменение параметров с течением времени --!
if time_last < time and сытость < 10:
! если сытость меньше 10 и последнее значение времени,
! которое мы запомнили, меньше текущего,
! пересчитываем здоровье, для этого
! высчитываем, как долго персонаж голодает в минутах
time_golod = time_golod + (time - time_last)
! предположим, здоровье падает на 10 ед каждый час
! высчитываем, сколько часов персонаж голодает
time_golod_hour = time_golod/60
! запоминаем остаток времени голода
time_golod = time_golod mod 60
! снижаем здоровье на 10 ед каждый час
здоровье = здоровье - time_golod_hour * 10
! обнуляем число часов, которые персонаж голодает
killvar 'time_golod_hour'
! проверяем, жив ли персонаж
if здоровье < 1: goto 'локация_смерти'
end
! -- кусочек кода, отвечающий за изменение параметров с течением времени --!
! после пересчёта всех параметров,
! запоминаем текущее значение времени,
! как последнее значение:
time_last = time
И когда изменяешь время в игре, вместо
time = time + 45
пишешь
gosub '!time', 45
Блин, не знаю, в чем ошибка.
Есть комната, есть четыре стороны света. Надо, чтобы нажимая на стрелочки, герой поворачивался в определенную сторону света. Решила реализовать через ссылки. Вот как в коде выглядит:
!локация "начало"
$STYLESHEET='.main {
position:absolute;
height:330px;
width:600px;
}
.left {
position:absolute;
height: 50px;
width: 60px;
top:50;
left:1px;
}
.right {
position:absolute;
height: 50px;
width: 60px;
top:50;
left:985px;
}
.up {
position:absolute;
height: 100px;
width: 200px;
top:10;
left:517px;
}'
!где left - для левой кнопки и right для правой
!первая локация
clr
pl '<div class="left"><a href="EXEC:gs ''кабинет_юг''"><img src="pic/left.png"/></a></div>'
pl '<div class="right"><a href="EXEC:gt ''кабинет_север''"><img src="pic/right.png"/></a></div>'
Дело в том, что стрелочки-то отображаются, только вот они не являются ссылками почему-то. Не изменяется курсор мышки, ничего не происходит. Может кто подсказать, где закралась ошибка?) Если надо, я могу файл игры скинуть
upd Ну если там что, я все-таки скину файл игры, наверное, без него непонятно) ТЫК
Lisichka,
ошибки нет. Напиши
p '<div class="left"><a href="EXEC:gs ''кабинет_юг''"><img src="pic/left.png"/></a></div>'
p '<div class="right"><a href="EXEC:gt ''кабинет_север''"><img src="pic/right.png"/></a></div>'
Дело в переводе строк. Старайся весь html-код писать без переводов строк. Т.е. вместоpl лучше пользуйся p. Особенно после блоков не ставь переводы строк.
Aleks Versus,
О, спасибо! приму к сведению))
Здравствуйте!
(Я не особо шарю в программировании, так что скорее всего это будет немного глупый вопрос)
Я хочу сделать так, чтобы в дополнительном окне описания были статы и показатели моего персонажа, которые динамически бы отражали изменение какого-либо из указанных параметров. Пока что я сделал так: создал отдельную локацию “Статы персонажа” с кодом (просто пример):
CLR
P '<<$charname>>'
PL '<<HP>>/<<HPmax>>'
И теперь для того, чтобы “обновить” окно параметров, мне надо писать
gosub 'Статы персонажа'
в конце любого действия с этими переменными, что лично мне кажется как минимум немного признаком быдлокодинга. Можете ли Вы подсказать эффективный способ осуществления этой затеи?
CH_B_L,
это единственно правильный и надёжный способ.
Впрочем, код можно немного сократить, если сделать локацию для изменения жизней. Тогда можно будет вместо
hp = hp - 10
GS 'stat'
написать
GS 'hp', -10
В локации ‘hp’ изменить переменную и вызвать “stat”.
Nex,
Хм, мне казалось, что можно сделать как то по-другому, но раз уж один из разработчиков (по версии вики) мне так говорит, то значит так оно и есть. Большое спасибо.
И ещё спасибо за совет по сокращению кода - пойду тестировать =)
CH_B_L, теоретически можно в локации каунтер через каждые две-три секунды сделать перерисовку доп описание, тогда не надо будет везде писать gs локация. Но это займёт ресурсы компьютера. И, честно говоря, не уверена, что в таком варианте ничего не будет подвисать. Надо пробовать. Хотя, по идее всё должно работать. Голод и жажду же как-то делали и ничего - не тормозило.
Ajenta,
В моей игре не задействовано реальное время, но за совет спасибо. Однако, теоретически может возникнуть ситуация, когда какой-нибудь стат был изменён, боковая панель “обновится” через секунды 2-3, а игрок посмотрел на старую версию статов и сделал действие, на основе устаревших данных. (например, невнимательный игрок продал что то за 100 монет и хотел купить на все деньги зелий здоровья, но может произойти так, что он купит меньше зелий, поскольку эти 100 монет ещё не отобразились).
Пока что у меня есть мысль такая: поставить в начале каждой локации команду “gosub” с указанием на системную локацию с кучей “PL”-ов и “CLR” в начале. Так же необходимо, чтобы все действия в локации, которые не переводят игрока в другую локацию, заканчивались на “goto $curloc”, а там, где это не возможно, ставить просто тот же самый “gosub” после изменений параметров.
CH_B_L,
Ну, можно и пол секунды поставить.
А вот всё, что в начале локации ставите, лучше ставить в он нью лок. Она как раз выполняется каждый раз при переходе.
приветы! как сделать… короче идея такая, нужно чтобы при запуске ярлычком навигатора появлялось меню выбора, ну к примеру
игра1 или игра2 и в зависимости от выбора игрока запускался соответственно файл start1.qsp или start2.qsp
возможно ли это вообще и как это сделать?