Unity实战之王者荣耀段位计算

举报
爱上游戏开发 发表于 2022/06/24 18:04:36 2022/06/24
【摘要】 前言嗨咯,好久不见呐,五一劳动节到了,首先祝大家节日快乐呀~其次,做好防疫保护哦。无聊的话,来看看小女子的文章吧,包你感兴趣! 背景最近开始接触PVP系统,以前都是做一些小功能,从心底来说,这种PVP系统是对我的挑战。虽然不是很有信心能做好,但是既然有这个机会,我还是愿意尝试一下。正巧最近王者的段位也到达了一个高度,给大家炫一下~~ 段位描述这不,一来就涉及到了段位。段位分为大段位和小段位...

前言

嗨咯,好久不见呐,五一劳动节到了,首先祝大家节日快乐呀~其次,做好防疫保护哦。无聊的话,来看看小女子的文章吧,包你感兴趣!

背景

最近开始接触PVP系统,以前都是做一些小功能,从心底来说,这种PVP系统是对我的挑战。虽然不是很有信心能做好,但是既然有这个机会,我还是愿意尝试一下。
正巧最近王者的段位也到达了一个高度,给大家炫一下~~
在这里插入图片描述

段位描述

这不,一来就涉及到了段位。段位分为大段位和小段位。
大段位从低到高分别是:青铜,白银,黄金,铂金,钻石,大师,王者
小段位从低到高分别是:Ⅴ,Ⅳ,Ⅲ,Ⅲ,Ⅱ,Ⅰ

配置数据

策划配置数据如下:

lcoal config = {
    [1] = { name = "青铜",score = { 100, 300, 500, }, },
    [2] = { name = "白银",score = { 900, 1200, 1500, }, },
    [3] = { name = "黄金",score = { 1800, 2500, 3600, }, },
    [4] = { name = "铂金",score = { 5000, 6000, 7000, 8000, 9000, }, },
    [5] = { name = "钻石",score = { 10000, 11000, 12000, 13000, 14000, } },
    [6] = { name = "大师",score = { 15000, 16000, 17000, 18000, 19000, }},
    [7] = { name = "王者",score = { 20000, }},
}

配置数据存储

思路:为了方便使用,我们会将上面的配置信息转化为浅显易懂的格式,使用二维数组表示,一维代表大段位,二维代表小段位。这样,当我们知道大段位和小段位时,就能很方便的取数据。
需要注意的是,小段位的高低和数值大小是相反的。可以通过该取大段位对应的小段位数量-当前处于第几小段位+1=小段位名对应的下标。
例如:

--从配置可以看出,对应的是铂金Ⅳ
local stage = {"Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ"}
local max = 4
local min = 2
--获取小段位名
local minName = stage[#config[max]-min+1]

知道了小段位名的获取方法,就能拼接出玩家的整体段位名。
整体段位名 = 大段位名…小段位名
将配置格式转化为程序使用格式(二维数组)

local stageData = {}
for i,v in ipairs(config) do
    stageData[i] = {}
    for a,b in ipairs(v.score) do
        stageData[i][a] = {}
        stageData[i][a].name = v.name..stage[(#v.data5)-a+1]
        stageData[i][a].score = b
    end
end

段位值转换

为了方便,我们不会去保存一个大段位值,再去保存一个小段位值,我们通过使用公式计算得到一个值,我们只需要知道这和个值,即可算出大段位值和小段位值:

section=max*100+min
section:玩家段位数据
max:大段位
min:小段位

因为我们保存的配置格式是通过大段位和小段位保存的,那么,我们如何根据玩家实际段位取得对应的大段位和小段位呢?
其实很简单的,通过运算符操作:除法实现

local max = math.modf(section/100)
local min = max*100 - 100

获取段位信息

获取了大段位和小段位之后,就可以直接取数据了
方法如下:

stageData[max][min+1]

后记

玩游戏的小伙伴,快来围观吧~顺便炫出你们的段位

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。