javascript
2016-12-26 4 views -1 likes 
-1

シンプルレベルシステムを作成しようとしていますが、何らかの形でレベルを更新していません。誰もこれで私を助けることができますか? (お金とXP作品)xp、money、およびレベルを持つシンプルレベルシステム

var money = 0; 
var xp = 0; 
var level = 1; 

window.onload = function() { 
document.getElementById("money").innerHTML = 'Money: ' + money; 
document.getElementById("xp").innerHTML = 'XP: ' + xp; 
document.getElementById("level").innerHTML = 'Current level: ' + level; 
} 

function giveExp(number){ 
money = parseInt(money) + 50; 
xp = xp + 100; 

document.getElementById("money").innerHTML = 'Money: ' + money; 
document.getElementById("xp").innerHTML = 'XP: ' + xp; 
} 


if (xp > 150 && xp < 450) { 
level = level + 1; 
document.getElementById("level").innerHTML = 'Current level: ' + level; 
} 
+0

は、それが動作しますが、レベルのシステムのいくつかの種類あなたはXPの量に達したとき、あなたはレベルアップを作成するためのより良い方法がある場合は[OK]を –

答えて

0

あなたのコード+より良いstrucutureと:

var money=0,level=1,xp=0; 

function updatecounters(){ 
    if (xp > 400) { 
     level+=Math.floor(xp/400);// if xp is 1000, two levels up 
     xp=xp%400;// what is left when increasing levels 
    } 
    document.getElementById("money").innerHTML = 'Money: ' + money; 
    document.geElementById("xp").innerHTML = 'XP: ' + xp; 
    document.getElementById("level").innerHTML = 'Current level: ' + level; 
    } 


function giveExp(number){ 
    money += 50; 
    xp += 100; 
    updatecounters();//update 
} 

    window.onload=updatecounters;//onload init counters 

より良いです(IIFEとクロージャを使用):

var user=(function(){ 
    window.onload=user.update; 
    var money=0,level=1,xp=0;// no way to change these without updating (better work flow) 
    return { 
     increaseXP:function(val){ 
      xp+=val; 
      if(xp>400){//enough xp for level up 
      level+=Math.floor(xp/400); 
      xp=xp%400; 
     } 
     user.update(); 
     }, 
    increaseMoney:function(val){ 
     money +=val; 
     user.update(); 
    }, 
    update:function(){ 
     document.getElementById("money").innerHTML = 'Money: ' + money; 
     document.geElementById("xp").innerHTML = 'XP: ' + xp; 
     document.getElementById("level").innerHTML = 'Current level: ' + level; 
    }}; 
    })(); 

このような使用:

user.increaseXP(200); 
user.increaseMoney(-500);// bad day :/ 
user.money=500; // error, so you cant change without updating -> prevent bugs 
1

giveExp関数にif声明を移動:作業XPシステム

function giveExp(number){ 
money = parseInt(money) + 50; 
xp = xp + 100; 

document.getElementById("money").innerHTML = 'Money: ' + money; 
document.getElementById("xp").innerHTML = 'XP: ' + xp; 

if (xp > 150 && xp < 450) { 
    level = level + 1; 
    document.getElementById("level").innerHTML = 'Current level: ' + level; 
} 

} 
+0

gibeExp関数にを置きますか?私がボタンをクリックすると、私は2回レベルアップします。 –

+0

@ラルフ:レベルアップでXPをリセットするのはどうでしょう?(私の解決策を見てください)... –

関連する問題