猫史档案馆


【教程】阴间挑战之如何用一个云变量做能显示多个数据的排行榜

用户:SGSMix梨SGSMix梨查看:38 回复:34 评论:38 创建时间:2022-02-16T12:23:47


由于单公云聊天室和云列表自制排行榜已经烂大街了,所以打算整点不一样的

再加上本着能节省云空间就往喵里节省的态度,我整出了单公云排行榜

而且考虑到实用性,这个排行榜要不仅能显示得分和用户名,还要能显示玩家一些其他的数据

比如我应用的作品是一个飞机大战类的游戏,在显示得分(即航程)的同时。还会显示玩家所用的武器,战机,武器等级以及战机等级

center_image

作品链接:https://shequ.codemao.cn/work/131898272

center_image

基本思路肯定是用...按...分开成列表积木把变量列表化,说得通俗点,就是用间隔符让变量能储存多个信息

像这样:12<1<10<5(间隔符是“<”)

这样一个变量就能储存四个信息了,分别是12,1,10和5

但是由于要显示玩家的多个信息,所以这个分开成列表的积木要套用两层,学过c++的大可以理解为结构体数组或二维数组

把一个玩家的多种信息组合在一起是一层,把很多玩家的信息组合在一起是第二层

比如在我的作品中,一个玩家的有六种需要显示的信息,分别是用户名,使用武器,使用战机,航程,武器等级以及战机等级,而我选择的第二层间隔符是“#”

那么一个玩家的信息就是这样的:

Mix梨#1#2#76.5#3#4

(这些信息如何排列随意)

所代表的含义是用户名为Mix梨,使用编号为1等级为3的武器,编号为2等级为4的战机,航程是76.5

积木如下(在我的作品中):

center_image

(这里最后一项是战机等级,至于为什么这么长是因为我把一个私云当27个用了气喵官方系列hhh)

考虑到公云有长度上限,以玩家信息的长度排行榜大概能容纳40人的信息,所以排行榜只会显示前40名

接下来就是主体部分,显然只有在玩家超越自己记录时才需要更新玩家在排行榜中的位置,所以先判断是否超越记录

center_image

(这里玩家信息是五合一的变量,第三项是最高纪录)

更新排行榜之前首先要判断玩家能否进入排行榜,如果能进入再更新

这里我选用的喵层间隔符是“<”

center_image

判断依据是排行榜长度小于40或者比排行榜上第40人的得分高

(玩家信息的第四项是得分)

考虑道简洁性所以单做一个函数

然后判断排行榜状态,如果是空的(为0)就直接将排行榜的值设为玩家信息,最简单的一种情况

center_image

如果不为零,就要判断当前用户是否已经在排行榜,如果已经在就清除之前的信息

center_image

这串积木的用途是寻找并清除排行榜中的玩家信息

由于玩家信息长度的不确定性,对这个变量式静态列表操作真的相当麻烦,不管删除还是插入仅仅一个元素都要完全重构整个列表

其中前两层循环用来寻找玩家信息,如果没则说明玩家之前并不在排行榜,记录一个变量(之后会用到)

如果检测到玩家信息就进行清除(重构列表,如果重构道到要删除的那项就跳过,相当于删除),需要一个保存排行榜记录排行榜状态,再用其数据重构排行榜

重构循环重计数器加一放在前面是因为喵项已经处理,直接跳过从第二项开始

这里还有一个特殊判断,即喵名如果超越记录仍是喵名,所以直接在当前处替换,并记录一个变量记录,用于判断之后是否还需要插入玩家信息

(其实寻找和重构的循环可以分开的,但当时做进寻找的循环里我也懒得改了)

如果在上一个循环中,没有在排行榜中检测到玩家信息,那么说明排行榜会多一项,如果此时排行榜长度已经达到上限,就需要删除最后一项

center_image

原理相同,就不多赘述了,还有记得刷新保存排行榜

最后将玩家信息插入,先判断是否需要插入(前面已经替换过),再进行操作,显然把排行榜上所有数据加上玩家信息再扔进列表里排个序是没必要的,只需要寻找玩家信息该插入排行榜中的什么位置就行,即小于等于(等于处理并列)前一项,大于后一项的位置

