Spel: Räkna ut mängd belönad "experience" beroende på level

Trädvy Permalänk
Medlem
Plats
Gnosjö
Registrerad
Maj 2012

Spel: Räkna ut mängd belönad "experience" beroende på level

Håller på att bygga ett spel och har märkt att det krävs en hel del matte.
Jag stöter gång på gång på problemet att jag inte riktigt vet vilka algoritmer/formler jag ska använda för att räkna ut
det jag vill få fram.

Det jag nu är behöver hjälp med är en matematisk formel som räknar ut hur mycket experience spelaren får beroende på vilket level denne är.

Ett exempel:
Ett quest kräver att man är minst level 10.
Om en spelare som är level 15 gör questet så ska denne få mindre experience än spelaren som är just lvl 10

Variabler för uträkningen:

Quest reward exp: Required level for quest: Player level:

Hjälp mig gärna bolla lite ideer om hur jag ska räkna ut detta

Kort info om spelet om någon undrar: Webbläsarspel med mörkt tema, byggt i php/mysql

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2015

Kanske tänker helt galet men något sånt här kanske:

Om playerLevel > requiredLevel = kalkylera skillnaden mellan requiredLevel och playerLevel

Sen köra resultatet utav den uträkningen (säg att requiredLevel är 10 och playerLevel är 20) och använd den siffran för att minska questRewardExp (5000 exp säger vi).

questRewardExp = 5000 minus en viss procent, beroende på hur stor skillnad mellan requiredLevel och playerLevel är.

Om man är 1 level högre så kanske den drar av 10%, 2 levels, 12% och så vidare. Det får man väl anpassa till hur många levels som finns och lite annat.

Trädvy Permalänk
Medlem
Plats
Gnosjö
Registrerad
Maj 2012
Skrivet av drwlz:

questRewardExp = 5000 minus en viss procent, beroende på hur stor skillnad mellan requiredLevel och playerLevel är.

Om man är 1 level högre så kanske den drar av 10%, 2 levels, 12% och så vidare. Det får man väl anpassa till hur många levels som finns och lite annat.

Reward exp * (Required level / Player Level)
5000 * ( 10 / 15) = 3333,333...

Men jo det kan nog fungera. Har varit så inne i att bygga på spelet att jag inte ens tänkt på att det kunde vara så simpelt
Tack

Om någon här får för sig att göra ett eget spel och behöver en armor/damage reduction formel så använder jag mig av följande

100/(100+armor)

Tror tom att det är samma som League of legends kör med och den verkar fungera väldigt bra

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2013

XpGained=baseXP/((reqlevel-level)*0,5)

2000=5000/((10-15)*0.5)
Sedan kan man byta ut 0,5 mot lämpligt tal, kanske beroende på svårighets grad. Jag skulle vilja ha en exponentiell funktion egentligen men orkar inte fixa det på mobilen. Kan tipsa om geogebra iaf, jag anväder det när jag fixar likande algoritmer. Väldigt enkelt att använda.

EDIT:
Kom på att man kan använda en tredjegrads funktion för att fixa så att man även får xp boost om man kör quests med högre level req.

XPgained=BaseXP+(-5*(levelreq-level)^3)

4325=5000+(-5*(10-15)^3)

5625=5000+(-5*(10-5)^3)

AMD FX-8350|Sapphire R9 280|Obsidian 800D|Argon AR01

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2009

Ett annat alternativ är att inte minska hur mycket XP questet ger, utan att anpassa skalningen så att den XP du får av ett lägre level quest är lägre relativt den xp som krävs för level n+1.

Sitter på mobilen >°<

Men tänk dig
XPreq (currentlevel, nextlevel) (att ta sig från n till n+1)
XPreq(6,7)=10000
XPreq(7,8)=20000

Om då quest Y ger 1000XP, så kommer det att bli en decrease, relativt sätt till den tidsåtgång som krävs om quest på level 7 ger 2000XP.

Om du då justerar Y till att ge Yexp/2 på level > 6 så kommer du att folk inte göra questsen, då det inte är värt det.

Likadant så är det mer motiverande att göra Y på level < 6 (förutsatt att det questet inte har något level req) då det känns som att man får mycket mer XP, relativt de quests på level <6

För övrigt så ger posten ovan bra förslag

Trädvy Permalänk
Medlem
Registrerad
Jan 2009

deltaLevel = playerLevel - recommendedLevel
XpModifier = 1 - deltaLevel/MaxLevelDiff //kan få mer eller mindre xp beroende på level, men måste vara under recommendedLevel+MaxLevelDiff för att överhuvudtaget få xp
if (XpModifier > 0) {totalXp += questXp * XpModifier}

Trädvy Permalänk
Medlem
Registrerad
Maj 2014

Jo, jag skulle nog ha balanserat det på det sättet där du lär ha mer exp för att nå en ny level, men att dina quests ger samma oavsett level. På så sätt så minskar de inte i värde om du missar att göra en quest.