2013-09-18 3 views
1

Я делаю игру в Lua - в частности, Corona SDK - и я застрял на бонусе за здоровье (игрок получит бонус здоровья каждые 4 часа), а во второй части игрок будет получите бесплатное вращение игры с колесиком, которое даст им шанс выиграть бесплатные предметы, которые будут использоваться в игре.Как получить приуроченный бонус

Часть, которая меня действительно сбивает с толку, как мне получить точный бонус, чтобы быть точным (например, каждые 4 часа и один раз в день), чтобы погасить функции для бонусов? Я также хочу, чтобы там был таймер обратного отсчета, показывающий часы: минуты: секунды до того, как можно будет получить следующий доступный бонус. Это невозможно сделать?

Вот некоторые из моего кода до сих пор ...

function hourlyBonus() 

    local date = os.date("*t") 
    local currentHour = date.hour 
    lastHourlyBonusClaimedHour = 
     GameSave.lastHourlyBonusClaimedHour or date.hour 

    --account for the 24 hour clock   
    if currentHour > 12 then 
     currentHour = currentHour - 12 
    end 
    if lastHourlyBonusClaimedHour > 12 then 
     lastHourlyBonusClaimedHour = lastHourlyBonusClaimedHour - 12 
    end 

    if currentHour == (lastHourlyBonusClaimedHour + 4) then 
     lastHourlyBonusClaimedHour = currentHour 
     -- increase the bonus 
     print("New 4 hour bonus ThisHour is: " .. thisHourNum) 
    else 
     local hoursToWait = (4 - (currentHour - lastHourlyBonusClaimedHour)) 
     --have to wait for hourly bonus 
     print("Have to wait: " 
      .. hoursToWait .. "hours, " 
      .. minutes .. "minutes, and " 
      .. second .. "seconds to collect hourly Bonus still!" 
     ) 
     print("CurrentHour is:" .. currentHour) 
     print("LastHourlyBonusClaimedHour is :" .. lastHourlyBonusClaimedHour) 
    end     

    GameSave.lastHourlyBonusClaimedHour = lastHourlyBonusClaimedHour 
    GameSave:save()   
end 

Если кто-то имеет некоторые примеры кода я мог бы посмотреть или показать мне, как это сделать, я бы очень признателен!

ответ

1

Я думаю, что вы делаете это слишком сложным для себя. Если вы хотите, чтобы вычислить разницу между временем сейчас и следующим бонусом (или последним бонусом) до секунд, вам нужно захватить количество секунд, когда вы дали бонус и добавить 4*60*60 к нему:

local lastbonus = os.time() - 1*60*60 - 2*60 - 30 -- 1 hour, 2 minutes, 30 seconds ago 
local nextbonus = lastbonus + 4*60*60 
local timeleft = nextbonus - os.time() 
print(timeleft > 0 and os.date("!Left %H:%M:%S", timeleft) or "Bonus time!") 

Это должно вернуться/print Left 02:57:30.

[Обновлено на основе комментария lhf; спасибо Luiz!] Обратите внимание, что ! в os.date вызов является частью формата, указывающего дату, которая будет отформатирована в режиме «Скоординированное универсальное время», и не будет отображаться на выходе.

+0

Последние 4 строки могут быть заменены на 'print (timeleft> 0 и os.date ("! Left% H:% M:% S ", timeleft) или" Бонусное время! ")'. – lhf

+0

Итак, в первой строке «1 час, 2 минуты, 30 секунд назад» есть или должна быть/может быть переменной, когда был заявлен последний бонус? Кроме того, что, если кто-то отрегулирует время на своем устройстве, это даст им несколько бесплатных бонусов за здоровье? Как я буду кодировать эту проблему? с утверждением if? –

+0

«1 час, 2 минуты, 30 секунд» был всего лишь примером для кодирования. Вы хотите, чтобы 'lastbonus' устанавливался на основе того, когда был присвоен этот бонус (или' nil' изначально и некоторая логика для его обработки). Что касается регулировки времени, пусть они это делают; когда они отрегулируют его назад, они потеряют некоторые другие точки здоровья, поэтому в среднем они будут одинаковыми. Если вы хотите запретить это, у вас есть какая-то контрольная точка, где периодически проверяйте время проверки и сбросите все точки здоровья, если вы обнаружите неожиданные изменения времени. –

Смежные вопросы