c# - 在 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 文件,但我不知道如何使用这些文件。提前感谢您的任何建议。
解决方案
理想情况下,您会想要创建一个对象,我们称之为 PlayerScore,它将保存玩家编号和分数。
然后,您可以按分数对 PlayerScores 列表进行排序,并且玩家 ID 仍然与排序的分数列表具有关联。
public class PlayerScore
{
public int PlayerId
{
get;
set;
}
public int Score
{
get;
set;
}
public PlayerScore(){
}
}
推荐阅读
- javascript - Wordpress 主题在链接上阻止 target="_blank"。如何为某些外部链接重新激活它?
- spring-batch - 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist - 如何避免创建 Spring Batch 元数据?
- bash - 使用文本文件中的外部变量自动执行 curl 脚本
- javascript - 如何使用 toLocaleString 格式化 keyup 上的金额?使用 minimumFractionDigits?
- c++ - 构造函数声明后的函数调用
- python - 使用 NLTK 得到错误:*: 'NoneType' 和 'int' 不支持的操作数类型
- apache-spark - pyspark 会话是否存在 spark.implicits?
- java - Spring Boot 应用程序,不推荐使用 swagger-ui ApiInfo() 方法。需要替代品
- php - PHP preg_match() 不匹配所有子模式
- android - 有没有办法让 RecyclerView requiresFadingEdge 不受 paddingTop 和 paddingBottom 的影响