Automatisch waardes toevoegen gebaseerd op een level.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Victor G

Victor G

04/03/2013 16:29:23
Quote Anchor link
Ik probeer een klein browser game te maken, maar ik wil graag dat de grondstoffen gebaseerd op een level (van gebouwen) toe worden gevoegd elke seconde. Ik ben nog niet heel erg bekend met javascript e.d., zou iemand mij op weg kunnen helpen?
 
PHP hulp

PHP hulp

20/04/2024 07:35:25
 
- SanThe -

- SanThe -

04/03/2013 16:31:02
Quote Anchor link
Niet duidelijk.
 
Victor G

Victor G

04/03/2013 16:41:10
Quote Anchor link
Ik heb dus een browsergame, die grondstoffen gebruikt om dingen up te graden. De grondstoffen moeten bijgevult worden elke second gebaseerd op de hoogte van het level. Simpel voorbeeld:

Als je level 1 farm hebt moet er elke seconde 1 food bij komen, bij level 2 farm 4 food. Dit zijn de session variables voor de grondstoffen.

$food = $_SESSION['food'];
$wood = $_SESSION['wood'];
$stone = $_SESSION['stone'];
$gold = $_SESSION['gold'];
$lvl_food = $_SESSION['lvl_food'];
$lvl_wood = $_SESSION['lvl_wood'];
$lvl_stone = $_SESSION['lvl_stone'];
$lvl_gold = $_SESSION['lvl_gold'];
 
Erwin H

Erwin H

04/03/2013 17:06:43
Quote Anchor link
In javascript een interval van 1 seconde instellen en dan elke keer een ajax call naar de server versturen om de grondstoffen op te hogen.

Maar....

Als ik dan als gebruiker 20 tabbladen in mijn browser open op je spel, dan worden mijn grondstoffen dus 20 keer per seconde opgehoogd. Dat is wel makkelijk verdienen :-)
 
Victor G

Victor G

04/03/2013 17:08:16
Quote Anchor link
Erwin H op 04/03/2013 17:06:43:
In javascript een interval van 1 seconde instellen en dan elke keer een ajax call naar de server versturen om de grondstoffen op te hogen.

Maar....

Als ik dan als gebruiker 20 tabbladen in mijn browser open op je spel, dan worden mijn grondstoffen dus 20 keer per seconde opgehoogd. Dat is wel makkelijk verdienen :-)


Zou je me kunnen helpen met die js? Ik heb werkelijk waar geen idee hoe dat werkt, daarom kom ik hier. Ik heb alles afgezocht maar ik kan niet vinden wat ik wil.

En dat laatste, hoe is het anders op te lossen?
 

04/03/2013 17:10:53
Quote Anchor link
Als het text-based is zou je gewoon een tabel kunnen maken met daarin de gebouwen. Daarna een tabel met grondstoffen per level gelinkt aan het gebouw. Daarnaast heb je ook nog een tabel met de gebouwen van gebruikers met daarin het gebouw nummer en het level.

Dan kun je door middel van een join de waarden uit de database halen en die updaten. Zelf zou ik er een cronjob voor gebruiken en het niet elke seconde updaten. Maar bijvoorbeeld om de 5 seconden.

Om het spel voor de gebruiker up-te-daten kun je door middel van een request naar de server de data met een simpele query ophalen.

De tabellen
Gebouwen
- gebouw_id,
- naam

Grondstoffen
- grondstof_id,
- gebouw_id,
- naam

Levels
- level_id,
- grondstoffen_id,
- aantal_per_seconde

Gebouwen gebruikers
- gebruiker_id,
- grondstof_id,
- level_id

Grondstoffen gebruikers
- gebruiker_id,
- grondstof_id,
- aantal

Dan kun je dus ook meerdere grondstoffen per gebouw hebben als dat gewenst is. * Dit is gewoon even uit het hoofd, dus de tabellen kunnen er misschien wat anders uitzien. Het aantal grondstoffen dat een gebruiker heeft kun je ook eventueel in de gebouwen gebruikers opslaan. *
Gewijzigd op 04/03/2013 17:20:33 door
 
Victor G

Victor G

04/03/2013 17:20:07
Quote Anchor link
Tot dusver ziet het spel er zo uit. - Let niet op dat er zo weinig is, ik wil eerst de basis werkend hebben voor ik alles uitbreid

Afbeelding

Waarbij het middelste vak al elke seconde update, maar ik hoef eigenlijk alleen te weten hoe de JS code eruit ziet voor de formule, dus het combineren van JS en PHP.
Gewijzigd op 04/03/2013 17:21:44 door Victor G
 

