Countdown timer Help mij aub !

Status
Niet open voor verdere reacties.

yeko

Gebruiker
Lid geworden
4 mrt 2008
Berichten
25
Hoi allemaal

Ik ben een text based game aan het maken. Hierbij heb een een countdown timer nodig. Hiermee bedoel ik dat hij van 180 naar 0 moet tellen en weer opnieuw, etc, ...

Het probleem is dat het klokje voor elke gebruiker hetzelfde moet zijn. Hiermee bedoel ik dat dus het klokje bij alle gebruikers dezelfde waarde moet hebben dus als het 0 is moet het bij elke account 0 zijn op hetzelfde ogenblik. Ik dacht dat ik hier de server tijd moest gebruiken ?

Het moeilijkste en ambetanste deel is volgens mij dat het klokje ook gewoon moet doorlopen als je de pagina refresched of als je op een link in de site klikt.

Ik heb me al suf gegoogled en ik kan er niets van vinden.
Ben spel eigenlijk in php aan het maken dus ik ken niet super veel van javascript. Hopelijk kan iemand mij helpen ??

Alvast bedankt
 
Bedankt voor je reactie

Hey

Bedankt voor je reactie, Dit is niet echt wat ik bedoel. Ik heb iets nodig dat het klokje ook werkelijk laat zien en dat als je de pagina refresht het klokje gewoon blijft doortikken.

Ik vrees dat als je je pagina refresht en gebruik maakt van de setinterval en dergelijke dat je klokje terug van het begin begint. Dit zou niet mogen.
 
Ksnap het min of meer. Javascript werkt altijd lokaal op de computer, dus kent enkel de tijd die daar staat ingesteld.

Dus dan ga je de tijd via php van de server moeten halen.

Dan denk ik dat iets als dit moet werken (ben niet helemaal zeker van de syntaxis, moet je eens nagaan)

var datum=new Date();
datum.setTime(<?php echo time()*1000; ?>);
var extra=0;
setInterval('extra++',1000);

en dan verder werken met deze datum en de verstreken tijd extra (wel in seconden) sinds het laden van de pagina (of deze extra tijd direct bij datum optellen (dan in milliseconden)). Als dees al klopt (ik ben niet zo heel sterk in php en javascript) dan nog is het probleem (waarvoor ik geen oplossing weet) dat bij iemand met een trage internetverbinding de tijd iets anders zal zijn dan bij iemand met een snelle internetverbinding omdat er dan meer tijd nodig is om de pagina te downloaden en er dus ook meer tijd verstreken is tot de javascript-timer start.

Misschien kan je dat laatste dan beperken door het eerste bestand waarin je de servertijd plaatst en de timer start, zoals hierboven dus, enkel tot dit te beperken en pas erna opdracht te geven om de rest te downloaden vanuit javascript (tis maar een idee, kzou moeten zien hoe dat dan praktisch gaat).
 
Laatst bewerkt:
Zeer goed idee, ik zal eens zien of ik er iets mee kan doen (want ik ken ook niet zo heel veel van javascript.) Ik heb dat klokje al ooit ergens gezien maar weet niet zker of het in javascript was, maar ik veronderstel dat het mogelijk is ?

Ik heb nog een vraagje, als dit script werkt dan blijft het klokje doorlopen als je de pagina refresht of als je op een link binnen de site klikt ?

Alvast bedankt voor je reactie
 
Zoals je ziet was mijn idee dus om de servertijd in te laden en daar dan bij te tellen hoelang het geleden is dat de gebruiker de pagina opvroeg via javascript. Het klokje zou dus toch steeds voor iedereen min of meer dezelfde tijd moeten geven, afgezien van het probleem dat ik beschreven heb met de tijd voor het downloaden van de pagina. Als je op een link binnen de site klikt hangt het er dan vanaf of die een nieuwe pagina inlaadt (dat komt dan op hetzelfde neer als refreshen, met het beschreven probleem) of als het om een dynamische javascript-link gaat (of hoe je dat ook noemt, waarbij er sowieso geen probleem is aangezien er geen nieuwe pagina wordt opgevraagd, maar de pagina gewoon dynamisch wordt veranderd).

