Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie czasu, ale inaczej
Forum PHP.pl > Forum > Przedszkole
Daimos
Jak w temacie... chce zrobic w pewnej grze czas, wyswietlanie godziny
z tym ze w grze jeden dzien bedzie trwal przykladowo 5 godzin, wiec gdy minie 15 godzin gry, chce zeby wyswietlilo sie:
dzien 3 godz: 00:00

czas jest liczony non stop, od momentu kiedy ja to ustale, a nie od momentu rozpoczecia gry przez uzytkownika

Ktos pomoze snitch.gif ?

bo niemam pojecia jak sie wogule za to zabrac, tzn mysle jakos zeby wykorzystac tu
time() ale jak ? biggrin.gif
dr_bonzo
Jesli zmiescisz sie w zakresie 1970--203X to uzyj integera ktorego bedziesz inkrementowal np. 4 razy na sekunde (dzien w grze trwa 1/4 doby rzeczywistej) i liczysz roznice w dniach / godzinach od jakiejs poczatkowej daty.
Daimos
zmieszcze sie w czasie winksmiley.jpg
ale szczerze mowiac nic nie rozumiem z tego co napisales sad.gif
zrobilem cos takiego:
  1. <?php
  2. $start = 1114541967;
  3. $teraz = time();
  4. $ingame = $teraz - $start;
  5.  
  6. ?>

i pod zmienna $ingame mam juz czas gry w sekundach, teraz jak to przeliczyc odpowiednio zeby mi wyswietlalo godzine i dzien gry


przykladowo niech minuta w grze wynosi 20 sek, co daje 3 doby dziennie.. moze i tak byc snitch.gif

no wiec minuta w grze to bedzie :
  1. <?php
  2. $minuta = floor($start / 20);
  3.  
  4. ?>

no ale co mi to da, jezeli minie 70 minut to mi wyswietli 70 minut, a nie 01:10 sad.gif
rogrog
liczysz różnice w sekundach między datą rozpoczęcia i datą obecną, mnożysz razy np. 4, przeliczasz na dni, godziny, minuty i sekundy i juz.
dr_bonzo
Moze inaczej:

(1 doba rzeczywista == 5 dob w grze)

gra rozpoczyna sie o czasie X
user wlacza strone i pobierasz dla niego aktualny czas: Z = time()
liczysz roznice R = Z - X (w sekundach)
to mnozysz razy 5 (5 doby gry na jedna rzeczywista) i otrzymujesz ilosc sekund ktora minela w grze

teraz wyciagasz ilosc minut godzin dni itd...
  1. <?php
  2.  
  3. // nie uwzglednia lat przestepnych, roznych dlugosci miesiecy itd
  4. lata = (int)/ (3600 * 24 * 365 ); 
  5. %= ( 3600 * 24 * 365 )
  6. miesiace = (int)/ (3600 * 24 * 30); // lub 31
  7. %= (3600 * 24 * 30);
  8.  
  9. ?>
matid
  1. <?php
  2.  
  3. $iStartTimestamp = 1114545150;
  4. $iNowTimestamp = time();
  5.  
  6. $iRatio = 4;
  7.  
  8. $iGameTimestamp = ($iNowTimestamp - $iStartTimestamp) * $iRatio;
  9.  
  10. echo 'Dzien ' . date( 'j', $iGameTimestamp ) . ', ' . date( 'H:i', $iGameTimestamp - 3600 );
  11.  
  12. ?>
Daimos
matid
to co napisales jest prawie idealne tylko ze jak wpisze na start czas ktory jest teraz, na poczatek gry:
Kod
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970


o co chodzi bo dokladnie niewiem ? godziny pozniejsze juz wyswietla swietnie
np, Dzien 1, 01:17




zamienilem:
  1. <?php
  2. date( 'H:i', $iGameTimestamp - 3600);
  3. ?>

na
  1. <?php
  2. date( 'H:i', $iGameTimestamp);
  3. ?>

i dziala, tylko ze zaczyna od godziny 01:00

po co jest odejmowane 3600 ? :/
Vaticinator
Strzelam, że to -3600 sprawia, że czas liczy się od godziny 00:00 (3600 sekund = 1 godzina). Gdy to usunąłeś liczenie zaczyna Ci sie od godziny 1:00

Przepraszam jeśli wprowadzam w błąd.
Daimos
no tak sie domyslalem, ale wtedy wywala blad, wiec musi byc bez tego

juz w kazdym razie chyba sobie poradzilem ze wszystkim... dzieki za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.