游戏中用户升级的设计

来源:互联网 发布:2016淘宝屏蔽搜索排名 编辑:程序博客网 时间:2024/04/28 03:15

在游戏中,有多个模块都会涉及到升级的问题,例如,玩家升级,装备升级,英雄升级等升级问题。

用户升级 

   数据库设计 需要一个经验值静态表 

id               :  等级的idexp_line     :  本级达标经验值exp_offset :  区间偏移量,即离下一级还需要多少经验值friend_max  : 当前等级下最大拥有多少个朋友hero_max : 当前等级下,最多可以有多少个英雄......................................

 

 下一级 升级线是 $level['exp_line_next'] = $level['exp_line'] + $level['exp_offset'];

 用户升级的流程:

  判断用户是否是最高级 ----- >  经验值还未到下一级别的升级线 ------->获取当前经验值对应的等级  -------> 判断最新的等级是否和原来的等级一样   ------>  执行等级更新  --------> 升级后的后续操作,如,解锁其他模块等。

 

根据经验值获取当前等级函数:

    public function getLevelByExp($curExp)    {        return $this->where("`exp_line` <= '{$curExp}'")->order('`id` DESC')->fetchPk();    }

 

升级的函数:

    /**     * 升级     *     * @return bool     */    public function levelUp()    {        // 已经是最大等级(不能再升了)        if ($this->_user->isTopLevel()) {            return -10;        }        // 经验值还未到下一级别的升级线        if ($this->_user['exp'] < $this->_user['level']['exp_line_next']) {            return -20;        }        // 获取当前经验值对应的等级        $curLevel = Dao('Static_Level')->getLevelByExp($this->_user['exp']);        if (! $curLevel) {            return -30;        }        if ($curLevel['id'] == $this->_user['level_id']) {            return -40;        }        // 升级前是几级        $orgLevel = $this->_user['level'];        // 执行更新        if (! $this->_user->update(array('level_id' => $curLevel['id']))) {            return -50;        }        // 升级的后续操作        if ($curLevel['id'] > $orgLevel['id']) {            // 加满生命值、移动力、精力            $this->_user->restore->full();            }            // 升级达到指定等级后解锁某些模块            $this->_user->unlock->doUnlockAfterLevelUp($orgLevel['id'], $curLevel['id']);        }        return $curLevel['id'];    }

  

什么时候调用升级函数:

 因为升级是由于获取经验值,才有可能导致升级,所以,每次获取经验值的时候,都需要检测一下,是否满足升级条件。

 

function  addExp($exp){   $this->_user->base->levelUp($exp);
原创粉丝点击