Ik zal het anders ook eens helemaal proberen te maken.
 
Laatst bewerkt:
Ik heb het eens uitgewerkt en er is inderdaad een probleem met de downloadtijd / aanvraagtijd of wat dan ook (het feit dat de browser Opera soms bij het laden stokt, zelfs van kleine pagina's, gaf inderdaad een verschil in tijd).

Als je de lokale tijd gebruikt is dat probleem er niet, maar dan is niet voor iedere gebruiker de tijd (ongeveer) dezelfde.

Ik vrees dat het onoplosbaar is. Ik las ergens iets over AJAX waarmee het mss beter kan (ik denk dat je daarmee de tijd bijvoorbeeld iedere seconde aan de server kunt opvragen; als dat dan 1 keer mislukt is dat nog niet echt een probleem), maar ik weet niet hoe AJAX werkt.

Dit was mijn test-uitwerking.

http://joeriverscheure.be/test.php

en de code

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

<title>Servertijd</title>

<meta name="author" content="Joeri Verscheure" />
<meta name="reply-to" content="joeriverscheure@gmail.com" />
<meta name="copyright" content="Joeri Verscheure" />
<meta name="robots" content="all" />
<meta name="generator" content="WordPad" />

<meta http-equiv="Content-Language" content="nl-be" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="imagetoolbar" content="no" />

<meta name="description" content="Servertijd." />
<meta name="keywords" content="servertijd" />

</head>

<body>

<noscript>
<p>Deze website gebruikt javascript. Aangezien u javascript niet geactiveerd hebt, zal de website niet correct werken.</p>
</noscript>

<p id="datum"></p>

<script type="text/javascript" language="JavaScript"><!--
var datum=new Date();
datum.setTime(<?php echo time()*1000; ?>);
setInterval('toontijd()',1000);
var dat=document.getElementById('datum');
dat.innerHTML=datum;

function toontijd(){
  datum.setTime(datum.getTime()+1000);
  dat.innerHTML=datum;
}
//--></script>

</body>

</html>
 
Hoi

Echt bedankt voor je reacties en dat je me wilt hebben.
Ik weet niet goed wat ik nu best kan gebruiken.
Mss kan je me helpen. Het klokje moet van een bepaalde tijd (Bv. 180 naar 0 lopen) zonder dat het veranderd bij de refresh. Als het dan 0 is worden er verschillende acties uitgevoerd voor alle spelers (Bv. de score berekent, ...) Dit zou eig. allemaal op hetzelfde ogenblik moeten gebeuren. Is het niet mogelijk om gewoon de locale tijd te pakken maar dan kijken hoeveel verschil er is met de servertijd ofzo. Dus Bijv. als jou locale tijd 9:30:20 is en de mijne 9:30:10 dat jou klokje vanaf 180 tot 0 begint te tellen en de mijne van 170 tot 0. Ze komen dan toch gelijk uit. Ik weet niet of je het snapt anders hoor ik het wel.
Alvast heel hard bedankt !
 
"Is het niet mogelijk om gewoon de lokale tijd te pakken en dan te kijken wat het verschil is met de servertijd?"

Dat is nu net het probleem dat ik niet kan oplossen. Stel dat je server de pagina genereert, waarin je dus de servertijd echoot. Dan stuur je die naar de gebruiker, maar het probleem is dat je de lokale tijd pas kunt opvragen of de tijd pas kunt laten voorttellen als de pagina gedownload is.

Mss is het juist beter voor de eerlijkheid van het spel dat de gebruiker waarbij de pagina meer tijd nodig had om te downloaden ook nog evenveel tijd krijgt sinds zijn aanvraag, maar daarvoor zou ik eerst moeten weten hoe het spel in elkaar zit.
 
Het is een textbased ('oorlogs')spel. Je hebt 3 soorten recources : goud, ijzer en kool. Hiermee kun je je leger opbouwen.

Het principe van het klokje is dat 1 'tick' 3 minuten duurt. Als het klokje 0 bereikt (De 3 minuten voorbij zijn) worden er acties uitgevoert Zoals :
- Je goud, ijzer en kool wordt vermeerderd
- Je score wordt herberekent a.d.h.v. je recources, legers, ...

Het is volgens mij belangrijk dat het klokje bij iedereen gelijk moet lopen omdat :

- Bv. Als je iemand aanvalt dan staat er bijvoorbeeld : "De aanval duurt 6 ticks" (1 tick = 3 minuten) Het klokje moet dus 6 keer op 0 komen voordat de speler effectief aanvalt. (of de aanval duurt 6*3 = 18 minuten)

Het probleem is dat je met 2 man 1 persoon kan aanvallen. Dus laten we zeggen dat ik en mijn vriend iemand aanvallen.
Bv. : Het klokje staat op 140 sec. Ik en mijn vriend voeren te samen in dat we iemand willen aanvallen. Als het klokje 0 bereikt sturen we zogezegt onze legers naar die persoon. Een aanval duurt 6 ticks dus er komt op het scherm nog 6 ticks te gaan tot je legers zijn aangekomen bij de vijand. Dit staat op mijn en men vriend zijn scherm dan.
- Als je nu het zelfde voorbeeld neemt en het klokje staat op 10 sec. en ik besloot iemand aan te vallen. Ok, ik zeg tegen mijn vriend val die persoon aan en we sturen allebei onze legers. Als de klokjes nu niet gelijk staan en mijn vriend zijn klokje staat bijvoorbeeld op 170 ofzo en het mijne op 10.
Mijn legers worden dan over 10 seconden gezonden(want dan staat het klokje op 0) en er staat dan 18 minuten tot aanval. Maar bij mijn vriend duurt het nog 170 sec. eerdat het klokje op 0 komt te staan en zijn legers verzonden zijn. Dus na 170 sec komt er pas op zijn scherm dat zijn legers onderweg zijn en dat het 18 minuten duurt voor de aanval. Onze legers komen niet te samen aan want die van mijn vriend zijn dan bijna 1 tick (=3 minuten) later.

Het moet de bedoeling zijn dat deze legers te samen aanvallen dus m.a.w. er moet op mijn en men vriend's scherm hetzelfde staan Bv. nog 6 ticks tot aanval. Als het klokje niet gelijk loopt kan er bij hem al een tick afgegaan zijn. Dit zou niet mogen omdat zijn legers dan vroeger aanvallen.

- Het principe van goud, ijzer en kool te krijgen na elke tick is dat je mijners in dienst hebt. Elke mijner levert 250 goud, iron of kool op. Dus als je Bv. als het spel start 1 mijner hebt van elk dan krijg je als het klokje op 0 springt 250 goud, 250 iron en 250 kool bij. Dit gebeurt altijd alleen als het klokje op 0 komt te staan (=als de tick voorbij is). Als je bijvoorbeeld een mijner van goud bij aankoopt dan krijg je die pas bij als het klokje weer op 0 staat. vanaf dat je die 2de mijner het krijg je als het klokje 0 is 250 goud bij (250 * 2 mijners).

- Je score wordt bepaald op basis van het geld en de legers die je hebt. Maar je legers en goud worden pas bijgegeven weer als het klokje op 0 staat. Als er dan bijvoorbeeld bij jou het klokje al op 0 is geweest en bij mij staat het bv nog op 10 dan heb jij al je geld en legers gekregen en ik nog niet. Je score is dus ook omhoog gegaan en de mijne niet. Dit is oneerlijk denk ik omdat jij al met meer legers kan aanvallen enzo dan.

- Je hebt ook een score-overzicht pagina. Deze scorepagina veranderd alleen als de 3min om zijn dus als het klokje 0 bereikt. Dan worden alle scores berekent en weergegeven in de pagina score-overzicht. In dit overzicht staat naast de score ook het aantal mijners dat een persoon bezit.


Dus het is echt noodzakelijk dat het klokje bij iedereen gelijk loopt.
Dit spel heet eigenlijk wwwar en was vroeger beschikbaarop de site wwwar.net. De maker is helaas gestopt met het spel tot spijt van iedereen. Ik ben nu dit spel een beetje aan het namaken. De maker heeft zo een klokje gemaakt maar ik weet gewoon niet hoe het werkte. Het is dus mogelijk :) Zo, ik hoop dat je mijn uitleg een beetje snapt anders hoor ik het wel. Alvast bedankt voor al je reacties en tijd !
 
