Spring Boot——游戏成就系统设计DEMO
生活随笔
收集整理的這篇文章主要介紹了
Spring Boot——游戏成就系统设计DEMO
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本概念
成就:成就系統可以理解為對某個角色成長過程重大事件的記錄;玩家通過查看成就跟蹤角色涉及的重大事件。
問題分析
獲得成就需要一定的條件,也就是,玩家需要完成某種指定的動作后,才可以獲得需要的成就。下面我具體舉一個成就的例子,說明成就系統的實現方式。
??????成就名: ????勇者無畏
??????達成條件:戰斗勝利次數到達10次
??????戰斗獎勵:增加玩家的聲望值。
????實現以上需求,需要注意的問題:
????A ??需要統計玩家戰斗的次數
????B ?當成就達到的時候,不能重復達到
????C ?完成成就后,可以增加玩家的聲望值
????D 進行某種動作的時候,可能同時開啟兩個成就
業務邏輯
數據庫設計
?需要統計完成戰斗次數的表:user_state
? ??
我的成就表: user_achievement
成就的配置表:
解決方案
JAVA?
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zstu.metrocity.entity.Achievememt; import org.apache.ibatis.annotations.*;import java.util.List;/*** <p>* Mapper 接口* </p>** @author ShenTuZhiGang* @since 2020-04-09*/ public interface AchievememtMapper extends BaseMapper<Achievememt> {@Select("SELECT * FROM user_achievememt JOIN achievememt ON aid=achievememt.id WHERE uid=#{userId}")@Results(value = {@Result(property = "id",column = "aid")})List<Achievememt> getByUserId(Integer userId); }?
PHP
我的統計模型類:?
記錄需要統計的字段,如果字段發生改變,調用成就類里面的方法。
<?php/*** 我的統計 模型** @author zhangkai* $Id: Stats.php 4374 2013-07-30 07:26:26Z sunli $*/class Model_User_Stats extends Model_User_Trait {/*** 子類構函** @return void*/protected function _initTrait(){$this->_prop = $this->DaoDs('UserStats')->get($this->_uid);}/*** 指定字段自增** @return bool*/public function increment($field, $offset = 1){// 注意這里 需要給這個屬性加成,否則,就算數據庫里面的字段已經更新,還是不能獲取到最新信息$this->_prop[$field] += $offset;return $this->DaoDs('UserStats')->where(array('uid' => $this->_uid))->increment($field, $offset);}// 增加主動勝利場數public function addTotalWinTimes($num = 1){$this->increment('total_win_times', $num);$this->_user->achievement->checkBattleWinAchieve();}}我的成就類:
職能:?
檢測成就是否達成
改變我的成就的進度
成就達成后,給予相應的獎勵
/*** 我的成就**/class Model_User_Achievement extends Model_User_Trait {// 內部方法,用于判斷是否達成了某種類型的成就private function _checkAchieve($field, $attrs){$times = $this->_user['stats'][$field];$result = array();foreach ($attrs as $data) {if ($times >= $data['line']) {$result[$data['achieve_id']] = $this->achieve($data['achieve_id']);}}return $result;}// 檢測是否達成了戰斗勝利的相關成就public function checkBattleWinAchieve(){$data = array();// 同時開啟兩個成就 line:表示成就需要的總進度$data[] = array('line' => 100, 'achieve_id' => 721003);$data[] = array('line' => 10, 'achieve_id' => 721001);return $this->_checkAchieve('total_win_times', $data);}// 達成成就(不可重復達成)public function achieve($achieveId){// 已達成過直接退出 如果是第一次開啟成就,則插入此成就if ($this->DaoDs('UserAchievement')->isCreated($this->_uid, $achieveId)) {return false;}// 成就詳細$achieveInfo = Dao('Static_Achievement')->get($achieveId);// 實時彈出框$this->_user->tips->setTips('showGainAchievementTip', $achieveInfo);// 達成成就后 獎勵聲望$this->_user->base->addReputation($achieveInfo['reputation_award']);// 設置成就已經完成return $this->DaoDs('UserAchievement')->createAchieve($this->_uid, $achieveId);} }?
參考文章
https://blog.csdn.net/xnn2s/article/details/6193722
https://blog.csdn.net/looksunli/article/details/9672841
總結
以上是生活随笔為你收集整理的Spring Boot——游戏成就系统设计DEMO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ——安装
- 下一篇: Spring Boot——集成Swagg