精华内容
下载资源
问答
  • Unity 动态排行榜
    千次阅读
    2018-12-10 18:09:03

    2018.12.10
    unity 动态排行榜
    第一次写博客,有写的不好地方的请多多指教

    使用到了 LitJson.dll 插件下载地址
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

    JSON建构于两种结构:

    “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
    值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
    这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
    以上摘自-----https://www.json.org/json-zh.html

    json使用的难点在于必须要按照其指定的格式来读写json文件。
    下面的代码,我采用了生成类数组来写入json文件。
    然后用list链表来读取json文件。
    还利用到了file关键字。

    还有生成的数据用UI的表示方法也研究了很久

    下面是效果图

    随机生成5个数字,用ScrollView排成一列表示出来,从上到下分别对应从大到小

    Database这个脚本挂载在一个GameObject上面

    using System.Collections.Generic;
    using LitJson;
    using UnityEngine;
    using System.IO;
    using UnityEngine.UI;
    
    
    public class Database : MonoBehaviour {
    
        private JsonData Sdata;     //json数据实例化
        private List<Score> scoreData = new List<Score>();		//list初始化
    
        public int[] num = new int[5];		//数组初始化
        public GameObject[] text;			//用gameobject来管理Text UI
        public ScrollRect ScrollView;		//生成一个分数板UI
    
        void Start()
         {
    		SaveScore[] a = new SaveScore[5];		//类数组a初始化
            for (int i = 0; i < 5; i++)
            {
                int b = Random.Range(0, 10);			//随机生成五个0到10之间的数字	
                a[i] = new SaveScore				//生成对象a,并给scores赋值
                {
                    scores = b
                };
            }
            
            string json = JsonMapper.ToJson(a);		//把对象a转换成json型,然后再转成string型
            
            File.WriteAllText(Application.dataPath + "/ScoreAssets/Score.json", json);		//把json类型数据写入文件
    
            Sdata = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ScoreAssets/Score.json"));		//读取并解析json文件,放入JsonData型的变量Sdata中
            ConstructDataBase();
            for (int i = 0; i < scoreData.Count; i++)
            {
                if (i < 5)
                {
                    num[i] = scoreData[i].PlayerScore;
                }
                else
                    break;
            }
            for (int i = 0; i < 5; i++)
            {
                var o = Instantiate(text[i]) as GameObject;		//生成text对象
                o.GetComponent<Text>().text = num[i].ToString();		//给textUI 添加数字
                o.GetComponent<RectTransform>();		//让UI排成一列
                o.transform.SetParent(ScrollView.transform.Find("Viewport").Find("Content"));		//设置textUI的父对象
            }
          }
          
          void ConstructDataBase()
          {
              for (int i = 0; i < Sdata.Count; i++)
              {
                  scoreData.Add(new Score((int)Sdata[i]["scores"]));		//把Sdata中的数据转成int格式,并添加到scoreData链表中
              }
              scoreData.Sort();		//对链表的数据进行排序
          }
    
        public class SaveScore		//SaveScore类的宣言
        {
            public int scores;
        }
    }
    

    Score脚本不用挂载,只用做数据处理

    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class Score : IComparable
    {
    	public GameObject Object;
    	public int PlayerScore
    	 {
    	  get; set;
    	}
    
    	public Score(int _score)
    	{
    		this.PlayerScore = _score;
    	}
    
    	public Score()
    	{
    		this.PlayerScore = -1;
    	}
    
    	public int CompareTo(object obj)		//数据对比排序
    	{
    		int result;
    		try
    		{
    			Score sortObj = obj as Score;
    			if (this.PlayerScore > sortObj.PlayerScore)
    			{
    				result = -1;
    			}
    			else
    				result = 1;
    			return result;
    		}
    		catch (Exception ex) { throw new Exception( ex.Message ); }
    	}
    }
    
    更多相关内容
  • 动态排行榜 html文件的#url: : :8000/robotics_scoreboard/ Fast Rats JSON 数据的#url: #url 用于 Smart Rats JSON 数据: #目前智能鼠表没有数据
  • Python进行数据清洗,制作编程语言20年的动态排行榜
  • unity动态排行榜的实现

    千次阅读 2020-08-11 12:44:43
    在做2048游戏的时候要实现排行榜的功能: 1.超出显示范围可以通过滑动滚动条来上下查看 2.动态插入行 3.每次插入自动更新排名信息 其实和滑页效果类似,只不过需要再加入排序的元素。 1.超出显示范围可以通过滑动...

    在做2048游戏的时候要实现排行榜的功能:
    1.超出显示范围可以通过滑动滚动条来上下查看
    2.动态插入行
    3.每次插入自动更新排名信息

    其实和滑页效果类似,只不过需要再加入排序的元素。

    1.超出显示范围可以通过滑动滚动条来上下查看

    滑页效果(也就是超出显示范围如何显示)见Unity实现滑动更换界面的效果
    排行榜的rank、Viewport、content同滑页中的组件配置。
    在这里插入图片描述
    排行榜是由排名、名字、分数组成的。
    在这里插入图片描述

    滚动条的滑动是每一行每一行形式的,所以给容器Content加水平布局组件和容器大小的自适应。
    参数都是一点点试出来的,没别的办法==
    在这里插入图片描述

    2.动态插入行

    动态插入当然要用预制件了:也就是上图中的line
    关于line,每一行显然是竖直的布局(排名、名字、分数),所以加竖直布局组件,line是image,其下有三个Text(排名、名字、分数):
    参数都是一点点试出来的,没别的办法==
    在这里插入图片描述
    接下来就要用代码插入了,插入的调用在3中(因为游戏中的需求是输入名称点登陆后再在排行榜中插入),并且更新排行榜(更新的代码在3中,其实就是找到当前分数在排行榜中的位置,然后插入,在遍历其后元素让他们的排名都比前一位+1,最后只需要更新排名、名字、分数即可,并不用destroy)

    	/// <summary>
        /// 生成UI元素
        /// </summary>
        public void CreateNewLine(PlayerNode tmp)
        {
            //法1:通过GameObject
            //法2:通过预制件
            GameObject l = Instantiate(line);
            l.transform.SetParent(transform);
            l.transform.GetChild(0).GetComponent<Text>().text = tmp.Rank.ToString();
            l.transform.GetChild(1).GetComponent<Text>().text = tmp.Name;
            l.transform.GetChild(2).GetComponent<Text>().text = tmp.Score.ToString();
        }
    
        public void updateRank(List<PlayerNode> players)
        {
            for(int i = 0; i < transform.childCount; i++)
            {
                //Destroy(transform.GetChild(i).gameObject);
                Transform l = transform.GetChild(i);
                l.GetChild(0).GetComponent<Text>().text = players[i].Rank.ToString();
                l.GetChild(1).GetComponent<Text>().text = players[i].Name;
                l.GetChild(2).GetComponent<Text>().text = players[i].Score.ToString();
            }
            //for(int i = 0; i < players.Count; i++)
            //{
            //    CreateNewLine(players[i]);
            //}
        }
    

    3.每次插入自动更新排名信息

    public class PlayerNode
        {
            public string Name { get; set; }
            public int Score { get; set; }
            public int Rank { get; set; }
    
            public PlayerNode(string name, int score, int rank) : this()
            {
                this.Name = name;
                this.Score = score;
                this.Rank = rank;
            }
    
            public PlayerNode()
            {
            }
        }
    

    然后存在容器中,每次插入新行就更新所有行的排名:

    public List<PlayerNode> players = new List<PlayerNode>(); 
    
    	/// <summary>
        /// 当点击登录时
        /// </summary>
        public void Load()
        {
            if (inputField.text != null)
            {
                PlayerNode tmp = new PlayerNode(inputField.text, int.Parse(GC.NowScore.text), 1);
                rc.CreateNewLine(tmp);
                if (isFirst)//如果是第一次插入
                {
                    players.Add(tmp);
                    isFirst = false;
                }
                else
                {
                    int rankIndex = 0;
                    for (int i = 0; i < players.Count; i++)
                    {
                        if (tmp.Score > players[i].Score)
                        {
                            rankIndex = i;
                            tmp.Rank = i + 1;
                            players.Insert(rankIndex, tmp);
                            rankIndex = i + 1;
                            break;
                        }
                    }
                    if (rankIndex == 0)
                    {
                        tmp.Rank = players.Count + 1;
                        players.Insert(players.Count, tmp);
                    }
                    else
                    {
                        for (int i = rankIndex; i < players.Count; i++)
                        {
                            players[i].Rank = players[i - 1].Rank + 1;
                        }
                    }
                }
                rc.updateRank(players);
            }
            //if (players.Count > 2)
            //{
            //    for(int i = 0; i < players.Count; i++)
            //    {
            //        print(players[i].Rank + "-" + players[i].Name + "-" + players[i].Score);
            //    }
            //}
            gameObject.SetActive(false);
        }
    }
    
    展开全文
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...

    【文末扫码入群,学习资料等你!】


    在编程语言的舞台上,一直有着谁是最好的语言的竞争,小编虽然一直用着几种编程语言,但是感觉个人的想法不能代表着大家的想法。虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。

    今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下在接近20年的时间里,编程语言的热度是如何变化的。

    01

    编程语言资料获取

    首先我们是进行的是资料的获取,我们打开链接https://www.tiobe.com/tiobe-index/,就可以看到TIOBE编程语言的排行榜,通过查看其网页源代码,可以发现,我们想要爬取的资料,都显示在网页源代码里,如下图所示:

    接下来就可以直接利用爬虫来获取网页源代码,并利用正则表达式来匹配我们需要的关键字内容,部分程序如下图所示:

    上述程序中,我们对于抓取到的数据,进行正则表达式匹配,然后提取各个编程语言在不同时间段的热度数值,并保存到本地的文件中。

    02

    清洗数据

    接下来,我们要完成的就是利用动态可视化的柱状图来观察各种编程语言随着时间的热度变化。我们先对数据进行清洗,获取编程语言的名字一起设置一个嵌套的字典,程序如下图所示:

    上述程序中的嵌套字典含义为每一个月份下的每种编程语言的热度值,其结构格式如下所示:

    {“2020-1-12”:{“Java”:16, “C++”:14, “python”:10,…}, “2020-2-13”:{“Java”:16.3, “C++”:15.6, …},…}。

    03

    设置柱状图的颜色

    为了在可视化过程中区分每一种编程语言,需要为柱状图中的每一柱都设置不同的颜色,同时,将嵌套字典按照月份的顺序进行排序,程序如下所示:

    04

    大功告成,动态显示

    最后,我们便可以对数据进行可视化的展示,程序如下图所示:

    上述程序中,首先需要清除figure 中的活动轴,我们对于嵌套字典的每一个月份,将每一个月份中的编程语言,按照其热度值进行从小到大的排序,然后将排序号的编程语言,关联其对应的柱状图颜色。

    05

    动态现实图

    接下来就可以画出我们的柱状图,然后暂停显示结果,并不断循环,从而达到动态柱状图的功能,其效果如下图所示:

    06

    更炫酷的动态图

    如果大家觉得图做的不够优美,大家可以利用js进行数据渲染制作,这里小编也为大家利用Flourish制作了一个更加好看的界面,如下图所示:

    从上面的可视化动图可以看出,Java和C语言一直是牢牢地掌控着编程语言热度前两名的宝座,而python语言,凭借着人工智能的热潮,逐渐的从排名末尾,一路追赶,排名在第三位,并逐渐拉开了与第四名的差距,可谓是编程语言界的逆袭王者。

    而像是C++和PHP,其热度却逐渐的走低。虽然编程语言热度有高有低,但是不可否认的是,每一门编程语言,都有其应用的价值,能够在编程语言的历史长河中历经洗礼,而没有被淘汰,只要好好掌握一门语言,都会有用武之地。

    END

    展开全文
  • 点击关注上方“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货之前发布了一篇Power BI的简明教程,在文中发布了一个《1960-2018年全球GDP前十排行榜》的视频,还没看...

    点击关注上方“SQL数据库开发”,

    设为“置顶或星标”,第一时间送达干货

    之前发布了一篇Power BI的简明教程,在文中发布了一个《1960-2018年全球GDP前十排行榜》的视频,还没看过的小伙伴可以看下效果。

    有不少小伙伴留言想知道怎么制作的,今天就教大家如何制作这样一个炫酷的动态排行榜。

    这里我们介绍两种方法,每种方法都有优缺点,但是效果都差不多。

    数据准备

    要制作这样一份动态排行榜,我们需要知道各个国家2016年到2018年间的GDP才行。

    我从网上找到了一份这样的数据,在公众号后台回复:GDP 可获取。

    我们可以先看下原始数据是什么样的。

    前两列是国家名称和国家代码,后面就是每一年的GDP值了。

    整理数据

    有了这份数据,我们打开Power BI,选择从Excel导入数据,如下图:

    找到这份数据文件,然后在弹出的对话框中选择Sheet1,然后点击【转换数据】按钮

    这样我们会进入到一个数据处理的界面上。我们在主页的菜单上选择【将第一行作为标题】功能,如下图:

    这样第一行就会自动转换成标题行了。

    删除多余行

    国家代码其实我们用不到,如果你不想要它的话,可以选中国家代码这一列,然后选择主页上的【管理】——【删除】即可,当然你也可以右键国家代码列,在弹出的菜单中选择【删除】选项。

    逆透视表

    接下来是比较关键的一步了,我们需要逆透视改表的所有年份,具体操作如下,选择国家列,然后点击菜单栏的【转换】——【逆透视列】——【逆透视其他列】,意思就是逆透视除了国家以外的所有年份的列。当然如果你不嫌麻烦也可以选中所有年份的列,然后点击【逆透视列】

    我们得到如下结果:

    额外调整

    双击属性和值这两列,将它们重命名为年份GDP。然后将GDP这一列除以100000000(一亿),然后就它转换成整数。调整完之后的数据如下图:

    这就是我们想要的数据,点击主页的【关闭并应用】即可完成数据整理。然后我们回到主窗口可以看到整理后的数据列。

    制作动态排行榜

    点击中间的【可视化】菜单下的空间,点击控件【簇状条形图】,然后将字段拖放到相应的位置,具体如下图:

    这样一个大致的轮廓就出了,但是我们发现得到的图是所有年份的汇总数据,而我们想要的是每年动态变化的数据。

    这该怎么办呢?

    添加轮播控件

    这里我们就要使用到一个新的控件:轮播控件(Play Axis),在可视化窗口那里可以添加,如下图:

    在弹出的窗口中我们搜索Play Axis即可找到,然后点击添加即可,如下图:

    Power BI有非常丰富的控件资源,很多非常炫酷的功能其实都是借助控件来实现的,即使你不会DAX这门脚本语言也可以做出非常精美的可视化效果。

    添加完轮播控件后我们加载到画布上,然后将年份拖放到相应位置,如下图:

    年份和排行榜都做好了了,接着要解决它们的联动问题,我们发现点击播放会是下面这个样子:

    浅色部分是所有GDP的总和,深色部分才是当你的GDP,这与我们想象的不一样啊。那要怎么解决这个问题呢?

    编辑交互性

    选中轮播控件(Play Axis),点击菜单栏【格式】——【编辑交互】,会发现可视化窗口的右上角出现了三个小图标,点击最左边的【筛选器】筛选器即可,如下图:

    这样你再重新点击轮播控件的开始按钮,左表的条形图就会动态变化了。

    添加年份

    小伙伴们有没有注意到排行榜的右下角会动态显示年份?这里我们添加一个【卡片图】控件到画布上,如下图:

    这样在轮播控件变化时,卡片图上的年份也会跟着变化。

    格式美化

    为了将这个图做的好看一点,我们可以对条形图进行格式美化,在可视化控件下面有个调整控件格式的按钮,里面可以调整控件的各种属性,如下图:

    这里小伙伴们可以自由发挥,下面是我美化后的效果图:

    这种方法的优点是可以自定义各种数据项,包括柱形图的颜色,标签位置,字体颜色等,可配置性非常强。

    缺点也比较明显,制作比较麻烦,效果不那么流畅。

    上面的方法可能会觉得比较复杂,接下来我们再介绍一个视频中的方法,这个是真·超级简单!

    获取控件

    我们同样需要将原始数据整理成上面的格式:国家,年份,GDP。不同的是我们只需要使用一个控件就可以实现上面的功能,那就是控件:动画条形图(Animated Bar Chart Race)

    还是在控件市场里面搜索英文名称添加到画布上,如下图:

    然后将相关数据列放到对应的位置,如下图:

    拖放好后,效果就是上一个图左侧的效果了

    调整控件参数

    我们调整一下这个控件的几个参数即可开始运行了。具体如下:

    这个插件的参数设置太简单

    topN:条形图中的条目数量
    duration:动画延迟时间,值越大动画播放越慢
    autoPlay:设置是否自动播放
    fontFamily:设置条目的字体
    fontSize:设置条目的字号
    hideGrid:设置是否因此图例
    hideNumber:设置是否因此数据值
    hidePeriod:设置是否显示日期
    periodSize:设置日期的字号

    然后再回到画布,你就会看到开始视频里的效果了

    这个方法的优缺点和第一种方法正好相反

    优点是制作简单,效果炫酷

    缺点是数据条目太短而无法显示,名称无法显示在条目外侧,字体颜色无法修改,界面只能展示最多20条信息。

    两种方法都各有千秋,小伙伴们都可以动手尝试一下。

    图文教程就介绍到这里了,之后我会在我的视频号发布一期视频版的教程,感兴趣的小伙伴们可以关注一下我的视频号。

    ——End——
    后台回复关键字:1024,获取一份精心整理的技术干货
    后台回复关键字:进群,带你进入高手如云的交流群。
    推荐阅读
    中国程序员VS美国程序员,太形象了...
    
    数据分析利器,Power BI简明教程
    
    为Navicat正名,Navicat完全使用手册(下)
    
    除了会排序,你对ORDER BY的用法可能一无所知!
    
    50 款数据可视化分析工具大集合,总有一款适合你
    
    
    这是一个能学到技术的公众号,欢迎关注
    

    点击「阅读原文」了解SQL训练营

    展开全文
  • 数据可视化练习-用powerBI生成自动播放的动态排行榜前言1. 前期准备:账号注册及软件下载2、数据获取及预处理3、可视化效果搭建4、发布共享其他 前言 最近在B站很流行各种动态排行榜视频,动态排行榜制作源代码...
  • Vue ,Js,前端实现排行榜前三动态切换图标 这可能是个小功能,但是就是想记录一下,希望能帮到你 效果图 这个功能或许还是比较常见,但是网上好像暂时没有过多的案例,所以做个记录 <template> //主体 <...
  • Echarts动态排名柱状图(自适应电脑和手机端)源代码,参见:https://blog.csdn.net/weixin_41290949/article/details/120672844
  • 主要介绍了利用Python制作动态排名图的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 排行榜.html

    2021-06-11 09:14:29
    单排行榜$axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; };$axure.utils.getOtherPath = function() { return 'resources/Other.html'; };$axure.utils....
  • JS10asp排行榜投票系统

    2019-08-03 00:44:11
    自定义排行榜创建 文章发布 地图生成 用户名密码:admin
  • 排行榜.html

    2021-06-14 02:59:21
    排行榜$axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; };$axure.utils.getOtherPath = function() { return 'resources/Other.html'; };$axure.utils....
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自 2001 年 5 月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看...
  • 游戏实时排行榜C++实现

    千次阅读 2021-02-01 14:00:13
    而对于排行榜,需做到以下要求求: 排行榜需要做到实时,如玩家战力提升,立马看到新的排名 只关心前N名玩家的排名,通常 N <= 1000 排名分前后顺序,不可并列,如同一战力,先达到的排名靠前 实现 目录结构: ├...
  • 用Echarts制作动态条形图排行榜

    万次阅读 2018-08-12 01:49:17
    最近在做各种排行榜的视频,整体排行榜的页面图形效果都是用另外一个开源代码实现的,主体是js+svg。 https://www.bilibili.com/video/av28871057/ echarts作为封装很好的一套可视化库,不知道是否能做到相同的...
  • unity2019 数据排行榜

    2021-03-26 16:29:01
    就是一个按照数据排行的列表,动态排序,和一些视频中各国数据历年数据排名那种效果。 使用Unity2019打开, 分辨率请使用1920*1080. 连接:https://download.csdn.net/download/lucidy/16135826
  • JAVA 排行榜实现

    千次阅读 2021-02-05 09:41:21
    一.List实现 public List<HabitRankingListResult> fun(List<HabitRankingListResult> habitRankingListResults){ habitRankingListResults.sort( new Comparator<HabitRankingListResult>...
  • Unity排行榜优化滚动

    2020-06-19 15:28:59
    Unity排行榜优化滚动 自己做的一个优化排行榜的功能 当有大量的数据需要在scroolRect中可以通过 只夹在几个item循环利用便可以展示所需的内容 ; 下面是效果实现图 下面是我的一个中心思想 通过对处在视野第一个...
  • 排行榜显示部分 首先在unity里如图建一个排行榜panel ![在这里插入图片描述](https://img-blog.csdnimg.cn/54a2fece34d34bedb1ae411a9270fa64.png 大致效果 ,编辑器层级如下 rankItem是排行榜数据的预制体, 单...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • cocos creator排行榜 ScrollView的ListViewd的Demo,用于微信小游戏排行榜列表UI界面的制作。
  • 一个简单的静态网页作业,适合学生期末HTML5+css作业参考。
  • 用jQuery实现排行榜(so easy!!!)

    千次阅读 2020-04-20 09:23:50
    排行榜的实现原来如此简单!!!
  • 抓取js动态数据的练手之作,项目抓取了豆瓣2019电影排行榜的相关电影信息,并将其改为json格式存储在了txt文档中。
  • redis+springboot实现TOP10排行榜

    千次阅读 2020-01-22 16:48:09
    一、控制层 package com.citydo.xclouddesk.webapi.knowledgebase; import com.citydo.xclouddesk.knowledgebase.service.HotMessageService; import ... import lombok.exte...
  • 有人的地方就有对比,游戏中自然也少不了排行榜。当前项目设计目标是,每个服务器玩家数量为百万左右。每个玩家都有战力、经验等属性,战力最大值在50万以内。现在期望能有战力排行榜,有以下几点需求:全部角色参与...
  • 针对目前普通搜索引擎无法对动态网页的查询结果进行有效索引与排序的问题,提出了一种对动态网页的排名算法ContentRank,并介绍其在商务网站中的应用。该算法通过对与动态页面相关的内容进行挖掘分析,计算页面排名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,563
精华内容 9,025
关键字:

动态排行榜