Obliczanie zasobów w grze


#1

Czy ktoś może mi pomóc w temacie obliczania zasobów w grze.
Przykładowo mamy jakiś czas budowy budynku np.1 godzina. Możliwe jest skracanie budowy budynków poprzez rozbudowę różnych technologii np. 5 procent od każdego poziomu jej rozwinięcia. Widziałem ostatnio grę, w której rozwój technologi skracającej czas budowy budynków miałem 130%. Jak mam to niby rozumieć? Przecież przy 100% rozwoju tej technologii powinienem mieć już czas budowy każdego budynku równy zero a tam mam 130%? Czy ktoś spotkał się z podobnym problemem?


#2

Można różnie zaprogramować, np czas budowy wynosi:

60min - (40min * x%)
…gdzie x to liczba % na podstawie poziomu rozwinięcia technologii i można ustawić aby x nigdy nie był większy np niż 140% (przez co czas budowy nigdy nie spadnie do 0).

Ale to tylko jeden pomysł bo można to różnie rozwiązać.


#3

Ale co to za wartość 40 minut? Skąd ona się wzięła.


#4

To 40min sam ustaliłem/wymyśliłem, możesz inną wartość tam podstawić. Zmierzałem do tego, żeby wartość w nawiasie nigdy nie była większa ani równa 60min, żeby z całego równania 60min - (40min * x%) zawsze wyszło więcej niż 0.
np.

kiedy x = 5% to z równania wyjdzie: 60min - (40min * 5%) = 60min - 2min = 58min
kiedy x = 100% to z równania wyjdzie: 60min - (40min * 100%) = 60min - 40min = 20min
kiedy x = 130% to z równania wyjdzie: 60min - (40min * 130%) = 60min - 52min = 8min
itp…


#5

Czy ktoś ma jeszcze jakiś inny pomysł jak ten problem rozwiązać lub spotkał się z czym podobnym?


#6

Ja podczas generowania zasobów, budowy i rozbudowy, rozwoju technologii, biorę pod uwagę Level oraz prędkość gry.

Chodzi o to aby przy większym LVl nie było tak łatwo jak na początku gry.

To moja metoda na wydobycie surowców w ciągu 1 godziny

/**
 * @param int $level
 * @param int $qtyStart
 * @param int $techMining
 * @return float
 */
public function hourlyMining(int $level, int $qtyStart, int $techMining)
{
    $ret = 2 * pow(1.15, $level) * $qtyStart;
    $ret += $qtyStart - ($qtyStart * 0.82);

    return ceil(($ret * pow(1.1, 1 + $techMining)) / $this->gameSpeed);
}

$level to aktualny level kopalni
$qtyStart - to początkowa wartość współczynnika wydobycia kopalni
$techMining - to poziom technologii wydobycia danego surowca
$this->gameSpeed - to prędkość gry


#7

Jeśli chodzi o wydobycie surowców to sprawa jest prostsza bo jeśli powiedzmy bazowo mam wydobycie 1000 na godzinę i rozwój technologii zwiększa mi wydobycie o 150% to wychodzi mi 2500 na godzinę.

Mi chodzi o zmniejszanie czasu rozbudowy powiedzmy jakiejś struktury. Jeśli technologia skraca ten czas o 150% to jak to rozumieć?


#8

Twoja wartość % może skracać i o 5000% ale to jest jedynie współczynnik skracania, 5000% może to być 1 surowiec na godzinę, a np w innym wzorze 20% może to być 2000 surowców na sekundę.

Twój % to współczynnik skracania czyli jakiś pośredni prametr a nie prawdziwy % jak w życiu.

To od Ciebie zależy, a raczej od tego jaki masz wzór na skracanie, o ile będzie skrócony czas o ile będzie zmniejszone, lub zwiększone wydobycie.


#9

Można do tego podejść tak, że np. budynek składa się z 1000 cegieł i jeśli jedną cegłę kładzie się jedną sekundę to cały budek powstanie w 1000 sekund. A jeżeli skrócimy czas budowania o 150% to w ciągu sekundy będzie się kładło 2,5 cegły, to wtedy budynek liczący 1000 cegieł powstanie w 400 sekund.