04/03/2013 17:22:11
Quote Anchor link
Wel als de grondstoffen in de database al geüpdate worden kun je door middel van een xhr request, $.post, $.get, $.ajax de data ophalen.
 
- SanThe -

- SanThe -

04/03/2013 17:22:46
Quote Anchor link
Aaron - op 04/03/2013 17:10:53:
Zelf zou ik er een cronjob voor gebruiken en het niet elke seconde updaten. Maar bijvoorbeeld om de 5 seconden.


Cronjobs werken niet met seconden maar met minuten.
 
Victor G

Victor G

04/03/2013 17:23:59
Quote Anchor link
Ik weet wel hoe ik de data ophaal, ik weet alleen niet hoe je de data gebruikt in een JS formule welke elke paar sec grondstoffen bijvoegd gebaseerd op het level van een gebouw. (Er komen geen meerdere gebouwen alleen 1 up te graden gebouw per grondstof.)

Die upgedate data moet weer naar de database. Hij moet dus de formule elke paar sec uitvoeren, maar ik weet niet hoe mijn formule er uit moet zien door het combineren van PHP en JS.
Gewijzigd op 04/03/2013 17:25:23 door Victor G
 

04/03/2013 17:24:39
Quote Anchor link
Ohh SanThe. Dat wist ik niet. Nog nooit cronjobs gebruikt met zo'n kleine tijdspanne. Dan zou ik het gewoon iedere minuut doen, tenzei het echt elke seconde moet.
 
Erwin H

Erwin H

04/03/2013 17:25:16
Quote Anchor link
Viccie viccieg op 04/03/2013 17:08:16:
Zou je me kunnen helpen met die js? Ik heb werkelijk waar geen idee hoe dat werkt, daarom kom ik hier. Ik heb alles afgezocht maar ik kan niet vinden wat ik wil.

En dat laatste, hoe is het anders op te lossen?

Het eerste, dat zou ik wel kunnen, maar dat is dan waarschijnlijk voor de kat z'n viool. Tenzij je het niet erg vindt dat iemand je zo makkelijk kan 'bestelen'. Als ik jou was zou ik me eerst druk maken over het tweede. Daar heb ik overigens geen antwoord op, maar dat concept is wel erg belangrijk. Dus ik raad je aan om eerst dat concept waterdicht uit te werken voor je je op de techniek stort.
 

04/03/2013 17:26:45
Quote Anchor link
@Viccie. Javascript wordt alleen uitgevoerd wanneer de gebruiker online is. Is dat wel hoe het moet zijn of moeten de grondstoffen ook geüpdate worden wanneer de gebruiker niet online is? Want dan kom ik toch terug uit bij cronjobs en anders een tabel met de update tijden (datetime met seconden). Alhoewel dit toch niet altijd heel erg accuraat zal zijn i.v.m. response time en dergelijke.
 
Victor G

Victor G

04/03/2013 17:27:29
Quote Anchor link
Ja ze moeten inderdaad updaten als de gebruiker offline is, kun je wat uitleg geven over cronjobs in dit geval?
 
Keizer Webdesign

Keizer Webdesign

04/03/2013 17:37:57
Quote Anchor link
Cronjobs laten een script uit voeren om een bepaalde tijd zo kan je bepaalde scripts laten update.
Dus dan zal je moeten kijken naar PHP en het zo gaan update.

Toevoeging op 04/03/2013 17:45:49:

Je zou anders is naar een "Maffia game" moeten kijken, Google het is, bedoeld u dat?
 
Victor G

Victor G

04/03/2013 19:38:39
Quote Anchor link
Ik zal er naar kijken, in ieder geval bedankt voor de hulp tot zo ver.
 
Willem vp

Willem vp

