我正在使用C#创建游戏,并尝试将CSV合并到排行榜中,以便在玩家完成游戏时将先前的分数解析到排行榜中。
这是与分数相关的存储数据
如果这是一个单独的项目,我会将csv存储在bin> Debug文件夹中,并将文件路径传递给StreamReader。虽然,这是一个使用Azure Devops / TFS作为源代码控制的小组项目,所以我不太确定哪种方法最好。
我曾尝试将CSV存储在项目的资源中,但是我没有意识到这会将文件嵌入项目中,只允许从文件中读取。
当前CSV的读取方式为:
var file = Properties.Resources.highscores;
char[] splitter = "\r\n".ToCharArray();
string[] scoresCsv = Properties.Resources.highscores.Split(splitter);
foreach (string score in scoresCsv)
{
if(!String.IsNullOrEmpty(score))
{
var values = score.Split(',');
highScores.Add(new HighScore(values[0], Convert.ToInt32(values[1]), Convert.ToDateTime(values[2])));
}
}
this.highScores = highScores.OrderByDescending(x => x.Score).ToList();
答案 0 :(得分:0)
选择“团队资源管理器”窗口,然后转到“源代码管理资源管理器”
在这里您将看到项目的全局视图。
您可以将文件添加到项目中位于实际源之外的任何文件夹中。如果需要,可以将bin文件夹添加到源代码管理中,并将该文件保留在bin文件夹中。
无论您将文件放在哪里,都只需要从项目中知道文件的位置即可,就可以映射到该文件并在运行时对其进行编辑。
另一个选择是在游戏的C:\ ProgramData文件夹中创建一个文件夹,并且在排行榜运行游戏时,您可以将排行榜直接写入其C驱动器。人们可以修改排行榜,但是显然,该游戏是为了学习编码目的,而且通常不会将排行榜存储在服务器上的客户端上。
答案 1 :(得分:0)
这假设未共享高分数据,而是将其存储在本地。不需要将文件添加到源代码管理中。
public class ScoreFileHandler
{
private static string appPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "YourAppName");
private static string scoreFileName = "highscores.txt";
private static string filePath = Path.Combine(appPath, scoreFileName);
public string ReadFile()
{
if (!Directory.Exists(appPath))
{
Directory.CreateDirectory(appPath);
}
if (File.Exists(filePath))
{
return File.ReadAllText(filePath);
}
return string.Empty; // TODO - caller needs to handle this
}
public void WriteFile(string csvScoreData)
{
if (!Directory.Exists(appPath))
{
Directory.CreateDirectory(appPath);
}
File.WriteAllText(filePath, csvScoreData);
}
}