基本上,我正在使用C#进行基于控制台的游戏。我已经准备好保存数据了。如果可能的话,我希望将所有数据保存到一个文件中。我不就像XML序列化一样,玩家可以进入并给自己一百万金币。
我应该使用什么?这是我需要序列化的东西:
GameWorld
Inventory
Player
List<Item>
Point
List<String>
以下是类中的变量:
public class GameWorld
{
Dictionary<Point, Room>
}
public class Item
{
String Creator
String Verb
String RequiredItem
Action OnActivate
int Difficulty
Action OnDefeatEnemy
Action OnDefeatedByEnemy
}
public class Room
{
String Title
String Description
List<Item> Items
List<String> ItemNames
String Creator
}
public class Inventory
{
List<Items>
}
public enum ActionType
{
ACQUIRE_GOLD, DECREASE_HEALTH, INCREASE_HEALTH, DECREASE_STRENGTH, INCREASE_STRENGTH, GET_ITEM, PRINT_MESSAGE
}
public class Action
{
ActionType actionType
int Amount
String GiveItem
String Message
String Creator
bool SingleActivation
bool HasActivated
}
答案 0 :(得分:3)
使用Binary serialization会略微混淆。
[虽然不会阻止有人使用Reflector,但你的代码和数据文件会有点蠢]
答案 1 :(得分:2)
您可以很容易地序列化为xml,然后在将其保存到文件之前对其进行加密。
答案 2 :(得分:1)
答案 3 :(得分:1)
使用嵌入式对象数据库(如Db4o或Eloquera)以编程方式管理存储对象更容易。
答案 4 :(得分:0)
如果您不担心披露,您可以添加[您的序列化数据与某些魔术常量连接]的哈希值。如果他们想要操纵您的序列化数据,黑客就必须反汇编您的程序以找到常量。
如果披露是一个问题,那么我会建议使用魔术常量“加密”。这实际上只是一种内容扰乱的形式,因为魔法常数是“已知的”(尽管可能是一种令人讨厌的东西)。
顺便说一句,您的问题类似于DRM问题,除非您完全控制客户端平台,否则这个问题确实无法解决。 http://www.schneier.com/crypto-gram-0105.html#3