2010-09-17 36 views
5

Tôi đang phát triển một cuộc phiêu lưu văn bản kiểu "Zork" trong C# và nó sẽ có một số lượng khá lớn các khu vực khác nhau với mô tả và công cụ sửa đổi môi trường. Tôi không muốn có một cơ sở dữ liệu, lý tưởng, trừ khi nó thực sự là cách tốt nhất để làm điều đó.Cách tốt nhất để lưu trữ dữ liệu khu vực cho một cuộc phiêu lưu văn bản là gì?

Tôi cần lời khuyên về cách tốt nhất để lưu trữ/tải dữ liệu này.

Nó sẽ bao gồm:

  • Khu vực Mô tả
  • bổ Môi trường (cửa sổ đang mở/bị hỏng, cánh cửa đóng lại)
  • mục hiện tại theo mặc định
+0

Một số 'Cơ sở dữ liệu' là nhẹ hơn những người khác, là có một lý do gì đó như thế sqlite sẽ không phù hợp với bạn? – Textmode

Trả lời

7

Nối tiếp tất cả dữ liệu cần gửi. Nó sẽ đảm bảo dấu chân nhỏ nhất khi người dùng cài đặt trò chơi, mà không có bất kỳ bất lợi thực sự nào. Cơ sở dữ liệu rất tuyệt vời khi bạn có nhiều dữ liệu, nhưng bạn đang nói về một cuộc phiêu lưu văn bản, trong đó bạn sẽ tải toàn bộ nội dung trò chơi vào bộ nhớ. Một tập tin đơn giản sẽ làm việc cho điều này rất độc đáo.

Lưu ý, tôi không nói về xml nhưng tuần tự hóa nhị phân. Bất kỳ loại văn bản tuần tự hóa nào sẽ cho phép người dùng xem nhanh dữ liệu của bạn và lừa gạt hoặc hack trò chơi. Và bạn có thể dễ dàng hoán đổi vào/ra tệp dữ liệu được tuần tự hóa cho dù đó là văn bản hay nhị phân. Hãy nhớ rằng, toàn bộ 'văn bản' của bạn có thể chỉ là vài trăm kilobyte.

+0

Đó là một kế hoạch tốt thực sự, serialization nhị phân. Tôi không biết tại sao tôi không nghĩ về điều đó. – Liggi

+0

Không thể không cảm thấy một chút đau đớn khi đề nghị nó trước khi ... ah tốt. – Rushyo

+0

Xin lỗi Rushyo, nếu bạn đề xuất nó trước. Tôi đã không thực sự hiểu những gì bạn đang nói trong câu trả lời của bạn. – Liggi

1

Tôi biết bạn không muốn một DB, nhưng bạn đã xem SQL Server Compact Edition chưa? Nó có thể chỉ làm những gì bạn muốn.

+0

Có cách nào để tôi ngăn chặn bất kỳ ai thực sự xem xét cơ sở dữ liệu không? Có lẽ là một câu hỏi ngu ngốc. – Liggi

+0

Đó là một câu hỏi hoàn toàn khác ... Tôi sẽ nói cuối cùng, không. Nếu nó nằm trên máy của khách hàng, bất kể bạn làm gì để mã hóa/mã hóa/bảo vệ, ứng dụng của bạn sẽ cần truy cập dữ liệu, vì vậy người dùng có thể xác định được. Nó có lẽ sẽ là khó khăn hơn để mở ra hơn một serialization XML mặc dù. – spender

+0

Được rồi, đừng lo. Tôi sẽ thử tùy chọn của bạn. – Liggi

0

Tôi cho rằng C# cung cấp cho bạn chính xác các công cụ phù hợp cho việc này. Chỉ cần đóng gói các cấu trúc của bạn vào các lớp. Dự án OOP đầu tiên của chúng tôi tại trường đại học chính xác là vấn đề này! Đây là nghiên cứu điển hình hoàn hảo cho OOP.

Sau đó, bạn có thể sử dụng nhiều phương thức tuần tự hóa của C# để lưu trữ liên tục (tải/lưu) tuy nhiên bạn thấy phù hợp.

+0

[Đã xóa - vì đó là trả lời cho một nhận xét khác đã bị xóa] – Rushyo

+1

