2010-09-17 12 views
5

Zajmuję się przygodą tekstową w stylu "Zork" w języku C# i będzie ona miała dość dużą liczbę różnych obszarów z opisami i modyfikatorami środowiska. Nie chcę mieć bazy danych, najlepiej, o ile nie jest to najlepszy sposób na zrobienie tego.Jaki jest najlepszy sposób przechowywania danych obszaru dla przygody tekstowej?

Potrzebuję porady na temat najlepszego sposobu przechowywania/ładowania tych danych.

To będzie obejmować:

  • Obszar Opis
  • modyfikatory Środowiska (otwarte okna/uszkodzony, drzwi zamknięte)
  • przedmioty obecne domyślnie
+0

Niektóre „Bazy danych” są lżejsze od innych, jest jakiś powód, coś jak sqlite by ci nie odpowiadał? – Textmode

Odpowiedz

7

Serialize wszystkie dane do pliku. Zapewni najmniejszy ślad, gdy użytkownik zainstaluje grę, bez żadnych poważnych wad. Baza danych jest świetna, gdy masz dużo danych, ale mówisz o przygodach tekstowych, w których załadujesz całą zawartość gry do pamięci. Prosty plik będzie działał na to bardzo ładnie.

Uwaga, nie mówię o xml, ale serializacji binarnej. Każdy rodzaj serializacji tekstu pozwoli użytkownikom przeglądać twoje dane, a także oszukiwać lub hackować grę. I równie łatwo można zamienić/wylogować zserializowany plik danych, czy to tekstowy czy binarny. Pamiętaj, że cały twój "tekst" może mieć najwyżej kilkaset kilobajtów.

+0

To naprawdę dobry plan, serializacja binarna. Nie wiem, dlaczego o tym nie myślałem. – Liggi

+0

Nie mogę pomóc, ale czuję się trochę zasmucony, zasugerowałam to przed ... no cóż. – Rushyo

+0

Przepraszam Rushyo, jeśli zasugerowałeś to jako pierwszy. Naprawdę nie rozumiem, co mówisz w swojej odpowiedzi. – Liggi

1

Wiem, że nie chcesz DB, ale czy spojrzałeś na SQL Server Compact Edition? Może po prostu robić to, co chcesz.

+0

Czy istnieje sposób, aby uniemożliwić komukolwiek przeglądanie bazy danych? Prawdopodobnie głupie pytanie. – Liggi

+0

To zupełnie inne pytanie ... Powiedziałbym ostatecznie, że nie. Jeśli znajduje się na komputerze klienta, bez względu na to, co zrobisz, aby zakodować/zaszyfrować/chronić, twoja aplikacja będzie musiała uzyskać dostęp do danych, tak samo jak ustalony użytkownik. Prawdopodobnie byłoby to trudniejsze do otwarcia niż serializacja XML. – spender

+0

W porządku, bez obaw. Zamierzam wypróbować twoją opcję. – Liggi

0

Twierdzę, że C# oferuje dokładnie odpowiednie narzędzia do tego. Po prostu obuduj swoje struktury na klasy. Nasz pierwszy projekt OOP na uniwersytecie był właśnie tym problemem! Jest to doskonałe studium przypadku dla OOP.

Możesz następnie użyć wielu metod serializacji C#, aby zachować go w sposób uporczywy (załadować/zapisać), ale uważasz, że pasuje.

+0

[Usunięto - ponieważ była to odpowiedź na inny komentarz, który został usunięty] – Rushyo

+1

, ale pytanie brzmiało także: "Gdzie go przechowywać", enkapsulacja struktury w _classes_ nie mówi nic o tym, gdzie dane, które zapełnią _objects_, zostaną zapisane przed instancjami _objects_. –

+1

Cóż, przypuszczam, że jest to całkowicie subiektywne - naprawdę nie jest to ważne pytanie. Płaski plik tekstowy? To naprawdę nie ma znaczenia. To nie będzie wąskie gardło, nie ma właściwej odpowiedzi. Po prostu przechowuj go w dowolny sposób, jaki uznasz za stosowny. Osobiście staram się wymyślać nowy format dla każdej gry rozwijanej z odpowiednią semantyką dla problemu. Raz utworzone, serializacja i deserializacja obejmuje pobieranie go w przyszłości. – Rushyo

0

Jak brzmiałoby "skryptowanie" swojej przygody jako jednego dużego pliku tekstowego? Czy twoja aplikacja powinna przeanalizować ten plik, zbudować przygodę na lekcjach i zacząć od niej?

Oznaczałoby to, że możesz edytować przygodę za pomocą prostego edytora tekstu. Mogę sobie wyobrazić, że kiedy można podejmować wiele decyzji z jednego źródła, może to być trudne do zobrazowania linków. Byłoby to jednak trudne w DB bez specjalistycznego front-endu.

UPDATE:

Albo masz rozważyć XML np ...

<area id="DarkRoom1"> 
    <description>Dark Room</description> 
    <item>Bucket</item> 
    <item>Spade</item> 
</area> 

Następnie użyj tego, aby wypełnić swoje zajęcia w pamięci.

0

Można przechowywać dane w systemie plików (plik zip lub folder).

