lørdag, januar 23, 2021

Programmering – Mat

Daily Rush Debat Programmering Programmering – Mat

  • Dette indlæg indeholder 9 kommentarer, har 6 deltagere og blev senest opdateret af  Prise for 12 år siden.
  • Forfatter
    Emne
  • #0

    papa62
    Bruger
    157 indlæg
    Offline

    Hejsa

    Jeg sidder lige og roder med et “xp/level” system i php.

    Jeg kunne godt tænke mig at forøge antallet af xp der skal bruges med 50 for hver level.

    Min formel ser således ud:

    if($exp>($level*50)+($level*200)) {
    $level = $level+1;
    }
    Her skal man ved level 1 bruge 250 exp for at stige. Men fra 2 til 3 skal man også bruge 250 osv osv.

    Tanken er at man fra 2 til 3 så skal bruge 300 osv derudaf..

    Er der nogen der ved hvordan i alverden jeg skal lave sådan en formel ?

    Mange tak

Viser 9 kommentarer - 1 til 9 (af 9 i alt)
  • Forfatter
    Kommentarer
  • #1

    Tjaz
    Bruger
    3.974 indlæg
    Offline

    #0 jeg har læst det du skrive 5 gange nu, og jeg forstå stadigvæk ikke helt hvad det er du vil.

    #2

    papa62
    Bruger
    157 indlæg
    Offline

    haha nej, det er fandme også svært at forklare.. hmm..

    Altså, fra level 1 til level 2 i det her spil, skal man bruge 200 XP.
    Fra level 2 til level 3 skal man så bruge 250 XP.
    3 til 4: 300 XP

    osv..

    Altså 50 mere per level man siger, så det i sidste ende, ender med at være en hel masse xp per level..

    Hjalp det ?

    #3

    Tjaz
    Bruger
    3.974 indlæg
    Offline

    $level = 1;
    $xp = 0;

    If($xp >= ($level*50)+150)
    {
    $level = $level+1
    }

    Edit: Gik lidt hurtigt. $needed_xp skulle ikke have været med.

    #4 Nej det er ikke +200, hvis vi skal starte på 200 og steppe 50 op hver gang.

    #5 Hvis dette ikke er hvad du skal bruge, er jeg stadig ikke med på hvad du vil.

    #4

    Natlampen
    Bruger
    646 indlæg
    Offline

    #3 du kan ikke sammenligne med $needed_xp da den ikke har nogen værdi, du skal sammenligne med $xp, og så er det vist +200 istedet for +150

    Må jeg be om en cola ?

    #5

    papa62
    Bruger
    157 indlæg
    Offline

    $exp er brugerens xp

    Formlen er “needed xp” til at level op.. Det er den jeg mangler

    #6

    Natlampen
    Bruger
    646 indlæg
    Offline

    #5 Den er med i det script som #3 skriver.
    $needed xp = ($level*50)*150

    Må jeg be om en cola ?

    #7

    Skye
    Bruger
    235 indlæg
    Offline

    #0

    Prøv følgende:

    // Smid det følgende hvor du deklarerer andre variabler.
    $current_xp = 226; // default value
    $xp_base_value = 200 // Xp nødvendige for næste level
    $increment_modifier = 50;

    // Kaldes når de nuværende xp skal opdateres
    // Eksempel: updateCurrentXP(25)
    function updateCurrentXP($gain) {
    $current_xp = $current_xp + $gain;
    }

    // Kaldes umiddelbart før tjek for level
    // Eksempel: $needed_xp = getNeededXp()
    function getNeededXp() {
    return ($xp_base_value + ($level * $increment_modifier));
    }

    // Vi får 25 XP så current_xp kommer op på 251, og dermed kvalificerer til stigning
    updateCurrentXP(25);

    // udfører tjekket og øger level såfremt vi er kvalificeret
    if ($current_xp >= getNeededXp()) {
    $level = $level + 1;
    }

    For ikke at få en flad stigning (ie, 50 ekstra xp for hver level) kan du lave følgende lille tilføjelse

    function getNeededXp() {
    $modifier = $xp_base_value + ($level * $increment_modifier) * 0.93;
    return ($xp_base_value + ($level * $increment_modifier) + $modifier);
    }

    Her vil der så istedet for 50 ekstra hver level, ske en stigning i antallet af nødvendige xp.. dvs, jo højere level, jo flere xp er nødvendige..

    0.93 i eksemplet ovenfor kan selvfølgeligt justeres, og skal sikkert justeres indtil det føles rigtigt :p

    O death, with thy ebony cloak sublime. How abstract thy harvest rose doth fall. Consigned to the flames of woe in sweet modesty. I renounce myself from the everdawn.

    #8

    gnavpot
    Bruger
    2.494 indlæg
    Offline

    En alternativ forklaring kunne være:

    Lad os se på dit første eksempel:
    $exp>($level­*50)+($level*20­0)

    Det kan reduceres til:
    $exp > $level*250
    Som du selv har bemærket giver det en linær stigning på 250 for hvert level.

    Det du gerne vil have er en exponentiel stigning. Dvs. du skal have ganget med $level mere end en gang på højresiden.

    F.eks.
    $exp > $level*250 * $level

    Som giver:
    Level 1-2 kræver 250 (250 for at stige)
    Level 2-3 kræver 1000 (750 for at stige)
    Level 3-4 kræver 2250 (1250 for at stige)
    osv.

    Hellere komme galt afsted, end slet ikke komme afsted.

    #9

    Prise
    Bruger
    607 indlæg
    Offline

    Du kan bruge heltalsdivision til at lave de der ‘trin’ på 50xp

    $level = ($xp – 150) / 50;

    (der er lidt knas med formlen indtil man runder 150xp, der returnerer funktionen et negativt level)

    edit: nevermind, så ikke det ændrede spørgsmål

Viser 9 kommentarer - 1 til 9 (af 9 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.