আমার সংরক্ষণের ডেটার জন্য আমি কি টেক্সট ফাইলগুলি ব্যবহার করব?


22

আমার প্রশ্নটি হ'ল আমার গেমের ডেটা সংরক্ষণ করার জন্য আমার পাঠ্য ফাইলগুলি ব্যবহার করা উচিত। এটি করার বিষয়ে আমার কিছু প্রাথমিক উদ্বেগ রয়েছে:

  1. ডেটা সুরক্ষিত করার সত্যিই কোনও উপায় নেই এবং সুতরাং ব্যবহারকারী যদি এটিকে স্পর্শ করে তবে সমস্ত কিছু এলোমেলো করে দিতে পারে এবং আমি তা ঘটতে চাই না।

  2. এটি সম্ভবত আমার ডেটা সঞ্চয় করার সবচেয়ে কার্যকর উপায় নয় (এটি প্রচুর পরিমাণে থাকবে)

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

আমার যদি পাঠ্য ফাইলগুলি ব্যবহার না করা উচিত তবে আমার কী ব্যবহার করা উচিত? আমার সি ++ সামঞ্জস্যপূর্ণ কিছু দরকার।


2
জিপ ফাইলগুলি (পাসওয়ার্ড সহ) - অনেকগুলি লাইব্রেরি উপলব্ধ রয়েছে যা আপনাকে এটি করতে দেয় এবং এটি ডিস্কের
জায়গাতে

2
গড় ব্যবহারকারীকে ফাইল সম্পাদনা করা থেকে বিরত রাখতে en.wikedia.org/wiki/ROT13 এর মতো সাধারণ সাইফার প্রয়োগ করা যথেষ্ট। অন্যরা সম্ভবত জানেন যে তারা যেভাবেই করছে।
এক্সিলিথ

1
এটি আপনার নিজস্ব উপায়ে করুন, তবে আমার গেমগুলি সহজেই পরিবর্তনযোগ্য হতে পারে।
mmyers

উত্তর:


28

আপাতত, আপনি যেহেতু সবে শুরু করছেন, পাঠ্য ফাইলগুলি সম্ভবত ঠিক আছে। আপনার প্রশ্নের মধ্যে বেশ কয়েকটি উদ্বেগ রয়েছে যা আমি সম্বোধন করব।

  1. আপনি সম্ভবত মনে করেন ডেটা সুরক্ষা ততটা গুরুত্বপূর্ণ নয়। যদি আপনার গেমটি মাল্টিপ্লেয়ার হয় তবে আপনার পক্ষে সার্ভার-সাইডটি কোনওভাবেই সংরক্ষণ করা হবে। যদি আপনার গেমটি একক প্লেয়ার হয়, তবে খেলোয়াড়রা যদি ডেটা পরিবর্তন করে? যদি তারা কিছু ভঙ্গ করে তবে এটি তাদের ত্রুটি এবং তারা পুনরায় ইনস্টল করতে পারে।

  2. পারফরম্যান্সও অন্য কিছু যা আমরা প্রায়শই সঠিকভাবে পরিকল্পনা করতে ব্যর্থ হই। যতক্ষণ না আপনি প্রকৃতপক্ষে কোনও পারফরম্যান্সের সমস্যাটি পরিমাপ করেন ততক্ষণ আপনার সত্যিকারের অনুকূলিত হওয়া উচিত নয় । আমার অনুমান যে আপনি সম্ভবত ডেটার একটি পরিমাণ নয় হবে হয় যে বড় এবং যে পাঠ্য ফাইল শুধু জরিমানা করা করতে যাচ্ছি।

বলা হচ্ছে, আপনার সেরা বাজি হ'ল আপনার ডেটা সঞ্চয় এবং লোড রুটিনগুলিকে যথাসম্ভব উপস্থাপন করা। উদাহরণস্বরূপ, আপনি একটি বেস ক্লাস রাখতে পারেন, বলুন DataWriterএবং তারপরে তার বিভিন্ন পদ্ধতির বিভিন্ন বাস্তবায়ন সরবরাহ করতে পারেন । একটি খুব প্রাথমিক উদাহরণ দেখতে হবে:

class DataWriter {
  virtual void save(GameState state) = 0;

  virtual ~DataWriter() { }
};

class TextFileDataWriter : public DataWriter {
  virtual void save(GameState state) {
    //write to text file
  }
};

class DatabaseDataWriter : public DataWriter {
  virtual void save(GameState state) {
    //write to database
  }
};

আপনি যখন শেষ পর্যন্ত আপনার গেমটি প্রোফাইল করেন এবং উপলব্ধি করেন যে ফাইল রাইটিং রীতিতে পারফরম্যান্সের অন্তরায় রয়েছে, আপনি কলিং কোডের ন্যূনতম পরিবর্তন সহ সেই শ্রেণীর আরেকটি বাস্তবায়ন (উদাহরণস্বরূপ কোনও ডাটাবেজে লিখতে) সরবরাহ করতে পারেন।


এটি একটি একক প্লেয়ার গেম, এবং সেগুলি আমার ধারণা ছিল ঠিক যদি তারা ডেটা নিয়ে গোলযোগ করতে চায়। আমি জানি না, পাঠ্য ফাইলগুলি সম্পর্কে কিছু কেবলমাত্র পেশাদারিত্বহীন বলে মনে হয়েছিল এবং আমি বুঝতে পেরেছিলাম যে আমি যদি ব্যবহারকারীকে খারাপ দিক থেকে আটকাতে পারি তবে আমার উচিত। এছাড়াও, আপনি যখন "ডেটাবেস" বলবেন তখন আপনার অর্থ কী? আমি শুনতে পেয়েছি যে এটি প্রায় ছড়িয়ে পড়েছে তবে সঠিক সংজ্ঞা বা কোন ধরণের ফাইলের উপর নির্ভর করে সে সম্পর্কে আমার কোনও ধারণা নেই।
আলথেজেল

6
@ অ্যালথেজেল জিনিসটি হ'ল আপনি কীভাবে আপনার ডেটা সংরক্ষণ করবেন তা নির্বিশেষে যে কেউ এটি সংশোধন করার জন্য যথেষ্ট দৃ determined়সংকল্পবদ্ধ সক্ষম হবেন। সেই অর্থে, এটি চেষ্টা করার জন্য এবং সুরক্ষার জায়গায় রাখার জন্য আপনার মূল্যবান বিকাশের সময়টি নষ্ট করা :)
pwny

@ অ্যাল্থেজেল ডাটাবেসগুলির জন্য, এটিকে এমন একটি ইঞ্জিন হিসাবে ভাবুন যেখানে আপনি ডেটা পড়তে বা লেখার জন্য অনুরোধগুলি পাস করেন। সেই ইঞ্জিনটি দক্ষতার সাথে এটি টেবিলে সাধারণত সম্পর্কিত আকারে সংরক্ষণ / পড়ার জন্য দায়বদ্ধ। আপনার ব্যবহারের ক্ষেত্রে, আমি এসকিউএলাইট ( sqlite.org ) দেখুন। মূলত আপনি একটি স্থানীয় এসকিউএল ডাটাবেসের সাথে সংযোগ করতে একটি সি ++ লাইব্রেরি ব্যবহার করতে চান (এসকিউলাইট স্থানীয় ফাইলগুলি ব্যবহার করে) এবং আপনার ডেটা অ্যাক্সেস করার জন্য এসকিউএল সিন্টেক্সে সেই লাইব্রেরি কলটি পাস করেছে।
pwny

2
এটি একটি দুঃখজনক বিশ্ব, যখন বিকাশকারীরা তাদের কম্পিউটারে সঞ্চয় করা তথ্য থেকে ব্যবহারকারীদের লক করতে সক্ষম হতে চায়।
ক্লাসিকথান্ডার

