2011-01-20 19 views
2

基本的に、私はC#でコンソールベースのゲームに取り組んでいます。私はデータを保存する準備が整いました。可能であれば、すべてのデータを1つのファイルに保存します。 I XMLシリアライゼーションのようなものはありません。プレイヤーはすぐに入り込み、何百万もの金を払うことができます。C#複数のオブジェクトをファイルに保存する

どうすればよいですか?ここで私はシリアル化するために必要なものです:

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

バイナリシリアル化。 –

+0

これは愚かな質問のように思えるかもしれませんが、プレーヤーがXMLファイルを編集するかどうかはどうして気になりますか?時間がゲームそのものの作業に費やされたときには、気になることが少しあるように思えます。 – R0MANARMY

+2

セカンドゲームのファイルを16進数にして、数十億ドルを払うことができたら、Transport Tycoonに戻って覚えていますか?挑戦が取り去られた後、あなたがそれをやった後、どういう楽しみがなかったかを覚えていますか? – dotalchemy

答えて

1

http://www.codeproject.com/KB/cs/objserial.aspx

でしょうあなたのために働く:

GameWorld 
    Inventory 
    Player 
    List<Item> 

    Point 
    List<String> 

ここではクラスである変数がですか?

+0

これは有望そうです...私はそれをチェックアウトします:) – Entity

+0

おっと、答えとして設定するのを忘れました。 – Entity

2

を[それはしかし反射し、コードとデータファイルの周り突くのビットを持つ人を停止することはありません]あなたはかなり簡単に、ファイルにそれを保存する前にそれを暗号化XMLにシリアライズできます。

1

Db4oやEloqueraなどの埋め込みオブジェクトデータベースを使用して、プログラムで格納オブジェクトを管理する方が簡単です。

0

開示を心配していない場合は、[シリアル化されたデータをいくつかのマジック定数で連結した]のハッシュを追加するだけです。ハッカーは、シリアル化されたデータを操作したい場合、定数を見つけるためにプログラムを逆アセンブルする必要があります。

公開が問題になる場合は、「暗号化」にマジック定数を付けることをおすすめします。これは実際にはコンテンツのスクランブリングの一形態です。魔法の定数は「既知」なので(ただし、おそらく見つけにくいかもしれません)。

ちなみに、あなたの問題はDRMの問題に似ていますが、クライアントプラットフォームを完全に制御できない限り、本当に解決できません。 http://www.schneier.com/crypto-gram-0105.html#3

関連する問題