Laatst bewerkt:
Ik denk dat best iemand anders dan even inspringt.

Die verzoeken moeten dan verstuurd worden naar de server of zoiets veronderstel ik. Ik weet echter begod niet hoe zoiets werkt. Ik heb mij nog nooit met interactieve dingen bezig gehouden.

Op zich lijkt er dan wel geen probleem: de verzoeken worden naar de server gestuurd en de server kijkt wanneer de aanval gebeurt aan de hand van zijn klok. Er zal dus nooit een probleem zijn dan denk ik. Het enige dat er kan gebeuren is dat het klokje voor de gebruiker wat achterloopt (het gaat maar om hoogstens vijf seconden of zo, hangt natuurlijk van de grootte van de pagina af). Daar moet die dan rekening mee houden. Als je echter de pagina inlaadt zie je wel hoe lang het duurt tussen de aanvraag en wanneer de pagina er staat. Als daar om een of andere reden te veel tijd tussen zou zijn, zoals met de browser Opera kan gebeuren, dan kan je altijd de pagina opnieuw opvragen. Ik denk dat er echter met andere browsers niet snel een probleem is. Het probleem dat het even duurt om verzoeken te verzenden / pagina's te ontvangen ga je altijd hebben. Het spel zelf verloopt helemaal in Javascript veronderstel ik.

