首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >层次化PHP算法

层次化PHP算法
EN

Stack Overflow用户
提问于 2015-02-14 15:07:27
回答 2查看 358关注 0票数 0

我想要一些算法来建立一个PHP级别提升系统,我已经建立了一个系统来提高人们的级别,但是如果人们获得了大量的exp,所以他们需要升级多次我的代码示例,那该怎么办呢?

if(isset($_POST['id']) && isset($_POST['amount'])) { $amount = $_POST['amount']; $user = $_POST['id']; $exp;$etnl;$newExp;$level;

代码语言:javascript
复制
    `//select exp and etnl from DB 
    $result = DB::getInstance() ->query("SELECT exp,etnl,level FROM exp WHERE id = $user");
    $result->setFetchMode(PDO::FETCH_ASSOC);
    $row = $result->fetch();
    $exp = $row['exp'];
    $etnl = $row['etnl'];
    $level =  $row['level']
    //c where to level up user or to add exp to his ep bar
    if($amount + $exp > $etnl) {
        $etnl = $etnl * 2;
        $leftOvers = ($amount + $exp) - $etnl;
        $newExp = $leftOvers;
        $level = $level + 1;`


    $result = DB::getInstance()->prepare("UPDATE exp SET exp=?,level=?,etnl=? WHERE id=?");
    $result->execute(array($amount,$level,$etnl,$user));
    } else {
        $result = DB::getInstance()->prepare("UPDATE exp SET exp=? WHERE id=?");
        $result->execute(array($amount,$user));

    }
}`

但是如果exp可以将一个人提升2倍,任何帮助或任何新代码,这个系统就会失败吗?顺便说一句,等下一关,谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-14 16:14:56

如果您不想像其他回答sugget那样手动键入一个级别表,您也可以尝试使用递归函数来执行您的过程:

代码语言:javascript
复制
$current_exp = 0;
$current_level = 1;
$to_next_level = 1000;

function did_level( $amount = 0 ) {
    global $current_exp;
    global $curent_level;
    global $to_next_level;

    $tmp_amount = $amount + $current_exp;
    $tmp_amount_remainder = $tmp_amount - $to_next_level;

    if ($tmp_amount >= $to_next_level) {

        $current_level++;
        $to_next_level *= 2;
        $current_exp = $tmp_amount;

        if ($tmp_amount_remainder > 0) {
            // Level us up again.
            did_level( $tmp_amount_remainder );
        } else {
            // Store the new level, to next level, and current exp
        }

    } else {
        // Store the new exp amount
    }

}
票数 0
EN

Stack Overflow用户

发布于 2015-02-14 16:04:20

你必须得到一个级别表,它基本上是一个exp,级别对的列表。例如,

代码语言:javascript
复制
$level_list = [
    ['exp' => 0, 'level' => 1],
    ['exp' => 100, 'level' => 2],
    ['exp' => 1000, 'level' => 3],
    // etc.
];

然后,从结束时开始迭代表:

代码语言:javascript
复制
$i = count($level_list);

while($i > 0) {
    $i--;
    if ($user_exp >= $level_list[i]['exp']) {
        // this is the level we need
        break;
    }
}

$target_level = $level_list[$i]['level'];
$target_exp = $level_list[$i]['exp'];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28516926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档