2017-02-14 58 views
0

我的問題是:我的比賽日應該是真實世界日的1/6。比賽日有12個小時。因此一個遊戲小時實時20分鐘。或者這就是它應該是。但是,當我觀察時間,而不是一個小時20分鐘,實際上是30分鐘。我無法弄清楚是什麼原因造成的。我的功能有什麼問題?如果RL天有6個遊戲日,如何獲得遊戲時間?

public function getGameTime() { 

    $t = time(); 
    $d = $t/60/60/6 - 68646;//the number taken off makes the current time day 200 instead of a really big number 
    $fraction = $d - floor($d); 
    if ($fraction<(1/12)) $hour = 0; 
    else if ($fraction<(1/12)*2) $hour = 1; 
    else if ($fraction<(1/12)*3) $hour = 2; 
    else if ($fraction<(1/12)*4) $hour = 3; 
    else if ($fraction<(1/12)*5) $hour = 4; 
    else if ($fraction<(1/12)*6) $hour = 5; 
    else if ($fraction<(1/12)*7) $hour = 6; 
    else if ($fraction<(1/12)*8) $hour = 7; 
    else if ($fraction<(1/12)*9) $hour = 8; 
    else if ($fraction<(1/12)*10) $hour = 9; 
    else if ($fraction<(1/12)*11) $hour = 10; 
    else $hour = 11; 
    for ($minute = 59; $minute>=0; $minute--) { 
    if ((($hour*60+$minute)/720)<$fraction) { 
     $min = $minute; 
     break; 
    } 
    } 
    return array(
    "day" => floor($d), 
    "hour" => $hour, 
    "minute" => $min 
); 
} 
+1

我不明白你在'$ d = $ t/60/60/6 - 68646;'中的減法。評論沒有幫助... –

+0

看起來像一個作業問題。你做了什麼來調試呢? – jdv

+0

如果我沒有減少任何東西,它會使當前的比賽日68846.我想從一個較小的數字開始,所以我使用減少使一天更小。從技術上講,只要它不會使當前的日子消極,它可以是任何數字。無論天數是68846,200還是1,小時數和分鐘數仍然可以相同計算,因此這部分實際上是不相關的。爲了調試,我觀察了什麼時候改變了時間,並且目前是在一小時之內和在過去30。如果按照預期的方式運行,那將是:00,:20和:40。 –

回答

0

所以,是的,如果我想在一天,我需要通過4除以6分6個4小時時期給了我4個6小時的時段來代替。因爲除數是遊戲當天的實際生活小時數,而不是24小時內的遊戲日數。問題解決了。