Winforms开发中如何保存用户输入的用户名以生成游戏高分榜?
C# 井字棋游戏高分榜实现方案
1. 前置准备:定义高分记录数据结构
首先创建一个独立的类用来存储单条高分记录,方便后续统一管理数据:
public class HighScoreRecord { // 玩家名 public string PlayerName { get; set; } // 得分(赢一局可以加3分,平局加1分,输局0分,可自行调整规则) public int Score { get; set; } // 记录产生时间 public DateTime RecordTime { get; set; } }
2. 调整现有窗体逻辑,打通玩家名传递与存储链路
你当前的代码已经实现了把两个玩家名传递给游戏主窗体Form1,接下来要补充全局高分数据的存储逻辑:
2.1 修改Form1代码,增加高分存储与结算逻辑
public partial class Form1 : Form { // 存储两个玩家的名称 private static string _spieler1; private static string _spieler2; // 全局静态高分列表,跨窗体可访问 public static List<HighScoreRecord> HighScores { get; set; } = new List<HighScoreRecord>(); // 你原来的setSpielerName方法 public static void setSpielerName(string s1, string s2) { _spieler1 = s1; _spieler2 = s2; } // 游戏结算时调用这个方法,参数为获胜方:1代表玩家1赢,2代表玩家2赢,0代表平局 private void SettleGame(int winner) { if (winner == 1) { HighScores.Add(new HighScoreRecord { PlayerName = _spieler1, Score = 3, RecordTime = DateTime.Now }); } else if (winner == 2) { HighScores.Add(new HighScoreRecord { PlayerName = _spieler2, Score = 3, RecordTime = DateTime.Now }); } else { // 平局双方都加分 HighScores.Add(new HighScoreRecord { PlayerName = _spieler1, Score = 1, RecordTime = DateTime.Now }); HighScores.Add(new HighScoreRecord { PlayerName = _spieler2, Score = 1, RecordTime = DateTime.Now }); } // 按得分倒序排序,只保留前10条高分记录 HighScores = HighScores.OrderByDescending(x => x.Score).Take(10).ToList(); } }
2.2 可选优化:给登录窗体加非空校验
避免玩家没有输入名称就进入游戏,修改button_play_Click逻辑:
private void button_play_Click(object sender, EventArgs e) { if(string.IsNullOrWhiteSpace(Spieler_1.Text) || string.IsNullOrWhiteSpace(Spieler_2.Text)) { MessageBox.Show("请输入两个玩家的名称"); return; } Form1.setSpielerName(Spieler_1.Text, Spieler_2.Text); Form1 frm = new Form1(); frm.Show(); this.Hide(); }
3. 高分榜展示与持久化
- 新增一个高分榜窗体,拖入DataGridView控件,绑定
Form1.HighScores即可展示所有高分记录 - 如果需要程序重启后高分记录不丢失,可以把
HighScores列表序列化为字符串存在本地文件,程序启动时读取反序列化即可,不需要额外数据库
内容的提问来源于stack exchange,提问作者Medicute
相关产品推荐
相关产品推荐

