日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Spring Boot——游戏成就系统设计DEMO

發布時間:2024/10/5 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。