RU 📌 Pinned

Как сделать?

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

Белый Шарик #100 18.04.2016 03:04 (9 years ago)

Каждый лишний Wait может разозлить игрока настолько, что он нажмет Альт+Ф4 и больше не будет играть в ваше творение. Это уже общеизвестный факт.

Каждый лишний Wait может разозлить игрока настолько, что он нажмет Альт+Ф4 и больше не будет играть в ваше творение. Это уже общеизвестный факт.

Тысячу раз да.

Белый Шарик,
Nex,
и бог с ними :) если проигрывается 90 секундная анимация, которую я тщательно создавал и обрабатывал, что мне до игрока, который не хочет досмотреть моё творение до конца? игр пока ещё не миллионы, а интересных игр и того меньше, между тем пользователей намного больше и наверняка найдутся и те, кто любит неспешные игры )))

Есть-ли простой способ(переменная) сделать так что-б при изменении одного параметра менялся другой

что-бы при параметре   if сытость<10:   ,  параметр  "здоровье"  тоже падал
Aleks Versus Moderator 24.04.2016 07:19 (9 years ago)

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 Ну если там что, я все-таки скину файл игры, наверное, без него непонятно) ТЫК

Aleks Versus Moderator 27.04.2016 19:29 (9 years ago)

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
возможно ли это вообще и как это сделать?

Log in or Register to post comments.