You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:00:01