以下是使用C#实现游戏排行榜的示例代码:

using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;

namespace GameRanking
{
    class Program
    {
        static void Main(string[] args)
        {
            // 连接 Redis
            var redis = ConnectionMultiplexer.Connect("localhost");

            // 获取排行榜
            var ranking = new GameRanking(redis);

            // 添加玩家分数
            ranking.AddScore("player1", 100);
            ranking.AddScore("player2", 200);
            ranking.AddScore("player3", 150);

            // 获取玩家排名和分数
            var rank1 = ranking.GetRank("player1");
            var score1 = ranking.GetScore("player1");

            Console.WriteLine("player1 rank: {0}, score: {1}", rank1, score1);

            // 获取前三名玩家
            var top3 = ranking.GetTop(3);

            Console.WriteLine("Top 3 players:");

            foreach (var player in top3)
            {
                Console.WriteLine("{0} - {1}", player.Name, player.Score);
            }

            Console.ReadLine();
        }
    }

    class GameRanking
    {
        private IDatabase _db;

        public GameRanking(ConnectionMultiplexer redis)
        {
            _db = redis.GetDatabase();
        }

        public void AddScore(string playerName, int score)
        {
            _db.SortedSetAdd("ranking", playerName, score);
        }

        public int? GetRank(string playerName)
        {
            var rank = _db.SortedSetRank("ranking", playerName);

            return rank.HasValue ? rank.Value + 1 : (int?)null;
        }

        public double GetScore(string playerName)
        {
            return _db.SortedSetScore("ranking", playerName) ?? 0;
        }

        public List<PlayerScore> GetTop(int count)
        {
            var players = _db.SortedSetRangeByRankWithScores("ranking", 0, count - 1, Order.Descending)
                .Select(p => new PlayerScore { Name = p.Element, Score = p.Score })
                .ToList();

            return players;
        }
    }

    class PlayerScore
    {
        public string Name { get; set; }
        public double Score { get; set; }
    }
}

上述代码定义了一个名为 GameRanking 的类,用于管理游戏排行榜。该类使用 StackExchange.Redis 库连接 Redis,并提供了以下方法:

  • AddScore(string playerName, int score):添加玩家分数到排行榜。
  • GetRank(string playerName):获取指定玩家的排名。
  • GetScore(string playerName):获取指定玩家的分数。
  • GetTop(int count):获取排名前 count 名的玩家。

Main 方法中,我们创建了一个 GameRanking 实例,并添加了三个玩家的分数。然后我们获取了玩家1的排名和分数,以及排名前三名的玩家。最后,我们输出了玩家1的排名和分数,以及排名前三名的玩家的名称和分数。

需要注意的是,在 GetRank 方法中,我们需要将 Redis 返回的排名加1,才能得到正确的排名。因为 Redis 返回的排名是从0开始。

使用redis实现游戏排行榜代码使用C#实现

原文地址: https://www.cveoy.top/t/topic/b59P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录