前言
嗨咯,好久不见呐,五一劳动节到了,首先祝大家节日快乐呀~其次,做好防疫保护哦。无聊的话,来看看小女子的文章吧,包你感兴趣!
背景
最近开始接触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]
后记
玩游戏的小伙伴,快来围观吧~顺便炫出你们的段位