04/03/2013 20:03:40
Quote Anchor link
Zelf zou ik het niet met een cronjob doen, maar real-time.
In de database (ik zou zeggen in de grondstoffen gebruikers-tabel) hou je de timestamp bij wanneer je het laatst de grondstoffen hebt bijgewerkt. Zodra iemand een grondstof opvraagt, bereken je het verschil tussen de huidige tijd en de opgeslagen tijd in seconden (bijvoorbeeld time_to_sec(timediff(now(),grondstoffen_gebruikers.update_time) of zo) en dat vermenigvuldig je met aantal_per_seconde en tel je op bij het huidige aantal. Daarna werk je de update_time bij. Op die manier ziet iedereen altijd het juiste aantal grondstoffen.

Zeker wanneer je dit in een transactie doet, is dit ook bestand tegen gebruikers die 20 tabs open hebben staan.
 

04/03/2013 20:27:45
Quote Anchor link
@Willem VP
Een hele mooie oplossing toon je daar. Alleen heb ik er maar een bedenking bij. Neem nu aan dat je 150 spelers online hebt en die requesten een pagina iedere minuut ongeveer 10 keer. Maar ook als er bijvoorbeeld iemand aangevallen wordt moeten er dingen berekend worden. Als dat zo is. Dan heb je ongeveer 1500 queries. Zou één query zoals de volgende niet beter zijn om de minuut qua server load?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
UPDATE
    grondstoffen_gebruikers AS gg
INNER JOIN
    grondstoffen AS g
ON
    gg.grondstoffen_id = g.grondstoffen_id
SET
    gg.aantal = gg.aantal + g.aantal

Dit is louter een vraag... Het zou ook kunnen dat het spel gewoon geüpdate moet worden omdat het dan realtime is zoals jij zegt.

Alvast bedankt
 
Mark Hogeveen

Mark Hogeveen

04/03/2013 20:36:55
Quote Anchor link
Je kunt toch ook het server side gedeelte wat slimmer programmeren, en berekenen wat maximaal mogelijk is om in 1 uur te verdienen?
Als je dan 20 tabbladen in de browser open hebt staan, stopt het gewoon na een bepaald aantal behaalde grondstoffen in dat uur (gecontroleerd door de server).
Het volgende uur begint het weer van voor af aan met tellen hoeveel in het uur al is verdiend.

Je zou eigenlijk niet eens je server te hoeven belasten met een ajax call elke seconde.
Je doet gewoon de grondstoffen zichtbaar verhogen met javascript, maaar wat oinzichtbaar wordt bijgehouden op de server telt.
Zo zou wel de fout kunnen ontstaan dat het aantal grondstoffen dat javascript de gebruiker laat zien afwijkt van wat er in de database staat, maar dat is nooit echt meer dan 2 of 3 ofzo.
Met PHP reken je gewoon de tijd uit wanneer er een bepaald aantal grondstoffen is gehaald.
Alleen als er iets van de grondstoffen af moet (iets bouwen / kopen met de grondstoffen) dan doe je een ajax call, en berekent PHP opnieuw.
Gewijzigd op 04/03/2013 20:41:36 door Mark Hogeveen
 
Willem vp

Willem vp

04/03/2013 22:08:54
Quote Anchor link
Aaron - op 04/03/2013 20:27:45:
Neem nu aan dat je 150 spelers online hebt en die requesten een pagina iedere minuut ongeveer 10 keer. Maar ook als er bijvoorbeeld iemand aangevallen wordt moeten er dingen berekend worden. Als dat zo is. Dan heb je ongeveer 1500 queries. Zou één query zoals de volgende niet beter zijn om de minuut qua server load?

Je onderschat MySQL ;-)

Om je een indruk te geven: een van de servers die ik onderhoud is een doos van een paar jaar oud. Niet heel indrukwekkend: 2x quad-core Xeon 2.5 GHz met 8 GB geheugen en 250 GB harddisk. De afgelopen 137 dagen (19,5 week) heeft 'ie meer dan 3 miljard queries voor zijn kiezen gehad; gemiddeld 255 per seconde (en die belasting fluctueert tussen 0 en meer dan 1500 queries per seconde). De queries variëren van simpele inserts of selects tot queries waar een flinke stored procedure achter hangt.

MySQL is op die server overigens min of meer een bijzaak, want hij doet nog veel meer. We hebben de afgelopen vijf maanden nooit de indruk gehad dat hij het niet aankon.

Overigens verwacht ik niet dat die 150 online spelers je db-server platkrijgen door steeds dezelfde pagina te requesten. De caching van MySQL zorgt er wel voor dat er niet al teveel I/O plaatsvindt. En anders stop je de berekening (voor het gemak) in een stored procedure die maximaal eens per (bijvoorbeeld) 10 seconden een update doet.

Als je site al plat gaat door een aanval van spelers, verwacht ik eerder dat dat komt door overbelasting van je netwerk dan door MySQL.
Gewijzigd op 04/03/2013 22:09:54 door Willem vp
 
Victor G

Victor G

05/03/2013 16:33:42
Quote Anchor link
Ik wil het wel dat hij altijd doorloopt, dus ook als je offline bent. Is dit ook mogelijk met PHP of alleen met JS/cronjobs?

EDIT: Ik gebruik op dit moment localhost, dus cronjobs is niet mogelijk?
Gewijzigd op 05/03/2013 16:36:36 door Victor G
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.