C#阵列计分系统

C#阵列计分系统,c#,arrays,sorting,reverse,C#,Arrays,Sorting,Reverse,我在整理比赛的得分系统时遇到了问题。当我整理“HighScoresPointsLevel 1”数组时,问题就出现了,因为尽管数组以正确的顺序显示,但它与“HighScoresNameLevel 1”没有链接。换句话说,游戏的高分将被分配给一个随机的玩家名字 可能的解决方案?我在想,如果我能够在array.sort/array.reverse内部传递两个参数(HighScoresPointsLevel 1,HighScoresNameLevel 1),那么问题是array.reverse不接受两个

我在整理比赛的得分系统时遇到了问题。当我整理“HighScoresPointsLevel 1”数组时,问题就出现了,因为尽管数组以正确的顺序显示,但它与“HighScoresNameLevel 1”没有链接。换句话说,游戏的高分将被分配给一个随机的玩家名字

可能的解决方案?我在想,如果我能够在array.sort/array.reverse内部传递两个参数(HighScoresPointsLevel 1,HighScoresNameLevel 1),那么问题是array.reverse不接受两个参数。我认为这会起作用的原因是,通过调用array.sort,我第一次能够在数组“HighScoresLevel 1”、“HighScoresNameLevel 1”之间建立关系

这个问题有什么可能的解决办法吗。任何帮助都将不胜感激。谢谢

     string PlayersName = "Player's Name";
     float[] HighScoresLevel1 = new float[5];
     float[] HighScoresPointsLevel1 = new float[5];
     string[] HighScoresNameLevel1 = new string[5];

     public static void addLastScoreLevel1(
       float newScore,
       float newPoints, 
       float[] HighScoresLevel1,
       float[] HighScoresPointsLevel1, 
       string[] HighScoresNameLevel1, 
       string PlayersName)
     {
        if (newScore < HighScoresLevel1[4])
        {
            HighScoresLevel1[4] = newScore;
            HighScoresPointsLevel1[4] = newPoints;
            HighScoresNameLevel1[4] = PlayersName;
            Array.Sort(HighScoresLevel1, HighScoresNameLevel1);
            Array.Sort(HighScoresPointsLevel1);
            Array.Reverse(HighScoresPointsLevel1);
        }
     }
string PlayersName=“玩家姓名”;
float[]HighScoresLevel1=新的float[5];
float[]HighScoresPointsLevel 1=新的float[5];
字符串[]HighScoresNameLevel 1=新字符串[5];
公共静态无效addLastScoreLevel1(
浮动新闻核心,
浮动新点,
浮动[]高分等级1,
浮动[]高分点级别1,
字符串[]高分SNAMELEVEL 1,
弦乐演奏者姓名)
{
if(新闻核心
编辑:在查看了“Kieran Devlin”的反馈后,我已经实施了更改,目前为止效果良好,但是我在打印列表时遇到了问题。 因此,在我的另一个表单中,当试图在列表框中显示玩家列表的内容时,列表框仅显示Game.Player

public partial class MainMenu : Form
{

    public static List<Player> GetPlayers(float newScore, float newPoints, 
    string PlayersName)
    {
        var players = new List<Player>();
        var newPlayer = new Player
        {
            Name = PlayersName,
            Points = newPoints,
            Timer = newScore
        };
        players.Add(newPlayer);

        var TopTenLevel1 = players.OrderByDescending(x => x.Timer).Take(10);
        return players;
    }
 }

public partial class HighScoresMenu : Form
{
        foreach (var Player in MainMenu.GetPlayers(newScore, newPoints, 
        PlayersName))
        {
            ListBoxLevel1.Items.Add(Player);
        }
}
public部分类主菜单:表单
{
公共静态列表GetPlayer(浮动新闻核心、浮动新点、,
弦乐演奏者姓名)
{
var players=新列表();
var newPlayer=新玩家
{
Name=playerName,
点数=新点数,
定时器=新闻核心
};
players.Add(newPlayer);
var TopTenLevel1=players.OrderByDescending(x=>x.Timer).Take(10);
返回球员;
}
}
公共部分课程高分菜单:表格
{
foreach(主菜单中的var播放器。GetPlayers(newScore、newPoints、,
玩家姓名)
{
ListBoxLevel1.Items.Add(播放器);
}
}

使用对象对数据进行分组,以提供更多上下文

public class Player {
    public string Name { get; set; }
    public int Points { get; set; }
    public int Level { get; set; }
}
然后您可以这样使用它:

var players = new List<Player>();
var newPlayer = new Player {
    Name = "Some name",
    Points = 10,
    Level = 3
};
highscore.Add(newPlayer);

在这种情况下,你真的应该使用一个Player类。使用一个Player类和一个Score类。每个玩家类都可以有一个
列表
属性,您可以存储每个玩家的分数,并使用LINQ*提取*/排序每个玩家的最佳5分或最佳5分。如果当前问题相关,请修改您的问题,或者提交一个新问题,因为评论不适合这种类型的对话。感谢您的评论,我现在已修改了问题。当您打电话时
ListBoxLevel1.Items.Add(播放器)当您只想添加名称时,您正在添加整个对象<代码>ListBoxLevel1.Items.Add(Player.Name)
var topTenByLevel = players
                   .OrderByDecending(x => x.Level)
                   .Take(10);