由于这种思路没法处理超越喵项的情况,单做一个判断是否超越喵项

center_image

然后是非特殊情况

center_image

这个循环中又会遇到两种特殊情况,由于重构排行榜的循环是从第二项开始的,所以没法判断比喵项小的情况单列一个判断,然后是循环到排行榜最后一项,没有下一项的情况就只需要比较上一项,单列一个判断

到这里基本上就完成了,最后剩下显示部分,非常简单就不展示了,到这里能看懂的应该都做得出来

emotion_编程猫_冷漠摆烂ing


回复

上一页1 页 / 共 2下一页
机灵的花粉蝶faIw机灵的花粉蝶faIw

路过,感叹道不错(单押*1)

点赞0


评论


FengTingFengTing

害羞羞 鸡汤来了()

总结:

分 分 往si里分。!!

点赞0


评论


PayCoPayCo

膜拜大佬!

点赞0


评论


寂梦晨风寂梦晨风

不就是二维数组吗……还有,正因极限压缩的修改之难(当然交给计算机不算太难吧?不过),所以一些使用人数太多/数据大的应用/网站就要加入验证,尤其是Microsoft,基本不把我们当自然人() 一个私云当多个用很常见,用于大数据 另外提醒,云列喵能装1000项,每项容纳128个字符(Unicode和ASCII都算,离谱),云变量喵为1000字符,别因存不下导致丢失数据哦~(我就被害过,我用一个公云装几百训练师的数据,结果溢出没装下,只得重新收集)

点赞0


评论


调皮的乔治调皮的乔治

收藏

点赞0


评论


小鱼yuzifu小鱼yuzifu

好!不过积木图片有点糊()

点赞1


评论


Summer橘子喵Summer橘子喵

大佬

点赞0


评论


AlcalaAlcala

大佬

点赞0


评论


闪_电_工_作_室闪_电_工_作_室

牛b,我这就试试

点赞0


评论


至尊超级闪电至尊超级闪电

我也试试

点赞0


评论


酳飞酳飞

收藏

点赞0


评论


千从千从

  

点赞0


评论


Austin4_5Austin4_5

个人认为一个公云最多存储250个左右的数据(每组数据占据4个字符)。

点赞1


评论


无敌版滑稽战神无敌版滑稽战神

星海之间!?

点赞0


评论


gzk的蛋黄派gzk的蛋黄派

牛b

点赞0


评论


ELA7096ELA7096

套娃单云嘛……

点赞0


评论


小企鹅743小企鹅743

我看不懂,但我大受震撼

ddddddddddd

点赞0


评论


锅火孩小吃要爷锅火孩小吃要爷

可以看看我的https://shequ.cod喵/work/166418186

点赞0


评论


猫站YYDS猫站YYDS

厉害

点赞0


评论


看不清

点赞0


评论


无敌版滑稽战神无敌版滑稽战神

我只会单云(((

点赞0


评论


AokenAoken

挖()

点赞0


评论


蛋挞D蛋挞D

有没有短或者简单易懂的,我太傻了,看不懂

点赞0


评论


名称过于强大而无法显示名称过于强大而无法显示

能再简单点吗?我太傻了,看不懂

点赞1


评论


初小白是大笨‏蛋⁧~喵⁧初小白是大笨‏蛋⁧~喵⁧

v.sort(function(a, b){return a - b})

(不是)

点赞0


评论


Mecat⁧~喵呜⁧Mecat⁧~喵呜⁧

嗯,懂了,云变量还是很快的,一般不需要本地存一遍再上传?

点赞1


评论


在下K某人在下K某人

挖坟(

点赞1


评论


一名敬业的XXS一名敬业的XXS

顶,毕竟我是真心喜欢他的《星海之间》

点赞1


评论


实干的雷电猴Cjgt实干的雷电猴Cjgt

我是真心喜欢他的《星海之间

点赞0


评论


星蘑本尊星蘑本尊

这个帖子有实力呀

点赞0


评论