RU 📌 Pinned

Как сделать?

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

kosmosnash,
это пример для пояснения, что N-ое количество минут можно по описанным формулам разложить на дни, часы и минуты. Цифра взята случайная, ради примера.

Nex:

kosmosnash,
это пример для пояснения, что N-ое количество минут можно по описанным формулам разложить на дни, часы и минуты. Цифра взята случайная, ради примера.

Аааа… Допер, спасибо! :B:
А для дней недели и годов стоит оставить луп?

kosmosnash,
слово “все” означает “все”.

Nex:

kosmosnash,
слово “все” означает “все”.

Как в таком случае сделать, чтобы вся эта борода корректно работала?

Spoiler

:loop_weekday
if weekday >= 8:
weekday -= 7
jump ‘loop_weekday’
end

:loop_number
if number >= 31:
number -= 30
month += 1
penaltyPoints-=10
if penaltyPoints<0: penaltyPoints=0
jump ‘loop_number’
end

:loop_year
if month >= 13:
month -= 12
year += 1
jump ‘loop_year’
end

А то теперь с месяцами и днями недели полный треш творится

И эта конструкция перестала корректно работать

if hour >= 24:
weekday += 1
hour -= 24
number += 1
end

дни переключаются и часы сбрасываются, а вот дни недели (weekday) вообще не реагируют

По аналогии.

год = дни / 360
месяц = дни / 30 - год * 12 + 1
день_месяца = дни MOD 30 + 1
день_недели = дни MOD 7 + 1

kosmosnash,
я же сказал всё это убрать. Это значит убрать, удалить, стереть. Насовсем, окончательно и бесповоротно. А не “заставить корректно работать”.

В статье Игровое время, а также в прилагающемся примере (его обязательно скачай, запусти в плеере, открой в редакторе), описан принцип работы:

1. Время хранится в минутах в переменной “время”.

2. При необходимости, например, вывод текущего времени на экран, или проверки условий, время “раскладывается” на дни, часы и минуты по приведённым формулам.

3. Время “увеличивается” при совершении какого-нибудь действия, изменением переменной “время”. Потратили пять минут - прибавили в переменную “время” 5, потратили два часа - прибавили туда же 120. И так далее.

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

Самый упрощённый вариант:

! Извлекаем количество полных дней с начала игры.
дни_со_старта_игры = время/(24*60)
! Год, месяц, число.
! Для простоты принимаем, что в месяце 30 дней, первый день игры понедельник.
! Без високосных лет и прочего излишнего "реализма".
! В году получится 12*30=360 дней.
прошло_лет = дни_со_старта_игры/360
год = прошло_лет + 1
прошло_месяцев = (дни_со_старта_игры - прошло_лет*360)/30
месяц = прошло_месяцев + 1
число = дни_со_старта_игры - прошло_лет*360 - прошло_месяцев*30 + 1
! День недели.
недели_со_старта_игры = дни_со_старта_игры/7
день_недели = дни_со_старта_игры - недели_со_старта_игры*7 + 1

Да понял я принцип работы этой фишки. Я лишь хотел спросить как при всем этом заставить дни меняться через нужное количество минут. И файлик я давно скачал и изучил, и время работает отлично, а вот дни все так же…
И оба представленных примера ситуации не помогли.
В общем, сам чего-нибудь надумаю

как при всем этом заставить дни меняться через нужное количество минут

приведи неработающий код. Но только целиком. Желательно в виде файла, так как авторы имеют привычку забывать самые нужные куски кода и переписывать его находу прямо в сообщениях форума.

Также напиши:
1. Как оно должно работать (с точки зрения восприятия игрока, а не с точки зрения автора);
2. Как оно на самом деле работает (в чём отличие от ожидаемого).

Spoiler

clr
!Время
день = время / (24*60)
hour = (время - день*24*60) / 60
minutes = время - hour*60 - день*24*60
!дни
year = день / 360 + 1
month = (день - year*360)/30 + 1
number = день - year*360 - month*30 + 1

weekday = день/7
неделя = день - weekday*7 + 1

if неделя = 1: $неделя = ‘Понедельник’
if неделя = 2: $неделя = ‘Вторник’
if неделя = 3: $неделя = ‘Среда’
if неделя = 4: $неделя = ‘Четверг’
if неделя = 5: $неделя = ‘Пятница’
if неделя = 6: $неделя = ‘Суббота’
if неделя = 7: $неделя = ‘Воскресенье’