nhưng câu hỏi cũng là "Nơi để lưu trữ nó" đóng gói cấu trúc trong _classes_ không nói bất cứ điều gì về nơi dữ liệu sẽ cư trú _objects_ được lưu trữ trước khi _objects_ được khởi tạo. –

+1

Vâng, tôi cho rằng đó là hoàn toàn chủ quan - không thực sự là một câu hỏi hợp lệ. Tệp văn bản phẳng? Nó không thực sự quan trọng chút nào. Nó sẽ không phải là một nút cổ chai, không có câu trả lời đúng. Chỉ cần lưu trữ bất kỳ cách nào bạn thấy phù hợp. Cá nhân tôi có xu hướng phát minh ra một định dạng mới cho mọi trò chơi mà tôi phát triển với ngữ nghĩa thích hợp cho vấn đề. Khi chúng được tạo một lần, việc tuần tự hóa và deserialisation bao gồm việc truy xuất nó trong tương lai. – Rushyo

0

Làm cách nào để 'viết kịch bản' cuộc phiêu lưu của bạn thành một tệp văn bản lớn? Sau đó, ứng dụng của bạn phân tích cú pháp tệp này, xây dựng cuộc phiêu lưu trong lớp và chạy từ đó?

Điều này có nghĩa là bạn có thể chỉnh sửa cuộc phiêu lưu bằng cách sử dụng trình soạn thảo văn bản đơn giản. Tôi sẽ tưởng tượng rằng khi nhiều quyết định có thể được thực hiện từ một nguồn duy nhất nó có thể trở nên khó khăn khi hình dung các liên kết. Tuy nhiên điều này cũng sẽ phức tạp trong một DB mà không có một số chuyên gia front-end.

UPDATE:

Hoặc có bạn coi XML ví dụ ...

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

Sau đó sử dụng để bổ lớp học của bạn trong bộ nhớ.

0

Bạn có thể lưu trữ dữ liệu trong hệ thống tệp (tệp zip hoặc thư mục).

Mỗi lựa chọn có thể được lưu trữ dưới dạng thư mục, trong khi tất cả các mô tả, công cụ sửa đổi và dữ liệu khác có thể được lưu trữ dưới dạng tệp văn bản (xml?). Khi người dùng đưa ra quyết định bạn vào thư mục thích hợp và theo dõi cốt truyện.

Ví dụ:

Bạn có muốn:

  • mở cửa (cửa)
  • nghỉ (nghỉ)

Nếu người dùng choses để mở cửa bạn đi cửa thư mục và đọc dữ liệu từ tệp dữ liệu trong thư mục này.

Ưu điểm:

  • đơn giản
  • không yêu cầu cơ sở dữ liệu
  • dễ dàng để thêm cuộc phiêu lưu mới

Nhược điểm:

  • vấn đề với quyết định rollback (nhận được trở lại bắt đầu hoặc đến một điểm nhất định trong lô)
0

