Jak zrobic naliczanie surowców ? Gra cz.1 (naliczanie surowcow)

0

Chodzi mi o cos co jest w grach typu travian czy plemiona czy ogame
Tam maja jakies surowce które rosną wraz z upływem czasu
Nie chce by ona zmienialy sie w czasie rzeczywistym ale przykładowo tak:
Mam sobie konto zaczynam od 3 surowców w kazdym mam 0 na poczatku
wzrost na godzine to 60 punktow na kazdy surowiec czyli wzrasta on co minute o 1.
Czyli za kazdym razem jak odswieze strone to najpierw skrypt ma obliczyc ile powinienem miec surowca
i teraz bierze stan poprzedni czyli [0] pobiera tez ile mam na godzine miec wzrostu np [60] i trzeba pobrac
czas od ostatniego zapisu poprzedniego stanu. Co by mi dalo tak. Obecnie mam 0 po 10 minutach odswiezylem
czyli WZROST / 3600 (sekund) = wzrost na sekunde. Jak ostatni zapis byl 600 sekund temu to teraz
powinienm miec ( 60 / 3600 ) * 600 = 10 punktow w ciagu 10 minut. Czy to jest dobre rozwiazanie tak za kazdym razem
po odswiezeniuz zapisywac te dane do rekordu uzytkownika ? czy powinno byc to inaczej ?

0

ja myślałem, że jestem nawalony :)

0

:) dzis sobota, kazdy moze byc nawalony :D

0

Zapisz sobie w bazie datę ostatniej zmiany, wartości surowców, a potem po prostu przy odświeżeniu strony policz ile narosnąć powinno od czasu zapisanego w bazie. Ktoś już o to pytał.

0

Tak wlasnie zrobie bo nie widze innej mozliwosci a na bieŻąco no to lipa by byla.

0
masterO napisał(a)

Czy to jest dobre rozwiazanie tak za kazdym razem
po odswiezeniuz zapisywac te dane do rekordu uzytkownika ? czy powinno byc to inaczej ?

Odnosząc się do tego co napisałem wyżej, tak. Nie ma sensu Crona zaprzęgać do uaktualniania surowców kilku tysiącom graczy co sekunde.

0

A myślisz że na serwie sa jakies dodatkowe programy wykonujące jakieś operacje czy wszystko jest na zasadzie obliczen i wysweitlane dla konkretnego gracza podczas odczytu danych? bo to chyba wydajniejsze niz dokonywac calyczas obliczen. Tylko nie chodzi mi np o graczy ale o powiedzmy losowe zdarzenia pojawiajace sie hmm w grze. Np jak ktos nie gra i opuszcza osady to ze tam automatycznie dochodzi wojsko czy cos. Czyli tak jakby komputer gral od strony serwera.

0
masterO napisał(a)

A myślisz że na serwie sa jakies dodatkowe programy wykonujące jakieś operacje czy wszystko jest na zasadzie obliczen i wysweitlane dla konkretnego gracza podczas odczytu danych? bo to chyba wydajniejsze niz dokonywac calyczas obliczen. Tylko nie chodzi mi np o graczy ale o powiedzmy losowe zdarzenia pojawiajace sie hmm w grze. Np jak ktos nie gra i opuszcza osady to ze tam automatycznie dochodzi wojsko czy cos. Czyli tak jakby komputer gral od strony serwera.

Nie wiem jak to jest w jakiś Plemionach zrobionych, ale myślę że w takich wypadkach wyniki wojen są od razu przewidywane albo obliczane na bieżąco. Nie ma co z tego robić nie wiadomo czego.

0

a propoS obliczania wlasnie do tego tematu daze i zaloze go w tytule dajac cz.2 jeśłi mialbys ochote wyrazic tam swoje zdanie bede wdzieczny

0
Demonical Monk napisał(a)

Nie wiem jak to jest w jakiś Plemionach zrobionych, ale myślę że w takich wypadkach wyniki wojen są od razu przewidywane albo obliczane na bieżąco. Nie ma co z tego robić nie wiadomo czego.

Myślę, że nie wyliczają tego na bieżąco, bo byłoby to zbyt obciążające dla serwera. Mają raczej wcześniej przygotowaną tabelę z wszystkimi możliwymi wynikami wojen i w razie potrzeby po prostu jest wybierany odpowiedni rekord. Pojedynczy select z bazy jest szybszy niż wyliczenia, to coś jak hurtownia danych.

0

Nie ma zadnej tabeli wynikow bo wojna zalezy od ilosci ludzi jakich poslesz i jest to obliczane na biezaco przy wykonaniu chyba danego zdarzenia. Tylko jesli atakujesz wioske sterowana przez komputer to on wlasnie musi co sekunde sprawdzac i wykonywac swoja kolejke i traktowac sie tak jakby mial np 1000 osad. ale dodatkowo musi byc aktualizacja kolejek kazdego gracza bo weryfikowany jest ranking na podstawie zbieranych punktow z rozbudowy co znaczy ze jak sie nie zaloguejsz ale twoja budowa trwa i zostanie skonczona to wynik w rankingu bedzie podwyzszony.