Ik stel voor dat je het spel eens probeert te maken in Javascript met het klokje zoals ik in mijn voorbeeld heb gemaakt.

Is de maker van de site eventueel niet meer te contacteren?
 
Laatst bewerkt:
hey

Da maker van de site is helaas niet meer te bereiken. Ik ben van plan het spel in combinatie met php en javascript te maken. Ik heb nog een vraagje want ik snap het niet zo heel goed; Met jou voorbeeld gebruik je de servertijd, klopt ?

Ik ben van plan te maken dat als je de site verlaat en je er na een uur ofzo terug opkomt dat hij de tijd van het verlaten van de site aftrekt van de tijd waaroop je de site terug binnenkomt. Zo kan ik weten hoeveel het klokje eig. op 0 had moeten komen, en kan ik de acties die normaal gebeurt moesten zijn, laten doen. (d.w.z dat het klokje eig. ook doorloopt als je niet ingelogt bent) Gebruik ik hiervoor best de server of locale tijd ?

Wil je aub dat voorbeeld van dat klokje van jou nog eens posten ? Hartelijk bedankt
 
In mijn voorbeeld wordt servertijd gebruikt, maar het klokje zou dus enkele seconden kunnen achterlopen op het scherm van de gebruiker.

Je vindt het nog steeds zes posten hoger:)

Ik ben alvast benieuwd naar het resultaat; post je het spel eens als het af is (of de site)?
 
Laatst bewerkt:
ok, zal ik zeker doen. Als ik het gemaakt krijg :cool::)
Bedankt voor al je posts !!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan