IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vhodný formát ukládání textové hry

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jakub Hrdoun
Člen
Avatar
Jakub Hrdoun:10.9.2017 18:48

Zdravím,

pracuji na desktopové aplikaci, v které je možné editovat a hrát složitou textovou hru. Co myslím slovem "složitou" může nastínit následující objekt, v kterém jsou shromážděny všechna data o jedné takové hře:

    public class TextovaHra
    {

        public const string verze = "alfa";

        public Object1 object1 = new Object1();
        public string nazev ;
        public string autor ;
        public string serie ;
        public DateTime startPsani = new DateTime();
        public DateTime konecPsani = new DateTime();
        public TimeSpan dobaPsani = new TimeSpan();

        public uint startScena = 1;
        public uint posledniEditovanaScena = 1;
        public List<string> tagy = new List<string>();
        public List<string> zanry = new List<string>();

        public List<Object2> Object = new List<Object2>();
        public List<Object3> Object = new List<Object3>();
        public List<Object4> Object = new List<Object4>();
    // ...
        public List<Object15> Object = new List<Object15>();
// 15 různých typů objektu, každý má nějaké vlastnosti (cca 5-10),
//celkem tedy kolem 100 různých typů hodnot, které je třeba někam uložit
}

Mám problém s tím, kam ukládat data. Prozatím to serializuji do datového souboru, což je rozhodně nejjednodušší cesta pro programátora, má to ovšem svoje veliké úskalí ve verzování programu. Rád bych se tomu vyhnul. Uvažoval jsem o XML, nicméně tomu bych se rád vyhnul, vzhledem ke složitosti.

Vedle ukládání dat na desktop v budoucnu uvažuji o něčem podobném - editoru a prohlížeči těchto textových her - na internetu. V případě webové aplikace se mi datové soubory zdají ještě krapet nevhodnější. Nevím však, zdali je složitě strukturovaný objekt ideální ukládat do databáze - s těmi zatím moc zkušeností nemám - navíc nevím bude-li je možné nacpat uživatelovi do desktopu.

Moje otázka tedy zní; nevíte o lepším řešením, než je XML, které bude ukládat složitě strukturovaný objekt co nejjednodušeji jak na desktopu, tak na webu, a zároveň se vyhnu verzovacím problémům spojeným se serializací do DAT souboru?

Díky moc za odpovědi.
(Píšu v C#).

Editováno 10.9.2017 18:50
 
Odpovědět
10.9.2017 18:48
Avatar
Peter Sciranka
Tvůrce
Avatar
Peter Sciranka:10.9.2017 22:30

Skúsil si sa pozrieť na json formát? Tuto je farmework ktorý by mohol byť vhodný: json.net . Osobne s tým nemám skúsenosť, ale mohlo by ti to pomôcť. Skús sa na to pozrieť.

Nahoru Odpovědět
10.9.2017 22:30
Act as if it was Impossible to Fail
Avatar
Odpovídá na Jakub Hrdoun
Erik Šťastný:11.9.2017 8:17

Jak říká LittleBigOwl, JSON ti umožní skladovat totožné informace jako XML, jen trochu jiný formát. Nicméně ze strany uživatelů jsem se vždy setkal s kladnějším přijetím XML formátů než JSON. Na víc mysli na to, že problém XML i JSON je ten, že ti uživatel může přímo modifikovat uloženou hru, což asi nechceš. Takže ty soubory nečitelné pro uživatele mají nějaký důvod.

Není úplně od věci interně používat XML nebo JSON ale přímo ho neukládat, ale projet to přes nějaké kódování a uložit až výsledek :) Při čtění samozřejmě naopak.

 
Nahoru Odpovědět
11.9.2017 8:17
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jakub Hrdoun
David Oczka:11.9.2017 8:37

Jak už psal/a Elisse, XML je vhodný formát, navíc C# má velmi snadnou konverzi celých tříd do XML (třída XMLSerializer).
A co se týče toho kódování, aby to běžný uživatel nemohl upravovat, tak pro začátečníka je nejjednodušší "bitový posun", tedy ne doslova bitový posun, ale vezmeš každý znak a přičteš k němu nějaké číslo (posuneš jej v ASCII tabulce), tím pádem bude text nečitelný. Potom při zpětném načítání samozřejmě zase každému znaku to dané číslo odečteš. Ale pozor, je třeba hlídat přetečení, případně použít Unicode kódování...

Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět
11.9.2017 8:37
Avatar
Jakub Hrdoun
Člen
Avatar
Odpovídá na David Oczka
Jakub Hrdoun:11.9.2017 20:42

O třídě XmlSerializer jsem neslyšel, to zní lépe než XML to LINQ, které jsem používal předtím. Nejspíš se vydám tímhle směrem.
Díky za rady.

 
Nahoru Odpovědět
11.9.2017 20:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.