【问题标题】:C# Array Scoring SystemC# 数组评分系统
【发布时间】:2019-03-14 19:37:00
【问题描述】:

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

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

这个问题有没有可能的解决方案。任何帮助,将不胜感激。谢谢。

     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);
        }
     }

编辑:查看“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);
        }
}

【问题讨论】:

  • 你真的应该在这种情况下使用 Player 类。
  • 使用 Player 类和 Score 类。然后每个 Player 类可以有一个 List&lt;Score&gt; 属性,您可以在其中存储每个 Player 分数并使用 LINQ 来*提取*/排序每个玩家的最佳 5 分数或整体最佳 5。

标签: c# arrays sorting reverse


【解决方案1】:

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

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);

如果你想获得一个领域的前十名球员:

var topTenByLevel = players
                   .OrderByDecending(x => x.Level)
                   .Take(10);

【讨论】:

  • 如果相关问题,请修改您当前的问题或提交新问题,因为 cmets 不适合此类对话。
  • 感谢您的评论,我现在已经修改了问题。
  • 当您调用ListBoxLevel1.Items.Add(Player); 时,您正在添加整个对象,而您只想添加名称。 ListBoxLevel1.Items.Add(Player.Name);
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多