猫史档案馆


【教程】如何用一个云变量做能显示多个玩家数据的排行榜

用户:SGSMix梨SGSMix梨查看:5 回复:10 评论:5 创建时间:2022-03-05T09:46:28


(适合有点云扩容基础的创作者)

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

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

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

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

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个用了)

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

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

center_image

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

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

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

center_image

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

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

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

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

center_image

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

center_image

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

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

重构的方式就是先用普通变量保存,在把云变量设为原来的第.一项,然后用“把...和...放在一起”积木参考保存的云变量逐项累加云变量,遇到需要更改的项在进行处理

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

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

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

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

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

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

center_image

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

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

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

center_image

然后是非特殊情况

center_image

(截图不清晰是因为只能上传5MB的图,被迫 木莫 米胡)

这个循环中又会遇到两种特殊情况,由于重构排行榜的循环是从第二项开始的,所以没法判断比第.一项小的情况在重构循环前单开一个判断,然后是循环到排行榜最后一项,没有下一项的情况就只需要比较上一项,单开一个判断(理论上来说都最后一项了直接插入就行但太懒了就没改)

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

 

看你一脸信息量略大的表情就知道你学废了,再看一遍吧(


回复

上一页1 页 / 共 1下一页
旁观者JErS旁观者JErS

但1024字节的云变量有亿点点不够用呢

点赞0


评论


源码工厂蓝仔源码工厂蓝仔

能不能让源码编辑器的数据和海龟编辑器的一样?

点赞0


评论


调皮的乔治调皮的乔治

恭喜精选!!!

点赞0


评论


我不是猴哥我不是猴哥

想学看不懂imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E5%86%B7%E6%BC%A0.gif"alt="emotion_编程猫_冷漠"

点赞0


评论


瘦子阿尔法营喵瘦子阿尔法营喵

竟然有我

 

点赞0


评论


宁愿战死沙场宁愿战死沙场

想学但看不懂啊

点赞0


评论


离开的十五分之六老咸鱼离开的十五分之六老咸鱼

不错的

点赞0


评论


MC_TTMC_TT

唯一的问题是对消耗品(如金币)会比较麻烦,需要备几个备胎(就是显示前十名,后面还有五个人不显示,当前十名金币减少时,后面的人补位)

点赞0


评论


MC_TTMC_TT

我才发现竟然是天使梨

点赞0


评论


逍遥WYC逍遥WYC

imgsrc="https://static.cod喵/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论