Cá nhân, tôi muốn tránh cơ sở dữ liệu trong trường hợp này và định dạng tệp dựa trên văn bản (có thể là hai tệp riêng biệt, một tệp cho trạng thái ban đầu (như địa hình và như vậy). và một cho nhà nước đó là để được sửa đổi trong quá trình của trò chơi (các cửa sổ bị hỏng vv); hoặc chia toàn bộ nội dung thành một cặp dữ liệu tĩnh/động trên mỗi khu vực.

Một vài lý do:

  • Một tập tin văn bản là con người có thể đọc được; do đó, bạn có thể tạo nội dung mà không có trình chỉnh sửa chuyên dụng, trong khi với phương pháp cơ sở dữ liệu, bạn phải nhập dữ liệu thông qua truy vấn hoặc mã một trình chỉnh sửa cấp
  • Giả sử một trường hợp một người chơi, đồng thời không phải là vấn đề
  • Savegames là một vấn đề sao chép các tập tin trạng thái sửa đổi vào một thư mục savegame, hoặc đóng gói chúng thành một tệp duy nhất
  • Bạn có thể dễ dàng nhúng tập lệnh
  • Cấu trúc dữ liệu bạn đang xử lý có thể đủ đơn giản để toàn vẹn dữ liệu không phải là vấn đề nghiêm trọng
13

Tôi sẽ giải quyết vấn đề của bạn bằng cách từ bỏ C# và viết chương trình của bạn theo số Inform7. Inform7 chỉ là ngôn ngữ lập trình tuyệt vời nhất mà tôi từng thấy và nó được thiết kế đặc biệt để giải quyết vấn đề của bạn.

Điều tuyệt vời về Inform7 là bạn viết cuộc phiêu lưu văn bản bằng ngôn ngữ giống với cuộc phiêu lưu văn bản. Ví dụ, đây là một đoạn của một trong những mã nguồn những cuộc phiêu lưu mẫu:

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. 

này sẽ thêm một đối tượng vào trò chơi - đối tượng là một cánh cửa, nó được gọi là 'cổng sắt bị cấm'. Một cánh cửa được hiểu là giữa hai phòng, trong trường hợp này là cầu kéo và sảnh vào. Nếu người chơi cố gắng "nhập vào cầu nối" thì logic trò chơi sẽ biết rằng điều này giống như "đi về phía bắc", và sau đó logic cửa sẽ xác định xem cánh cửa có bị đóng hay không. Và cứ thế. Nó làm cho văn bản cuộc phiêu lưu văn bản cực kỳ dễ dàng.

Có một số lý do cụ thể khiến bạn muốn sử dụng C# thay vì ngôn ngữ dành riêng cho miền như Inform7 không? Nếu mục tiêu của bạn là tìm hiểu cách viết mã C# hoặc cách xây dựng trình phân tích cú pháp hoặc bất kỳ thứ gì, thì tất cả các phương tiện đều tự làm. Nếu mục tiêu của bạn là viết một cuộc phiêu lưu văn bản, thì tôi sẽ sử dụng một ngôn ngữ được thiết kế cho điều đó.

+1

Phụ thuộc vào lý do bạn viết nó. Nếu bạn đang tìm kiếm để tìm hiểu về cách xây dựng một cuộc phiêu lưu văn bản để tự dạy cho mình, thì nó không thực sự có liên quan. Tuy nhiên, nó là một công cụ đáng yêu. – Rushyo

+0

Tôi biết đây là cũ, nhưng đây là hai xu của tôi. Xây dựng một cuộc phiêu lưu văn bản với một công cụ như thế này có vẻ như rẻ và hạn chế. Bạn không thực sự tạo ra trò chơi, bạn chỉ đang thay đổi trò chơi của người khác. Điều này cho thấy vấn đề là nếu bạn muốn làm điều gì đó bên ngoài những gì mà Inform7 cho phép, thì may mắn khó khăn. Tôi không nói rằng không ai nên sử dụng công cụ này, nhưng bạn sẽ học nhiều hơn và tạo ra một trò chơi tốt hơn cùng một lúc nếu bạn tự viết mã. –

+7

@ ryansworld10: Bạn đang nói về điều gì đó mà bạn biết, hoặc chỉ đưa ra một ý kiến ​​không rõ ràng? Nếu bạn không hiểu rõ, bạn thực sự nên xem xét chiều sâu hành vi có thể thực hiện được trong Inform7. Nó chắc chắn không giới hạn, và * rẻ là một điều tốt *. Nếu mục tiêu của bạn là để tìm hiểu * làm thế nào để lập trình một trò chơi phiêu lưu trong C# * thì bằng mọi cách, hãy xây dựng hệ thống của riêng bạn trong C#. Nếu mục tiêu của bạn là * để viết một trò chơi phiêu lưu * thì hãy viết một trò chơi phiêu lưu bằng cách sử dụng các công cụ có sẵn tốt nhất. Nếu bạn thích đi thuyền thì ** không xây dựng tàu thuyền **. Thuyền buồm! –

2

Hiện có nhiều công cụ viễn tưởng tương tác. Tôi sẽ xem xét định dạng dữ liệu của họ, theo cách đó bạn có thể sử dụng lại nội dung và công cụ hiện có để chỉnh sửa nội dung.

phổ biến nhất hiện nay là Glulx http://eblong.com/zarf/glulx/ và Z-Machine http://en.wikipedia.org/wiki/Z-machine

Đây là một tài liệu tham khảo kỹ thuật cho các định dạng Glulx: http://eblong.com/zarf/glulx/technical.txt

Các vấn đề liên quan