高效的成就系统实现简介

什么是成就

成就系统可以理解为对某个角色成长过程重大事件的记录;玩家通过查看成就跟踪角色涉及的重大事件。

 

 

成就的策划模版数据

ID, 这个成就的唯一标识;

Name, 命名;

EventCategroy, 完成的事件对应的类型,类型是对各种事件大一个范围的分类;

EventCategroy2, 实际需求中可能有多种类型;

EventID1, 完成的事件ID,事件是指游戏中自定义各种事件,比如升级事件、完成多少任务事件等;

EventValue1, 上面的事件ID对应的值, 如升到20级,完成了1000次任务等;

。。。

EventIDN

EventValueN, 有些成就要完成多个事件才能完成;

 

其他各种限制参数,比如成就次数是否可累积等。

 

 

成就初步实现方法

1. 成就模版管理

    将上面的模版生成一个简单list。

 

2. 判断成就完成的触发点

    游戏过程中,存在很多地方会触发判断成就完成逻辑,比如,完成某个任务之后、升级之后、从某个副本出来之后等等。

 

3. 记录和成就相关的数据

    游戏过程中,将成就相关的数据记录下来;如果其他模块已经记录的,成就模块无须记录。这些记录的数据供4使用。

 

4. 确定哪些成就完成

    当某个模块触发了判断成就完成的逻辑时,会传入事件集合给成就模块。

    成就模块拿这些事件ID&Value和1中list比较,事件满足模版要求,说明这个成就就完成了。

 

 

性能优化

如果一个游戏成就数目50个以内,上面的实现方法性能上是可接受的。成就如果再多一些,有必要做优化。下面介绍另外一种处理时间和成就个数不成线关系的方法,效率是O(1)。

 

 1. 生成模版时要做一些额外的小动作

     生成 EventCategory + EventID->AchivementID 的一个映射表, EventCategory, EventID做为组合key。

     table1:

            EventCategory1  EventID1  ->  AchievementID1, AchievementID2

            EventCategory2  EventID2  ->  AchievementID2, AchievementID3

 

     以成就ID为key,生成一个成就hash表,根据成就ID可以得到对应成就的内容, 并且EventCategory与EventID要顺序。

     table2:

            AchievementID1 -> EventCategory1 EventID1 EventValue1 EventCategory2 EventID2 EventValue2

 

      上面两个映射表在系统初始化时生成1次。

 

2. 触发时处理

      触发时,某个模块会传进来事件集合,根据table1, 得到所有事件所对应的成就IDs,最后形成类似下面一个以成就ID为key的临时表:

      table3:

            AchievementID1 -> EventCategory1 EventID1 EventValue1, ........

            AchievementIDn -> ..........

      注意,EventCategory&EventID排序规则和table2相同。

 

      生成上面的table3时, 我们还要记录哪些成就须要去判断是否完成,这个非常关键!所以我还要弄个表保存这些成就IDs。

      table4:

             1   2   3    9   2    1

 

      table4中有重复的ID,想个效率是O(1)的办法避免他重复。

 

      最后,先拿table4中的各个成就ID,从table3定位到对应的触发事件集合,用这个集合和table2比较一下,就知道哪些成就完成了。

 

      经过优化,策划弄个10个或10000个成就模版,成就模块运行的效率是一样的。有兴趣的同学可以体会一下。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 很抱歉,我无法提供您所要求的源码,因为我是一个语言模型AI,并不具备获取和分享代码的能力。但我可以试着帮您解决关于Vue实现种菜游戏的问题。您可以先了解一下Vue.js框架的基本语法和组件通信的方式,然后通过自己的思维和创意来设计和实现您所期望的种菜游戏。如果您对于Vue.js还比较陌生,您可以在CSDN上查找一些Vue.js的教程和实现案例,以便更好地理解和掌握它的使用。 ### 回答2: Vue实现种菜游戏的源码,主要包含以下几部分内容: 1. 页面结构及样式:使用Vue的模板语法编写页面结构,通过CSS样式进行美化。 2. 数据定义与绑定:使用Vue的数据绑定技术,定义和管理游戏中需要的各种数据,例如种子数量、土地状态、成长进度等。 3. 功能实现:通过Vue的指令和事件处理机制,实现游戏的各种功能。比如点击土地可以种植种子,点击种子可以浇水、施肥,种子在一定时间内会自动成长等。 4. 用户交互:通过Vue的事件处理机制,监听用户的各种操作行为,如点击、拖拽等,根据用户的操作展示对应的效果。 5. 游戏逻辑:根据游戏规则和设计,编写游戏的逻辑代码,以实现游戏的正确进行。包括用户操作的判断、种子的成长规律、产出的计算等。 总而言之,Vue实现种菜游戏的源码主要涉及到页面结构、数据管理、功能实现、用户交互和游戏逻辑等方面的代码编写。通过合理的利用Vue的特性,能够简洁高效实现一个具有良好用户体验的种菜游戏。 ### 回答3: Vue.js是一种流行的JavaScript框架,用于构建交互式的单页面应用程序。要实现一个种菜游戏,需要以下步骤: 1. 首先,需要使用Vue CLI来创建一个新的Vue项目。可以使用命令行运行"vue create my-garden"来创建一个名为"my-garden"的新项目。 2. 一旦项目创建完毕,就可以使用Vue的单文件组件(SFC)来创建游戏的不同部分。在游戏中包括土地、种子、植物的生长过程、收获等。 3. 在游戏中,需要使用Vue的状态管理库,如Vuex来管理游戏的状态。通过Vuex,可以方便地管理和更新游戏中的数据,例如土地的状态、植物的生长阶段等。 4. 游戏中需要有一些用户交互,例如点击土地来种植植物、点击植物来进行不同的操作等。这可以通过Vue的事件处理机制来实现。 5. 要显示游戏中的不同部分,需要使用Vue的模板语法来创建游戏的视图。可以在组件中使用v-for指令来遍历并显示多个土地和植物。 6. 为了使游戏更加有趣,可以添加一些动画效果。Vue提供了过渡和动画的支持,可以通过添加Vue的过渡组件和动画类来实现。 7. 最后,还需要使用Vue的路由功能来创建不同的游戏界面。可以使用Vue Router来创建游戏的登录页面、游戏页面、胜利页面等。 通过以上步骤,就可以使用Vue来实现一个种菜游戏的源码。要使游戏更加完整和实用,还可以添加一些其他功能,例如成就系统、商店系统、多人游戏等。Vue的灵活性和强大工具使得设计和开发这样的应用变得更加简单和高效

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值