我正在制作一个简单的闲置游戏作为副项目。我目前让游戏将数据保存到文本文件中,以便下次运行应用程序时加载数据并计算离线时获得的分数。我想确保用户无法编辑此文件以获得更高的分数。我的第一个想法是加密文件,但这对我来说似乎有点太高级,所以我决定只在用户尝试编辑文件时重置分数。这就是我所拥有的。
以下是我使用的两个DateTime变量。
DateTime dtPast = DateTime.Now; //The date since last login
DateTime lastModified = System.IO.File.GetLastWriteTime("\\SavedGame.txt");
每次游戏保存时都会更新dtPast,即每100毫秒。 (我已尝试从1毫秒到1秒,没有工作)
然后我测试两个日期是否匹配,如果他们没有,那么它会重置所有变量。
if (lastModified != dtPast)
{
//button
intButton = 1;
decNumber = 0;
intAutoClicks = 0;
//items
//item 1
intItem1 = 0;
intItem1Lvl = 0;
intItem1Prc = 10;
//item 2
intItem2 = 0;
intItem2Lvl = 0;
intItem2Prc = 250;
//item 3
intItem3 = 0;
intItem3Lvl = 0;
intItem3Prc = 5000;
//item 4
intItem4 = 0;
intItem4Lvl = 0;
intItem4Prc = 100000;
//item 5
intItem5 = 0;
intItem5Lvl = 0;
intItem5Prc = 1000000;
//item 6
intItem6 = 0;
intItem6Lvl = 0;
intItem6Prc = 25000000;
//item 7
intItem7 = 0;
intItem7Lvl = 0;
intItem7Prc = 1000000000;
//item 8
intItem8 = 0;
intItem8Lvl = 0;
intItem8Prc = 100000000000;
//upgrades
//upgrade 1
// upgrade 1 is intButton
intUpgrade1Lvl = 1;
intUpgrade1Prc = 100;
//upgrade 2
intUpgrade2 = 0;
intUpgrade2Lvl = 0;
intUpgrade2Prc = 1000;
//upgrade 3
intUpgrade3 = 0;
intUpgrade3Lvl = 0;
intUpgrade3Prc = 100000;
//upgrade 4
intUpgrade4 = 0;
intUpgrade4Lvl = 0;
intUpgrade4Prc = 1500000;
//Upgrade 5
// upgrade 5 is intButton
intUpgrade5Lvl = 0;
intUpgrade5Prc = 10000000;
}
唯一的问题是这似乎不起作用,我不知道为什么。正如我所说,我已经尝试将dtPast降低到几毫秒,但它不起作用。我也试过要求他们在彼此的一秒之内,但这也不起作用。
答案 0 :(得分:0)
Mathias在评论中回答。
if(dtPast.AddMilliseconds(-100) < lastModified)
没用,所以我尝试了
if(dtPast.AddMilliseconds(1000) < lastModified)
并且效果很好。
答案 1 :(得分:0)
您可以使用this库用密码压缩文件,但用户无法更改密码,因此用户无法更改密码。确保你没有输入密码1234;)
using (var zipped = new ZipFile())
{
zipped.Password= "Vx*!~zSecret!!";
zipped.AddFile("Score.txt");
zipped.Save("Archive.zip");
}