3

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

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) { }
    }
}
4

3 回答 3

3

我这样做的方法是将其序列化为 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;
于 2013-10-18T18:28:27.337 回答
1

要加载最佳分数,请使用以下功能

using(System.IO.StreamReader sr=new System.IO.StreamReader("fileYouHaveSavedTheScore.txt")
     this.label1.Text=sr.ReadLine();

为了保存分数,您可以执行以下操作:

System.IO.StreamReader sr = new System.IO.StreamReader("fileYouHaveSavedTheScore.txt");
if(Convert.ToInt32(sr.ReadLine())<Convert.ToInt32(this.label1.Text)
{
    sr.Close();
    using(System.IO.StreamWriter sw=new StreamWriter("fileYouHaveSavedTheScore.txt",false))
        sw.WriteLine(this.label1.Text);
}

编辑

不要全部使用Convert.ToInt32(string),最好使用方法int.TryParse(string, int out)在这里你可以找到这个方法的参考

于 2013-10-18T18:17:43.443 回答
0

我使用了两种简单的方法来保存游戏中使用的高分。这两种方法都使用 TextWriter 和 TextReader。这很简单,可能会帮助您或至少帮助指导您。希望这会有所帮助,链接如下。顺便说一句,我正在创建一个 Galaga 和 Space Invaders 的混搭,这对我来说很方便。

https://www.youtube.com/channel/UCsq3H13woTvEuUNQD0ch1Yw

于 2018-11-17T19:29:09.860 回答