গেমের ডেটা সংরক্ষণের জন্য একটি ভাল ফাইল ফর্ম্যাট কী? [বন্ধ]


37

আমার কিছু কাস্টম গেম ডেটা সংরক্ষণ করা দরকার। মানচিত্র, প্লেয়ার ইত্যাদি

তাদের সকলেরই "সাব অবজেক্ট" থাকবে। উদাহরণস্বরূপ, একটি মানচিত্র এবং মানচিত্রে টাইলগুলির একটি "অ্যারে" থাকবে। অর্থাত্ হায়ারারিকিকাল ডেটা। আশা করি বাইনারি কিছুই না।

এগুলির জন্য ভাল ফর্ম্যাটটি কী হবে?

এখনও অবধি আমি বিবেচনা করেছি:

সিলাইলাইজেশন: এটি দ্রুত এবং সহজ, তবে আমি অন্তর্নিহিত শ্রেণিগুলি পরিবর্তন করার সময় ভাঙ্গতে ঝোঁক :(

এক্সএমএল: আমি এটিকে পার্স করা সত্যই ঘৃণা করি। আমার পরীক্ষার কেসটি 100+ কোডের লাইনের ওপরে ছিল এবং খুব সাধারণ বিন্যাসের জন্য প্রচুর "ব্যস্ত কাজ" পছন্দ করেছে।

আইএনআই: শ্রেণিবদ্ধ তথ্যের জন্য সত্যই আনাড়ি হবে।

প্রোটোবুফ: এটি কখনও ব্যবহার করেন নি, তবে পড়ুন আপনাকে ক্লাস পরিবর্তন করলে চারপাশে প্রচুর ম্যানুয়াল ম্যাকিং করতে হবে এবং বিরতিতে হবে।

অন্যান্য অপশন? এ কারণেই আমি এখানে আছি!

সম্পাদনা: এটি জাভা বিটিডব্লিউ।

সম্পাদনা 2:

আমি "নিয়ন্ত্রিত বাইনারি সিরিয়ালাইজেশন" এ স্থির হয়েছি (নীচে দেখুন)।

পেশাদাররা:

  • এটা দ্রুত

  • এটি ছোট (ডিস্কে) এবং সহজেই পড়তে / লেখার সময় সংকুচিত / সংক্ষেপিত হতে পারে।

  • গেম এবং টুলসেট থেকে পড়া / লেখার পক্ষে এটি অত্যন্ত সহজ।

  • আমি অবজেক্টটি কী / অন্তর্ভুক্ত করব তা স্থির করতে পারি।

  • অবজেক্টস / ডেটা নেস্ট করা যায়।

কনস:

  • এটি হাত দ্বারা সম্পাদনা করতে পারে না (যেমন এক্সএমএল, ওয়াইএমএল, ইত্যাদি)

  • স্ক্রিপ্টগুলি সহ এটি সহজেই পড়তে / সংশোধন করতে পারে না

  • ডিফল্টরূপে জাভা সিরিয়ালাইজেশন অন্যান্য ইমপ্লিটেশনের তুলনায় বেশ ধীর / প্রস্ফুটিত তবে এটি স্থিতিশীল এবং কার্যকর works


3
কমা বিভাজিত মানগুলি
টমাস এডিং

@ ত্রিনিথিস কেআইএসএস একটি দুর্দান্ত জিনিস।
নাট

3
: ফাঁদে পড়ে না যে চিন্তা CSV পার্স সহজ secretgeek.net/csv_trouble.asp
Tetrad

মজার বিষয়, প্রোটোফুফ আপগ্রেডিবিলিটি সমর্থন করার জন্য নির্মিত হয়েছিল।
জোনাথন ডিকিনসন

সেটিংস ইত্যাদির মতো ব্যবহারকারী-পরিবর্তনযোগ্য সমস্ত কিছুর জন্য আইএনআই; এবং সমস্ত কিছুর জন্য বাইনারি।
উউর গামাহান

উত্তর:


38

শ্রেণিবদ্ধ তথ্য প্রদর্শন করতে, YAML বা JSON ভাল বিকল্প হবে। এইগুলি হল পর্যন্ত সহজ এবং XML চেয়ে বিশ্লেষণ করতে সহজ।

আর একটি বিকল্প হবে "নিয়ন্ত্রিত" বাইনারি সিরিয়ালাইজেশন প্রক্রিয়া। প্রতিটি বস্তু একটি নিয়ন্ত্রিত উপায়ে এটি রাষ্ট্রের বাইরে লেখায় ie

void player::save(savegame &sgm)
{
    sgm.write(this->position);
    sgm.write(other properties);
    inventory.save(sgm);
}

আইডি টেক 4 (ভূমিকম্প 4 / ডুম 3 ইঞ্জিন) এ জাতীয় একটি পদ্ধতির ব্যবহার করে।


"নিয়ন্ত্রিত" বাইনারি সিরিয়ালের জন্য +1। আমি এটি কাজে ব্যবহার করি এবং এটি দুর্দান্ত!
NoobsArePeople2

1
"নিয়ন্ত্রিত" বাইনারি সিরিয়ালাইজেশনের জন্য আর একটি +1। যদিও আমি নামটি আগে কখনও শুনিনি, আমি কয়েকটি জায়গায় একই রকম কিছু করেছি - ঠিক হয়ে গেলে, ডেটা ফাইলে বিদ্যমান না এমন নতুন যুক্ত ক্ষেত্রগুলির জন্য ডিফল্ট সেট করতে সক্ষম হওয়া এবং "উপেক্ষা করার সুবিধা রয়েছে জাঙ্ক "ডেটা ফাইলে যখন কোনও ক্ষেত্রটি মডেল থেকে সরানো হয়।
ইজকাটা

আমি আমার গেমটিতে এরকম কিছু ব্যবহার করি। এটি ভালই কাজ করে! আমি জাভা ব্যবহার করি। প্রতিটি বস্তুর একটি টোবাইটস্ট্রিম পদ্ধতি রয়েছে যা একটি ফাইল স্ট্রিম এবং একটি নির্মাণকারীকে লেখায় যা কোনও ফাইল স্ট্রিম থেকে পড়ে। আমি জাভাস সিরিয়ালাইজিং বাস্তবায়ন পছন্দ করি না।
মাইকেলহাউস

4
অথবা আপনি কেবল বুস্ট ব্যবহার করতে পারেন erial
নিকল বোলাস

@ ইজকাটা আমি এই নামটি তৈরি করেছি কারণ এই পদ্ধতিটি কীভাবে বলা হয় তা আমার কোনও ধারণা নেই।
রাফেল আর।

9

একটি ভালভাবে তৈরি বাইনারি ফর্ম্যাটটি সত্যিই সমস্ত সুবিধা পেয়েছে, এটি দ্রুত, যুক্তিসঙ্গতভাবে ছোট এবং আপনি এটির মতো নমনীয় flex

বাইনারি বিন্যাস তৈরি করা আপনাকে কোনও নিয়মের দ্বারা আবদ্ধ করা, এটি একটি দুর্দান্ত সুবিধা, তবে মজার বিষয় এটি বাইনারি ফাইল স্ট্রাকচারকে একটি খারাপ নাম দিয়েছে। এক্সএমএল, জেএসওন এবং এর মতো আপনার পক্ষে অনেক সিদ্ধান্ত নেয়, এগুলি সর্বদা অনুকূল থেকে অনেক দূরে তবে এগুলি যথাযথভাবে নিরাপদ পছন্দ যা আপনাকে কিছুটা সাধারণ সমস্যা থেকে দূরে রাখতে সহায়তা করবে।

এই সমস্যাগুলি চিহ্নিত করুন, মনে রাখে এমনদের সাথে আপনার ফর্ম্যাটটি ডিজাইন করুন এবং আপনি একটি দুর্দান্ত বাইনারি ফর্ম্যাট তৈরি করতে পারেন।

আপনি যদি বাইনারি ফর্ম্যাট তৈরি করতে যথেষ্ট অভিজ্ঞ / আত্মবিশ্বাসী না হন এবং ডেটার পরিমাণ যথেষ্ট পরিমাণে হয় যে গতির প্রভাব তুচ্ছ হবে তবে আমি পরামর্শ দিচ্ছি যে আপনি জেএসএন ব্যবহার করেন এটি সহজ, তবে কাজটি করে does


6

আপনার ফাইল ফর্ম্যাটের পছন্দটি আপনার বর্তমান টুলসেট এবং আপনি যে গেমটি বানাতে চাইছেন তার উপর নির্ভরশীল । যে বলেন...

গেম ফাইলের ফর্ম্যাটটি নির্ধারণ করার সময় টুলসেট অন্যতম গুরুত্বপূর্ণ কারণ। আপনি যদি বাইনারি বিন্যাস তৈরি করেন তবে আপনাকে সর্বদা এটি নিশ্চিত করতে হবে যে আপনার গেমের ডেটা ইনপুট করার সরঞ্জামগুলি আপনার কাছে রয়েছে। এটি হেক্স সম্পাদক হিসাবে সাধারণ বা অবাস্তব সম্পাদক হিসাবে জটিল হতে পারে।

আমি অনুমান করি যে এক্সএমএল, ওয়াইএএমএল, বা অন্য কোনও ভাষা ফাইলগুলির প্রধান সুবিধাটি হ'ল আপনি এটি কোনও পাঠ্য সম্পাদকের মাধ্যমে সহজেই সম্পাদনা করতে পারবেন । এবং বিদ্যমান মান ব্যবহার করে এটি নিশ্চিত করে যে আপনি ভুল হতে পারবেন না । তবে, আপনার কাছে এক হাজার ফাইল থাকাকালীন এটি অত্যন্ত ক্লান্তিকর , যা আমার পরবর্তী পয়েন্টে নিয়ে আসে।

গেম। আপনি কোন ধরনের খেলা তৈরি করছেন? আমি কেন বলছি এটি ফাইল ফর্ম্যাটকে প্রভাবিত করবে? কারণ, আপনি যদি 2 ডি বোম্বারম্যানের মতো কিছু তৈরি করে থাকেন তবে আপনি একটি সাধারণ টেক্সট ফাইলের মতো পালাতে পারবেন :

*********
*1     2*    1,2,3,4  - start point of players 1, 2, 3, 4
* + + + *    *        - walls
*       *    +        - crates
* + + + *
*3     4*
*********

অন্য কথায়, সবসময় আপনার নির্দিষ্ট ডেটার জন্য সবচেয়ে বড় বিন্যাসে জন্য যেতেআরপিজিগুলি তৈরি করা সবচেয়ে জটিল গেম জেনার। তাদের প্রচুর ডেটা প্রয়োজন। তবে এর অর্থ এই নয় যে আপনাকে গেমের সমস্ত ডেটার জন্য বাইনারি বা পাঠ্য-ভিত্তিক কোনও নির্দিষ্ট বিন্যাসটি আটকাতে হবে।

  • মানচিত্র, কণা এবং অন্যান্য গ্রাফিকাল স্টাফ একটি কাস্টম বাইনারি ফর্ম্যাট ব্যবহার করতে ঝোঁক। কারণ এটি কার্যকর করার সহজতম উপায় । পাঠ্যগতভাবে মানচিত্রের বর্ণনা দেওয়া মানবিক-বুদ্ধিমানের কাজ নয়। সাধারণত মানচিত্র / স্তর / কণা সম্পাদক দ্বারা সম্পাদিত।
  • খেলোয়াড়, আইটেম, শত্রু, দক্ষতা এবং অনুসন্ধানগুলি হ'ল পরিসংখ্যান যা গেমের ভারসাম্যকে প্রভাবিত করে । তাদের সাধারণত প্রচুর এবং প্রচুর ইনপুট এবং টুইট করা দরকার require বাস্তবায়নের সুবিধার্থে এটি এক্সএমএল ফাইলে রেখে আমি এটি করতে চাই, তবে ডিজাইনারদের সাথে খেলতে পারাতে কোনও অবজেক্ট এডিটর রেখেছি। উভয় বিশ্বের সেরা

সাধারণত, আপনি একটি পাঠ্য বিন্যাস সহ পাঠ্য এবং বাইনারি ফর্ম্যাট সহ গ্রাফিকগুলি বর্ণনা করতে চান। নিম্নলিখিতটি আপনাকে একটি উদাহরণ দেবে:

<Skill>
    <Name>Fireball</Name>
    <Animation>fireball.dat</Animation> <!-- Graphics described in another file -->
    <Attack>1.3</Attack>
    <Cooldown>15</Cooldown>
</Skill>

এটি যোগ করা, এটা যে সম্ভব হলে, আপনি আপনার ডেটা স্ক্রিপ্ট না, আমার পূর্ণ সুপারিশ করা হয় , যদি না অত্যাবশ্যক । গেমটি যতক্ষণ না খেলতে পারা যায়, ততক্ষণ যে বিন্যাসটি কতটা দুর্দান্ত, সে সম্পর্কে শেষ-ব্যবহারকারী পাত্তা দেয় না that's

চিয়ার্স, রোয় =)


5

BSON বেশ সুন্দর। http://bsonspec.org/ । জেএসএনকে পার্স করা আরও সহজ এবং বাইনারি ডেটা থাকাতে আরও ভাল তবে এখনও একটি সুন্দর কাঠামো রয়েছে। এটি কিছুটা প্রোটোকল বাফারের মতো similar ক্ষয়ক্ষতিটি হ'ল মন্টোডাবের বাইরের জন্য সেখানে অসন্তুষ্টি অনেকগুলি সরঞ্জাম সমর্থন বলে মনে হচ্ছে।

সম্পাদনা: এমএসজিপ্যাক ( http://msgpack.org/ ) BSON এর সাথেও সমান এবং মনে হয় আরও ট্র্যাকশন লাভ করছে।


1
যদিও আমি মনে করি যে "বাইনারি জেএসওএন" ধারণাটি ভাল আমি বিএসওএন-তে খুব কম বিশ্বাস করি, তবে অনেকগুলি (রিডানড্যান্ট) ডেটা টাইপ রয়েছে এবং ডকুমেন্টেশন সফল হয়।
আআআআআআআআআআআআআআআআ

2

আপনার কাস্টম বাইনারি ডেটা ফর্ম্যাটে কী হয়েছে? আপনি যদি কাঁচা সিরিয়ালাইজেশন থেকে ভীত হন তবে আপনার নিজের সিস্টেম লিখুন যা প্রয়োজন অনুসারে ক্ষেত্রগুলি লেখ এবং সেগুলি আবার পড়। এক্সএমএল প্রয়োজন নেই, যা প্রকৃতপক্ষে অত্যধিক ভারী এবং জটিল পরিস্থিতিতে এমন পরিস্থিতিতে যেখানে আপনার স্বচ্ছতার যে বিন্যাসের প্রয়োজন নেই তার প্রয়োজন নেই। কেবলমাত্র একটি সুনির্দিষ্ট ফাইল ফর্ম্যাটটি সংজ্ঞায়িত করুন এবং এটি আটকে থাকুন, প্রতিটি রেকর্ডে আপনার ডেটা সেট করার জন্য শূন্য মানের সাথে প্যাডিং করে কিছু বাড়িয়ে দিতে পারেন (বলুন যে আপনার কাছে এখন 100 বাইট রেকর্ড রয়েছে, ভবিষ্যতে ব্যবহারের জন্য এটি প্যাড 150 হবে)।
একটি সংস্করণ নম্বর এবং সম্ভবত একটি চেকসাম যুক্ত করুন যাতে আপনি জানতে পারেন কোন ক্ষেত্রগুলি পূরণ করা উচিত এবং বৈধতার জন্য স্যানিটি চেক করতে হবে এবং আপনি যেতে ভাল।


1

কিছু নির্দিষ্ট ডেটার জন্য আপনি বেস 64৪ সন্নিবেশের সাথে এক্সএমএল বা অন্য কোনও ফর্ম্যাট মিশ্রিত করতে পারেন, এবং ক্ষেত্রগুলির জন্য আপনার পাঠযোগ্যতার প্রয়োজন রয়েছে আপনি সাধারণ পাঠ্য ব্যবহার করতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.