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 的民宿管理系统的教程 #### 项目概述 构建一个基于 Spring Boot 和 Vue.js 的民宿管理系统可以分为多个阶段,包括需求分析、系统设计、前后端开发以及最终的测试与部署。此过程不仅涉及技术选型和技术栈的选择,还涉及到具体的业务逻辑实现。 #### 技术框架选择 后端采用 Spring Boot 框架[^2],其优势在于能够快速搭建微服务架构的应用程序,并提供了丰富的开箱即用的功能模块来简化企业级应用的开发流程。前端则选择了 Vue.js 进行页面渲染和交互处理,Vue.js 是一种易于上手且高效的 JavaScript 框架,适合用于构建单页应用程序(SPA),并且拥有庞大的社区支持和插件生态。 #### 系统核心功能介绍 该民宿管理系统应具备如下主要特性: - 用户注册登录:允许房东发布房源信息和个人资料; - 房源信息发布:提供详细的房屋描述、图片上传等功能; - 预订订单管理:支持在线预订房间日期范围内的可用状态查询及下单支付操作; - 客户评价体系:收集住客对于入住体验的真实反馈以便后续改进服务质量; - 数据统计报表:生成各类经营数据图表帮助管理者了解运营情况做出决策调整。 #### 开发环境准备 为了顺利开展本项目的编码工作,在本地计算机环境中需安装 JDK (Java Development Kit), Maven 构建工具, MySQL 或其他关系数据库服务器作为持久化层存储介质,IDE(Integrated Development Environment) 推荐使用 IntelliJ IDEA Ultimate Edition 或 Eclipse IDE with STS(Spring Tool Suite). #### 启动 Spring Boot 应用程序实例 下面是一个简单的 Spring Boot 控制器类 `HelloController` 来验证当前环境是否正常运作: ```java package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Welcome to the Airbnb Management System!"; } } ``` 当访问 `/hello` 路径时会返回欢迎消息字符串表示服务已成功启动并监听请求. #### 设计 RESTful API接口 RESTful Web Services 是现代Web开发中最常用的一种风格之一,它定义了一组约束条件和原则用来指导客户端和服务端之间的通信协议。以下是几个常见的API路径及其作用说明: | HTTP Method | Path | Description | |-------------|-----------------------|--------------------------------------| | GET | /api/v1/houses/{id} | 查询指定ID编号下的房源详情 | | POST | /api/v1/bookings | 提交新预约记录 | | PUT | /api/v1/reviews/{id} | 更新特定评论内容 | | DELETE | /api/v1/users/{userId} | 删除某位用户的账户 | 以上仅列举部分可能存在的路由映射方式供参考实际项目可根据具体场景灵活定制。 #### 关联实体模型建立 考虑到民宿平台所特有的领域对象结构复杂度较高因此建议引入 JPA(Java Persistence API) 方便地完成ORM(Object Relational Mapping) 映射从而降低SQL语句编写难度提高代码重用率。这里给出两个基础的数据表——User 表保存用户基本信息而 House 则关联着每间出租屋的具体参数设置。 ```java @Entity @Table(name="users") public class User{ @Id private Long id; private String name; private String email; ... } @Entity @Table(name="houses") public class House{ @Id private Long house_id; private Double price_per_night; private Integer max_guests; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="owner_id", nullable=false) private User owner; // 外键指向 users 表中的 user.id 字段 ... } ``` 通过上述示例可以看到如何利用注解标注字段属性进而自动创建相应的 SQL DDL(Data Definition Language)脚本来初始化数据库模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starzkg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值