游戏中用户升级的设计

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

用户升级 

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

id               :  等级的id

exp_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);
}

  

 

转载于:https://www.cnblogs.com/sunliinbky/p/3171032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值