0

Przyrost surówki w zależności od poziomu rozbudowy. Wiadomo, że nie możemy wpisywać danych o ile chcemy zwiększyć surowca dla danego sposobu. Dlatego pierwsze w tabeli co zostalo umieszczone to:

$START_VALUE = $row[1]; //wartosc poczatkowa od jakiej zaczynamy np 60 / h
$INCREAST = $row[2]; //o ile procent wzrasta kazdy poziom w stosunku do poprzedniego : 116%
$MAX_LEVEL = $row[3]; //maksymalny poziom rozbudowy np : 30

		
//wartosc poczatkoa przyrowanan do zmiennej
$Counting = $START_VALUE; 

//wysweitla wynik (przyklad)	
for ($i = 1; $i <= $MAX_LEVEL; $i++) {
		 
//pokaz wynik
echo $i . " | " . $Counting . "<br>";
		
//count what will be next value lvl(n) = lvl(n-1) * $INCREAST / 100 %
$Counting = ROUND( $Counting * $INCREAST / 100 ); 
		
	}	

Na tym przykladzie bedzie wyświetlony poniższy wynik:

 
1 | 60
2 | 70
3 | 81
4 | 94
5 | 109
6 | 126
7 | 146
8 | 169
9 | 196
10 | 227
11 | 263
12 | 305
13 | 354
14 | 411
15 | 477
16 | 553
17 | 641
18 | 744
19 | 863
20 | 1001
21 | 1161
22 | 1347
23 | 1563
24 | 1813
25 | 2103
26 | 2439
27 | 2829
28 | 3282
29 | 3807
30 | 4416

Tylko czy to dobre rozwiazanie ? Może zastosować jakąś funkcję logarytmiczną ?
Albo jak to zrobić by na koncu np bylo 4500 zaczynalo się od 60 i zeby logarytmicznie
to wzrastało tak że im wiekszy poziom tym większy przyrost.

Tak samo mozna by zrobic koszt rozbudowy ilepotrzeba danego surowca. Czyli opiszemy na samym poczatku
kopalnie kamieni.

id_mine_stone - identyfikator (int)
start_value - wartosc poczatkowa (int)
increase - wartosc przyrostu % produkcji na kazdy poziom (int)
max_level - maksymalny poziom rozbudowy (int)
req_stone - poziom kamienia (int) np 40
req_wood - poziom drewna (int) np 60
req_gold - poziom zlota (int) np 30

wypadaloby tez dac pole o ile ma wzrosnac kazdy surowiec o kolejny poziom rozbudowy

req_increse - i tu nie wiem jaki wstawic moze 110 (%) ? nie wiem
Tylko ze przyrost ostatni np 110 % da nam przyrost poczatkowy np 50 a przy poziomie 30 to bedzie 799.
A mi zalezy zeby na poczatkowym bylo np 30 a na koncowym 35.200 (przyklad) i nie wiem jak to zrobic najlepiej

DLa poczatkujacych: Pytanie dlaczego nie mogę wpisać recznie dla każdego poziomu wymaganych surowców oraz
poziomu produkcji może się nasunąć a odpowiedz na nie powinna być. Nie można tego uczynić gdyż jeżeli bedziemy chcieli przyspieszyć szybkość gry no 2 razy to wystraczy ponożyć wartości początkowe X 2 a przy wpisaniu na sztywno takich danyc
nie byloby możliwości (znaczy byłaby skryptem kopiując dane z tabelek i wpisywać powiekszone przez ile tam chcemy) ale nie o to chodzi przecież.

0

Ja bym przy rozpoczęciu jakiejś wojny od razu sobie do tabeli zapisał wyniki kolejnych rund i prezentował userowi. Jak zmienią sie jakieś wartości początkowe - np. przybędzie nowe wojsko to liczymy od nowa tury które jeszcze się nie wydarzyły.

0

Ale do wojen to jeszcze daleko :) najpierw trzeba opracowac algorytm wymagan surowcow na kolejne poziomy. rycerzy itd to dopiero potem :D co do tabeli wojennej to tylko algorytm obliczen bo tak prezentowac wyniki to nie wiem jak to sobie wyobrazic. Moze podaj jakis przyklad Demonik

0

Dobra decyzja sadu ostatecznego mozna wyporwadzic wzory na dana budowle ale wtedy by sprawdzić stan np poziomu 4 danej budowli i tak trzeba wyliczyc. a to generuje niepotrzebne rozkazy. Dlatego kazdy budynek musi byc opisany dokladnie poziom po poziomie. Gdy juz bedziemy mieli opisane wymagania obiektu w tabeli mozemy ta tabele skalowac. Mnozyc razy 100 i wtedy mamy szybkosc gry razy 100. Dlatego zabieram sie za dokonczenie tabeli surowcow. (Kazdy budynek bedzie opisany w oddzielnej tabeli.)

1 użytkowników online, w tym zalogowanych: 0, gości: 1