Come convertire un numero eventualmente crescente in una scala finita?

6

Questo è comune nei giochi, specialmente nei giochi di gestione come Sim City, Civilization, ecc: hai azioni che forniscono bonus interi aggiuntivi a una metrica, ma la metrica stessa rimane in una scala finita.

Quindi, ad esempio, supponiamo di avere una metrica Environment su una scala 0-10. Puoi comprare un oggetto che aggiunge +2 alla Environment , costruire un edificio che aggiunge +20 ecc. E tuttavia la metrica Environment mostrerà solo un valore compreso tra 0 e 10 come risultato. Nelle prime fasi del gioco potresti aver accumulato una quantità "totale" di, diciamo 200 punti ambiente, e la metrica Environment è 7. Successivamente, i punti totali dell'ambiente raccolti durante il gioco potrebbero essere nelle decine di migliaia, e ancora la metrica Environment potrebbe leggere qualcosa come 7.5.

La mia domanda è, come può essere realizzata una tale conversione? Puoi fornire alcuni esempi? Sto attraversando un periodo molto difficile, grazie.

    
posta San Diago 17.12.2015 - 06:28
fonte

4 risposte

3

Questa è più gamedev.stackexchange.com risposta.

Un altro modo per farlo è avere una variabile "Ambiente richiesto" opposto, che aumenterà con edifici diversi. Quindi, puoi semplicemente dividere questi due, per ottenere "ratio" come sia soddisfatta la variabile "Environment".

Ok, per esempio lascia prendere "Sanitation" in alcuni giochi di costruzione di città, perché "Ambiente" non ha molto senso. Ogni casa o fabbrica aumenta il valore di "Required Sanitation". Questo valore rappresenta la quantità di servizi igienici necessaria per coprire perfettamente il fabbisogno di servizi igienico-sanitari. Ogni impianto di trattamento delle acque o discarica aumenta il valore di "Servizi igienici forniti". Ora puoi visualizzarlo come Fornito / Richiesto, ma puoi anche visualizzarlo come valore percentuale (chiamiamolo Soddisfazione) semplicemente dividendo (Fornito / Richiesto * 100)%. Dovresti anche massimizzarlo al 100%, perché non ha senso avere una soddisfazione superiore al 100%. Questo valore sarà sempre compreso tra 0 e 100%.

Quindi, la Soddisfazione per servizi igienico-sanitari diminuisce man mano che costruisci più case e fabbriche, e aumenta mentre costruisci più discariche. Quindi, anche se disponi di migliaia di numeri di "servizi igienici" forniti in più rispetto all'inizio del tuo gioco, il punteggio di "Soddisfazione" può essere lo stesso, perché ne hai bisogno di molto di più. Questo simula anche la sensazione di "dimishing return", perché aggiungere 10 servizi igienici al 70% all'inizio del gioco è completamente diverso dall'aggiunta di 10 servizi igienici al 70% alla fine del gioco.

Ovviamente, il valore "Richiesto" potrebbe non essere visibile al giocatore.

    
risposta data 17.12.2015 - 08:51
fonte
9

Semplice: si inizia con f(x)=1/x , che scende a zero quando x diventa infinito. Ora vuoi questo approssimativo di una costante c dal basso, utilizzalo in questo modo:

 f(x)= c - 1/x

Dal tuo esempio suppongo che vuoi consentire x = 0 e f (0) = 0, quindi prova:

 f(x)= c*(1 - 1/(x+1))

Se la pendenza di quella funzione non è soggetta alle tue esigenze, ci sono altri modi per modificarla come sostituire x di x^k , dove k potrebbe essere un valore tra 0 e 1, o sostituendo x di qualcosa come x/b , dove b è un numero come 1000, qualunque sia il tuo intervallo di punteggio, o entrambi. Spero che ti venga l'idea.

    
risposta data 17.12.2015 - 07:14
fonte
3

Se i miei vecchi ricordi in matematica sono ancora intatti, penso che ciò di cui hai bisogno è una funzione con un ordine di crescita .

Vorrei dare una prova a quanto segue:

1) x - > x ^ p, dove p < 1 (ad esempio per 1/2, abbiamo la classica radice quadrata)

2) x - > log [b] (x), dove b è la base del logaritmo. Per esempio. log10 (100) = 2, log (2) (1024) = 10

3) x - > arctan ( x), questo sicuramente limiterà l'output anche con il tuo crescere all'infinito.

Le prime due funzioni divergono all'infinito, poiché x cresce all'infinito, ma potrebbe essere abbastanza lento per te.

Ovviamente, dovresti applicare alcuni fattori a queste funzioni (ad esempio il ridimensionamento) per ottenere i risultati migliori.

    
risposta data 17.12.2015 - 07:07
fonte
-5

L'operazione più comune per limitare un intervallo di numeri a una scala finita è MOD operazione.

    
risposta data 17.12.2015 - 07:47
fonte

Leggi altre domande sui tag