首页 > 解决方案 > 在 C# Windows 窗体中创建高分表

问题描述

我知道关于这个主题有很多类似的问题,但我找不到任何对我有帮助的答案。我创建了一个游戏,您必须在其中说明您的玩家编号(1、2、3 等)。完成游戏后,它将在记分牌中显示您的玩家编号和分数。我正在尝试使计分板工作,以便它将分数从高到低排序,并在每个旁边给出正确的玩家编号。我将这两个都保存为列表。我知道我可以使用 .Sort() 和 .Reverse() 将分数从高到低排序,但我如何确保它们仍然与正确的玩家编号相关联?我想出了下面的代码,它对分数进行了轻微但不完全的排序。例如,如果玩家 1 得分 2,玩家 2 得分 3,玩家 3 得分 5,则从高到低排序为;球员 2 得 3 分,球员 3 得 5 分,

列表初始化如下:

public static List<int> score = new List<int>();
public static List<int> player = new List<int>();

这是代码的一部分,如果您在游戏中失败,它会存储您的玩家编号和得分,然后打开记分牌表格。

else
        {
            MessageBox.Show("Final Score: " + sequence.Count, "Fail!");

            score.Add(sequence.Count);
            player.Add(Convert.ToInt32(PlayerNo.Text));
             for (int i = 0; i < (player.Count - 1); i++)
             {
                 if (score[i + 1] > score[i])
                 {
                     int hi = score[i];
                     int hi1 = player[i];
                     score[i] = score[i + 1];
                     player[i] = player[i + 1];
                     score[i + 1] = hi;
                     player[i + 1] = hi1;
                 }
             }


            number = 0;
            sequence = new List<int>();

                Score s = new Score();
            this.Hide();
            s.ShowDialog();
                this.Close();
            }

记分牌表格看起来像这样(我知道它很冗长,但我不知道有更好的方法来做到这一点——我用 C# 编码的时间不长)。

public Score()
    {
        InitializeComponent();
        switch (Form5.player.Count)
        {
            case 1:
                textBox1.Text = "Player " + Form5.player[0] + " scored " + Form5.score[0];
                break;
            case 2:
                textBox1.Text = "Player " + Form5.player[0] + " scored " + Form5.score[0];
                textBox2.Text = "Player " + Form5.player[1] + " scored " + Form5.score[1];
                break;
            case 3:
                textBox1.Text = "Player " + Form5.player[0] + " scored " + Form5.score[0];
                textBox2.Text = "Player " + Form5.player[1] + " scored " + Form5.score[1];
                textBox3.Text = "Player " + Form5.player[2] + " scored " + Form5.score[2];
                break;
            case 4:
                textBox1.Text = "Player " + Form5.player[0] + " scored " + Form5.score[0];
                textBox2.Text = "Player " + Form5.player[1] + " scored " + Form5.score[1];
                textBox3.Text = "Player " + Form5.player[2] + " scored " + Form5.score[2];
                textBox4.Text = "Player " + Form5.player[3] + " scored " + Form5.score[3];
                break;
            case 5:
                textBox1.Text = "Player " + Form5.player[0] + " scored " + Form5.score[0];
                textBox2.Text = "Player " + Form5.player[1] + " scored " + Form5.score[1];
                textBox3.Text = "Player " + Form5.player[2] + " scored " + Form5.score[2];
                textBox4.Text = "Player " + Form5.player[3] + " scored " + Form5.score[3];
                textBox5.Text = "Player " + Form5.player[4] + " scored " + Form5.score[4];
                break;

记分牌表单本身只有 5 个文本框。关于如何解决/完成此问题的任何想法或新方法的建议?我见过有人提到 XML 文件,但我不知道如何使用这些文件。提前感谢您的任何建议。

标签: c#

解决方案


理想情况下,您会想要创建一个对象,我们称之为 PlayerScore,它将保存玩家编号和分数。

然后,您可以按分数对 PlayerScores 列表进行排序,并且玩家 ID 仍然与排序的分数列表具有关联。

public class PlayerScore
{
    public int PlayerId
    {
        get;
        set;
    }
    public int Score
    {
        get;
        set;
    }
    public PlayerScore(){

    }   

}

推荐阅读