If month = 1: $month = ’01’
If month = 2: $month = ’02’
If month = 3: $month = ’03’
If month = 4: $month = ’04’
If month = 5: $month = ’05’
If month = 6: $month = ’06’
If month = 7: $month = ’07’
If month = 8: $month = ’08’
If month = 9: $month = ’09’
If month = 10: $month = ’10’
If month = 11: $month = ’11’
If month = 12: $month = ’12’

clr
p ‘<center>’
p ‘<table cellpadding=10 cellspacing=0 border=1>’
p ‘<tr><td><center><img src=“pic/clock.png”></center></td>’
p ‘<td><center><img src=“pic/kalendar.png”></center></td>’
p ‘<td><center><img src=“pic/koshelek.png”></center></td></tr>’
if minutes >= 0 and minutes < 10:
p ‘<tr><td><center><b><<hour>>.0<<minutes>></b></center></td>’
else
p ‘<tr><td><center><b><<hour>>.<<minutes>></b></center></td>’
end
p ‘<td><center><b><<number>>.<<$month>>.<<year>>. <<$неделя>></b></center></td>’
p ‘<td><center><b><<money>>$</b></center></td></tr>’
p ‘</table>’
p ‘</center>’
p ‘</table>’
p ‘</center>’

параметр “время” задан в стартовой локации

1. должно работать так, как работало со старым кодом:
http://www.imagebam.com/image/5fe792380107864

2. сейчас это выглядит так:
http://www.imagebam.com/image/cdec36380107868

kosmosnash,
да, немного не тот код у меня был. Единицу нужно было прибавлять только для вывода конечных значений, а при расчёте не использовать.

Переписал часть после комментария “В году получится 12*30=360 дней.”:

прошло_лет = дни_со_старта_игры/360
год = прошло_лет + 1
прошло_месяцев = (дни_со_старта_игры - прошло_лет*360)/30
месяц = прошло_месяцев + 1
число = дни_со_старта_игры - прошло_лет*360 - прошло_месяцев*30 + 1

вроде работает. Только я еще последнюю строчку переделал

numbers = день - years*360 - monthes*30
number = numbers + 1

Ну по аналогии, в общем.

Еще такой вопрос: нужно выставить 2015 год. я решил часть “201” оставить статичной, а “5” прикрутить в переменной “время”. Для этого пришлось задать
время = 2100000
Такое число в долгосрочной перспективе не будет критичным?

Сам нашел решение. Просто введу еще одну переменную, равную year + 2014 :)

И тем не менее, месяц, доходя до 12 остается таковым насовсем, дни сбрасываются на 1, а месяц остается 12, год не меняется вовсе =(

kosmosnash,
давай код.

Spoiler

clr
!Время
день = время / (24*60)
hour = (время - день*24*60) / 60
minutes = время - hour*60 - день*24*60

years = день/360
year1 = years + 1
monthes = (день - yearS*360)/30
month = monthes + 1
numbers = день - years*360 - monthes*30
number = numbers + 1

weekday = день/7
неделя = день - weekday*7 + 1

year = year1 + 2014

Spoiler

И еще… вот с этой штукой разобрался, работает. Только как можно зациклить этот момент. Т.е. чтобы нужное действие происходило каждый день (поход на работу).
Ввожу новую переменную рабочий_день = 1 при поступлении на работу
обнуляю ее при прохождении работы
где прописать возврат значения 1?

! Если меч ещё не ковали,
IF меч_куётся = 0:
меч_куётся = 1
деньги = деньги - 1500
! Засекаем время первого визита, в днях (в какой день пришёл).
пришёл_в_первый_раз = время/(24*60)
‘Кузнец почесал бороду и говорит: - Будет тебе меч. Приходи завтра.’
END
! При следующем визите, проверяем, что меч куётся, и что наступил следующий день.
сегодняшний_день = время/(24*60)
IF (меч_куётся = 1) AND (сегодняшний_день - пришёл_в_первый_раз >= 1) AND (меч_получил = 0):
меч_получил = 1
! Наступил следующий день.
‘Кузнец увидел тебя, усмехнулся и кивком показал на стол. Прекрасный клинок. То, что нужно!’
ADDOBJ ‘меч’
END

kosmosnash,
полностью приведи код. Тот кусок, что ты показал, сам по себе 100% рабочий, я его проверил. Ошибка где-то в другом месте.

зациклить этот момент. Т.е. чтобы нужное действие происходило каждый день (поход на работу).
Ввожу новую переменную рабочий_день = 1 при поступлении на работу
обнуляю ее при прохождении работы
где прописать возврат значения 1?

Ничего не понял. Объясни, что ты пытаешься сделать в игре, как это должно выглядеть с точки зрения игрока. Без понятий программирования типа “переменная”, “значение”, “локация”, и т.п.

Log in or Register to post comments.