c# - 添加一个保存数据的高分系统

标签 c# save store

我想知道我将如何着手创建一个高分系统。我已经制作了一个带有分数的简单游戏,但我想将高分保存在一个文件中,这样当应用程序运行时,您可以看到带有名称的高分。 到目前为止,我的游戏代码(如果需要):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Guess_the_number_1
{
    public partial class Form1 : Form
    {
        int randomNumber;
        int score;

        Random random;

        public Form1()
        {
            InitializeComponent();
            random = new Random();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            score = 0;
            label1.Text = score.ToString();
        }

        private void buttonCheckGuess_Click(object sender, EventArgs e)
        {
            randomNumber = random.Next(0, 10);

            if (Convert.ToInt32(textboxGuess.Text) == randomNumber)
            {
                MessageBox.Show("Your Guessed Correctly! The Number Is: " + textboxGuess.Text);
                score += 10;
            }
            else if (Convert.ToInt32(textboxGuess.Text) < randomNumber)
            {
                MessageBox.Show("The Number Is Larger Than: " + textboxGuess.Text);
                score -= 2;
            }
            else if (Convert.ToInt32(textboxGuess.Text) > randomNumber)
            {
                MessageBox.Show("The Number Is Smaller Than: " + textboxGuess.Text);
                score -= 2;
            }
            else
            {
                MessageBox.Show("Your Guessed Incorrectly. The Random Number Is Not: " + textboxGuess.Text);
            }
            label1.Text = score.ToString();
        }

        private void buttonScore_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Your score is " + score);
        }

        private void listScore_SelectedIndexChanged(object sender, EventArgs e) { }

        private void label1_Click(object sender, EventArgs e) { }
    }
}

最佳答案

我的做法是将其序列化为 XML。这将允许您保存几个高分,此外,还可以存储其他信息,例如玩家的姓名首字母。为此,首先创建一个这样的类:

[Serializable()]
public class HighScore {
    public int Score { get; set; }
    public string Initials { get; set; }
}

public List<HighScore> _highScores = new List<HighScore>();

您会将所有分数添加到集合类中:

// To save a high score
var score = new HighScore() { Score = 100, Initials = 'MAJ' };
_highScores.Add(score);
// ... add more scores if needed

然后当您的应用程序退出时(或任何时候您想要保存高分),您将高分序列化为 XML:

var serializer = new XmlSerializer(_highScores.GetType(), "HighScores.Scores");
using (var writer = new StreamWriter("highscores.xml", false))
{
    serializer.Serialize(writer.BaseStream, _highScores);
}

最后,当您的应用程序加载时(或任何时候),您使用此代码将 XML 反序列化回高分集合:

// To Load the high scores
var serializer = new XmlSerializer(_entities.GetType(), "HighScores.Scores");
object obj;
using (var reader = new StreamReader("highscores.xml"))
{
    obj = serializer.Deserialize(reader.BaseStream);
}
_highScores = (List<HighScore>)obj;

关于c# - 添加一个保存数据的高分系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456408/

相关文章:

c# - 在服务器上远程执行批处理文件

C# 和 Linq : Grouping list members according to a list of values

带对话框保存文件的 Java 下载管理器

javascript - 如何保存 html Canvas 然后在不丢失形状的情况下重新加载它?

java - 向 treeMap 的函数添加值而不丢失旧数据

javascript - Ext Js 2.1 组合框 Anymatch 过滤器不起作用

C#:非静态字段、方法或属性需要对象引用

c# - 对值在数据库中存储为 int 的枚举列进行排序

javascript - 是什么阻止我的 redux 操作正常工作?

authentication - 提交 "Test notes"或“说明 WP8 应用程序提交 - 我在哪里可以找到它们?