2017-07-24 44 views
0

我正在创建一个非常简单的基于文本的RPG测试我的技能。我是初学者,当谈到JS时,我正在使用它来学习和磨练我现有的技能,所以如果这看起来很基本,请耐心等待。球员水准测定功能无法正常工作我想

实际上,我创建了一个函数来检查玩家当前的EXP是否等于或大于玩家所需的EXP。它的工作原理,它实际上是我的水平的球员伟大的和给技能点等

下面是函数:

function getExp(amt) { 
     player.currentExp += amt; 
     if (player.currentExp >= player.reqExp) { 
     player.level ++; 
     player.reqExp = (player.level * 100) + ((player.level * 10) * 4); 
     player.currentExp = 0; 
     player.points += 5; 
     } 
    } 

说,例如,你需要的是EXP 100,您会收到120个EXP点。我没有把20 EXP加到下一级,而是总是重置为0.我明白我已经设置它来做到这一点,但我想知道我该如何解决这个问题。我仍然希望EXP栏清空并从0开始(+从前一级继承的额外EXP)。

我对HP,MP和EXP使用HTML进度条。

在此先感谢。

+0

以A开头的功能* *得到应该返回的东西。可以将它重命名为* set/increase/add *? –

+0

你的问题是什么,你只是想继续剩下的几点? – Iqon

回答

0

所有你需要做的,以解决问题,如这些是从一开始再次工作,你的逻辑。上面的代码使玩家水平上升,并重置酒吧。你不检查你的玩家获得的EXP是否大于或等于所需的金额。
相反,你应该做的是这样的:

function getExp(amt) { 
    player.currentExp += amt; 
    if (player.currentExp == player.reqExp) { //the amount gained is equal to the required 
    player.level ++; 
    player.reqExp = (player.level * 100) + ((player.level * 10) * 4); 
    player.currentExp = 0; 
    player.points += 5; 
    } else if (player.currentExp > player.reqExp){//the amount gained is greater than the required one 
    //calculate the extra EXP gained 
    var extra = player.currentExp - player.reqExp; 
    player.level ++; 
    player.reqExp = (player.level * 100) + ((player.level * 10) * 4); 
    player.currentExp = extra; 
    player.points += 5; 
} 

一个友好注:此逻辑需要更多的工作,例如,如果有什么玩家获得EXP等于二的水平?

0

如果水平是成正比的所需量的方便:

player.level += Math.floor(player.currentExp/100); 
player.currentExp=player.currentExp%100; 

如果你想有一个持续的增长需要EXP,可以这样做:

player.requiredExp=100; 

function getExp(val){ 
    player.currentExp+=val; 
    while(player.currentExp>=player.requiredExp){ 
    player.requiredExp=player.requiredExp+100;//or some other algorithm 
    player.level++; 
    player.currentExp-=player.requiredExp; 
    } 
} 

并参照播放机的功能,应该是玩家对象的一部分,并且你的功能名称不是明智的选择(其他人可能想在某些时候使用你的代码),所以整个事情我将如何写它:

var player={ 
    level:0, 
    _exp:0, 
    set exp(value){ 
    this._exp+=value; 
    this.level += Math.floor(this._exp/100); 
    this._exp=this._exp%100; 
    }, 
    get exp(){ return this._exp} 
}; 

所以,你可以很容易做到:

player.exp+=500; 

http://jsbin.com/rogolapume/edit?console

0

您可以使用for循环遍历您的关卡所需的体验,并减去每个循环上所述关卡的exp需求量。在某些时候,你会达到一个需要经验高于你的经验的水平,在这一点上返回水平。

var exp = document.querySelector(".exp"); 
 
var levelDOM = document.querySelector(".currentLevel"); 
 
exp.addEventListener('input', function (evt) { 
 
\t var newValue = getExp(exp.value); 
 
    levelDOM.innerHTML = newValue; 
 
    console.log(newValue) 
 
}); 
 

 
var level = [100, 200, 300, 600, 700, 800, 1000]; 
 

 

 
function getExp(exp) { 
 
\t for(var i = 0; i < level.length; i ++) { 
 
    \t if(exp > level[i]) { 
 
    \t exp -= level[i]; 
 
    } else { 
 
    \t return i + 1; 
 
    } 
 
    } 
 
    return 1; 
 
}
<input type="number" class="exp" /> 
 
Current Level : <span class="currentLevel"></span>