2
টেক্সট ফাইলগুলি ব্যবহার করা সত্যিই কেবল পেশাদারের অনুভূত কারণ খুব অল্প গেমসই "সেভ ডেটা.টেক্সট" হিসাবে জিনিস সঞ্চয় করে - তবে আপনি যদি সর্বাধিক সংরক্ষিত গেম ফাইলগুলি অনুসন্ধান করতে সময় ব্যয় করেন তবে আপনি দেখতে পাবেন যে তারা সাধারণত পাঠ্য ফাইল ছাড়া আর কিছুই না are যা তাদের সাথে বাইনারি ডেটা যুক্ত করে। প্রতিটি সভ্যতা এবং মোট যুদ্ধের সিরিজ গেম, উদাহরণস্বরূপ, বিভিন্ন গেমের ডেটার জন্য প্রকৃত .txt ফাইলগুলি ব্যবহার করে। এর জন্য সর্বাধিক সাধারণ 'আপগ্রেড' হ'ল একটি ডাটাবেস সিস্টেম যা একটি ফ্ল্যাট-ফাইল হিসাবে ডেটা সঞ্চয় করে শেষ করে - কিছু বাইনারি ব্লব ব্যতীত - কেবল একটি পাঠ্য ফাইল।
ব্রায়ানএইচ

3

গেম ডেটা শব্দের অর্থ অনেকগুলি অর্থ হতে পারে, উদাহরণস্বরূপ

  • Gamestate
  • কনফিগারেশন ফাইল
  • মানচিত্র, টেক্সচার, শব্দ, স্ক্রিপ্ট, অ্যানিমেশন ডেটা, ...
  • স্থানীয়করণ
  • জিইউআই লেআউট ডেটা
  • আরও আমি ভাবিনি

প্রতিটি বিভাগের জন্য আপনি অন্য পদ্ধতি গ্রহণ করতে পারেন।

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

কনফিগারেশন স্টাফ জন্য আপনার এক্সএমএল ফাইল পরিবর্তন করা সহজ ব্যবহার করা উচিত।

সর্বদা হিসাবে, সঠিক উত্তরটি "এটি নির্ভর করে"।

সি ++ বাইন্ডিং সহ অনেক এক্সএমএল পার্সার রয়েছে এবং এসকিউএলাইটের জন্য একটি সি ++ বাইন্ডিং উপস্থিত রয়েছে।


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

0

আপনি যখন আপনার ফাইলটি অ্যাক্সেস করতে আসেন তখন আপনি বাইনারি ব্লব হিসাবে আপনার ডেটা সংরক্ষণ করতে পারেন এবং আবার ডেটা প্রবাহিত করতে পারেন। এটি আপনার উভয় সমস্যার সমাধান করবে। কেবল নিশ্চিত করুন যে সিরিয়ালাইজেশন কোড হ'ল ডি-সিরিয়ালাইজেশনের মতো।

বাইনারি ব্লবটিতে স্ট্রিমিং তুলনামূলকভাবে দ্রুত এবং এটি ব্যবহারকারীকে ডেটা দেখতে এবং এটি পরিবর্তন করতে বাধা দেয়।

আপনি স্ট্যান্ডার্ড লাইব্রেরি স্ট্রিম ব্যবহার করে এগুলি অর্জন করতে পারেন।


2
বাইনারি ব্লবটি দ্রুত এবং সহজ (উভয়ই দেব এবং লোড / চালাতে উভয় ক্ষেত্রে) বাইনারি ব্লাবের সাথে আমার সবচেয়ে বড় সমস্যাটি হ'ল ডেটা স্ট্রাকচার সংগঠন সম্পর্কে কোনও কিছু পরিবর্তন করার সাথে সাথেই (এককভাবে একটি floatসদস্যকে যুক্ত করা অবজেক্ট), পুরানো সেভগেমগুলি সম্পূর্ণ অবৈধ হয়ে যায়। উন্নয়নের সময় এটি মোকাবেলা করা কঠিন, তবে যদি আপনি এটির উপরে নির্ভর করেন তবে তা সর্বদাই।
বোবোবো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.