Każdy wybór można zapisać jako folder, a wszystkie opisy, modyfikatory i inne dane można zapisać jako plik tekstowy (xml?). Kiedy użytkownik podejmie decyzję, przejdziesz do odpowiedniego folderu i podążysz za działką.

Przykład:

Chcesz:

  • otworzyć drzwi (drzwi)
  • urlopu (urlop)

Jeżeli użytkownik wybiera, aby otworzyć drzwi wy Go drzwiczki folderu i odczytuje dane z pliku danych w tym folderze.

Plusy:

  • prosty
  • nie wymagają bazie
  • łatwo dodać nowe przygody

Wady:

  • problemów z decyzją wycofania (wracając do początek lub do pewnego punktu na wykresie)
0

Osobiście, w tym przypadku unikam bazy danych i używam formatu pliku tekstowego (prawdopodobnie dwa oddzielne pliki, jeden dla stanu początkowego (np. Teren itp.), Który nigdy się nie zmienia, i jeden dla stanu, który ma zostać zmodyfikowany w trakcie gry (rozbite okna itp.); lub podzielić całą rzecz na jedną parę danych statycznych/dynamicznych na obszar.

Kilka powodów:

  • Plik tekstowy jest czytelny dla człowieka; w związku z tym można tworzyć treści bez dedykowanego edytora, natomiast w przypadku podejścia bazodanowego trzeba wprowadzić dane za pomocą zapytań lub zakodować edytor poziomów.
  • Zakładając scenariusz dla pojedynczego gracza, współbieżność nie jest problemem
  • Zapisane stany gry są kwestią kopiowanie plików zmodyfikowanym państwowych w folderze savegame lub pakowania ich w jednym pliku
  • można łatwo osadzić skrypty
  • struktur danych masz do czynienia z prawdopodobnie dość proste dla integralności danych nie być poważnym problemem
13

Rozwiązałbym twój problem przez porzucenie C# i napisanie twojego programu w Inform7. Inform7 to najbardziej niesamowity język programowania jaki kiedykolwiek widziałem i jest specjalnie zaprojektowany, aby rozwiązać twój problem.

Niesamowitą cechą Inform7 jest pisanie tekstowej przygody w języku przypominającym przygody tekstowe. Na przykład, oto fragment jednego z kodu źródłowego próbki Adventures':

The iron-barred gate is a door. 
"An iron-barred gate leads [gate direction]." 
It is north of the Drawbridge and south of the Entrance Hall. 
It is closed and openable. 
Before entering the castle, try entering the gate instead. 
Before going inside in the Drawbridge, try going north instead. 
Understand "door" as the gate. 

Dodaje obiekt do gry - obiekt jest drzwi, nazywa się to «brama żelaza przedawnione». Przez drzwi rozumie się dwa pokoje, w tym przypadku most zwodzony i hol wejściowy. Jeśli gracz spróbuje "wejść do mostu zwodzonego", logika gry będzie wiedziała, że ​​jest to to samo, co "idź na północ", a wtedy logika drzwi ustali, czy drzwi są zamknięte, czy nie. I tak dalej. Sprawia, że ​​pisanie tekstowych przygód jest niezwykle łatwe.

Czy istnieje jakiś szczególny powód, dla którego chcesz używać języka C# zamiast języka specyficznego dla domeny, np. Inform7? Jeśli twoim celem jest nauczenie się pisania kodu C# lub jak zbudować parser lub cokolwiek innego, to zrób to sam. Jeśli twoim celem jest napisanie przygody tekstowej, użyłbym w tym celu języka.

+1

Zależy od tego, jak to piszesz. Jeśli chcesz dowiedzieć się, jak zbudować przygodę z tekstem, aby uczyć się, to nie jest to naprawdę istotne. Mimo to jest to piękne narzędzie. – Rushyo

+0

Wiem, że to jest stare, ale oto moje dwa centy. Budowa przygody tekstowej za pomocą takiego narzędzia wydaje się po prostu tania i ograniczająca. Nie grasz tak naprawdę, tylko zmieniasz grę innej osoby. Stwarza to problem polegający na tym, że jeśli chcesz coś zrobić poza tym, na co pozwala Inform7, to masz pecha. Nie mówię, że nikt nie powinien używać tego narzędzia, ale nauczysz się znacznie więcej ORAZ stworzysz lepszą grę w tym samym czasie, jeśli sam ją zakodujesz. –

+7

@ ryansworld10: Czy mówisz o czymś, o czym wiesz, lub po prostu dajesz niedoinformowaną opinię? Jeśli jesteś niedoinformowany, powinieneś spojrzeć na ogromną głębię zachowań możliwych do wdrożenia w Inform7. Z pewnością nie jest to ograniczenie, a * tania jest dobra *. Jeśli twoim celem jest nauczenie się * jak zaprogramować grę przygodową w języku C# *, to na wszelki wypadek skonstruuj własny system w języku C#. Jeśli Twoim celem jest * napisanie gry przygodowej *, napisz przygodówkę, korzystając z najlepszych dostępnych narzędzi. Jeśli lubisz żeglować, to nie buduj łodzi **. Żaglowce! –

Powiązane problemy