2011-12-06 26 views
9

Tôi không thể tìm ra có hay không sử dụng XML, YAML hoặc JSON cho C++ 2D RPG.XML vs YAML vs JSON cho một RPG 2D

Dưới đây là suy nghĩ của tôi:

  • tôi cần một cái gì đó mà là đơn giản để tiết kiệm không chỉ là dữ liệu cầu thủ, nhưng dữ liệu môi trường, chẳng hạn như đối tượng (x, y) phối; thời gian tải; ngày; cấu hình đồ họa, v.v.

  • Tôi cần thứ linh hoạt, dễ sử dụng và chắc chắn nhẹ, nhưng mạnh mẽ để xử lý ở trên.

Lựa chọn nào là tốt nhất? Tôi có kinh nghiệm với JSON trong JavaScript, nhưng không có C++. Có bất kỳ tài liệu tham khảo tốt để phân tích cú pháp JSON trong C++ nếu đây là con đường để đi?

Sửa

Thành thực mà nói, nếu một file văn bản có vẻ như là giải pháp đơn giản nhất và hiệu quả nhất cho một cái gì đó như thế này (đặc biệt là nếu tôi chỉ có thể viết nó để nhị phân), sau đó tôi là tất cả tai.

Chỉnh sửa 2

Hãy thoải mái để cung cấp lời đề nghị khác là tốt.

+0

Đây có phải là các tùy chọn duy nhất không?Và các định dạng tuần tự nhị phân (như Google Protocol Buffers) hoàn toàn nằm ngoài câu hỏi? –

+0

Tôi không biết các định dạng như vậy - tuy nhiên, tôi rất sẵn lòng đưa những định dạng đó vào khả năng. – zeboidlund

Trả lời

19

Tôi sẽ sử dụng điều đơn giản nhất đáp ứng các yêu cầu của bạn.

Nếu bạn không cần lưu trữ phân cấp thì các tệp bảng phẳng sẽ dễ xử lý hơn bất kỳ thứ gì khác. Tất cả bạn phải làm là đọc dòng tắt đĩa và chia nhỏ trên tab.

Nếu bạn đang xem thêm bộ lưu trữ loại cặp khóa/giá trị (trái ngược với danh sách thứ), thì INI files có thể hợp lý. Định dạng này có rất nhiều tính linh hoạt, mặc dù lý do về nó có thể ít tiếp cận hơn khi bạn mở rộng nó.

Nếu bạn cần phân cấp, có thể JSON sẽ đơn giản hơn. Có các thư viện JSON với nhiều ngôn ngữ và có vẻ như bạn đã quen thuộc.

https://stackoverflow.com/questions/245973/whats-the-best-c-json-parser

sqlite có thể tùy chọn khác. Có những con rồng trong SQL, nhưng với một wrapper C++ tốt đẹp xung quanh sqlite, nó có thể có thể quản lý được. Lợi ích chính sẽ là ACID, theo ý kiến ​​của tôi.

Thông số YAML có vẻ hơi dài, vì vậy tôi có thể đoán rằng nó có nhiều bồn rửa nhà bếp hơn. Chỉ cần lướt qua các tài liệu libyaml, API trông hơi giống với các giao diện SAX mà tôi đã sử dụng trong quá khứ. Tôi không có kiến ​​thức về nó, nhưng tôi sẽ rất kín đáo để bắt đầu sử dụng nó mà không có lý do chính đáng.

XML rất khó giải quyết, đừng chọn tham gia.

Bất kể bạn chọn cái nào, hãy viết ít mã như bạn có thể quản lý. Bạn thực sự muốn viết các lớp công cụ của bạn sẽ sử dụng đầu tiên. Sau đó, lo lắng về việc serializing chúng. Nếu bạn để cho serialization của bạn ảnh hưởng đến thiết kế lớp học của bạn, bạn có thể sẽ hối tiếc. :)

+2

+1 cho đoạn cuối cùng – MerickOWA

+3

+1 cho đoạn đầu tiên và cuối cùng. – zeboidlund

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