গেমের স্টেট (প্রোফাইলগুলি) সংরক্ষণের জন্য সর্বাধিক ব্যবহৃত পদ্ধতি বা অ্যালগরিদম কী, এনক্রিপশন কীভাবে যায় এবং কীভাবে সম্পর্কিত জিনিসগুলি ডাটাবেসগুলি পাঠ্য ফাইল files
আমি দেখেছি সিজার IV মাইএসকিউএল ব্যবহার করেছে।
কোন পরামর্শ.
গেমের স্টেট (প্রোফাইলগুলি) সংরক্ষণের জন্য সর্বাধিক ব্যবহৃত পদ্ধতি বা অ্যালগরিদম কী, এনক্রিপশন কীভাবে যায় এবং কীভাবে সম্পর্কিত জিনিসগুলি ডাটাবেসগুলি পাঠ্য ফাইল files
আমি দেখেছি সিজার IV মাইএসকিউএল ব্যবহার করেছে।
কোন পরামর্শ.
উত্তর:
আমি নিশ্চিত যে এটি প্রায়শই কোনও মালিকানাধীন (বাইনারি) ফর্ম্যাটে সম্পন্ন হয়, আপনি যে কোনও গেমের স্টেট স্ট্রাক্ট কোনও ফাইলের মধ্যে ব্যবহার করেন না কেন প্রতিটি ফাইল পরিবর্তন করতে পারেন বা সেই ফাইলটি স্ট্রাক্টের কোনও উদাহরণে আবার পড়ে। সি ++ এ উদাহরণস্বরূপ আপনি কোনও বাইটের অ্যারের মতো কোনও অবজেক্টটি চিকিত্সা করতে পারেন এবং কেবল এটি একটি ফাইরাইটে () লিখতে পারেন, বা ফাইল থেকে ফ্রিড () করতে পারেন এবং এটিকে আবার তার বস্তু আকারে কাস্ট করতে পারেন।
আপনি যদি জাভা বা অন্য কোনও ভাষা ব্যবহার করেন তবে কাজটি সত্যই সহজ করার জন্য সিরিয়ালাইজেশন ব্যবহার করতে বেছে নিতে পারেন । এই উত্তরটির নীচে জাভা ব্যাখ্যা রয়েছে; অন্যান্য ভাষা (সি ++ এর চেয়ে উচ্চ স্তরের) অবশ্যই তাদের নিজস্ব সিরিয়ালাইজেশন লাইব্রেরি বা অন্তর্নির্মিত ফাংশন রয়েছে যা আপনার ব্যবহারের বিকল্প হিসাবে বেছে নেওয়া উচিত। সিরিয়ালাইজেশন রুটিন যতই অকার্যকর হোক না কেন, আজকাল হার্ড ড্রাইভের জায়গাটি সস্তা, বিশেষত যখন গেম স্টেটটি খুব বড় হওয়া উচিত নয় এবং এটি আপনাকে নিজের সিরিয়ালাইজেশন রুটিনগুলি রচনা এবং রক্ষণ থেকে বাধা দেয় ।
আপনার একেবারে মাইএসকিউএল ব্যবহার করা উচিত নয় (কেবলমাত্র এই পর্যালোচনার প্রথম বাক্যটি পড়ুন )। আপনার যদি সত্যিই কোনও কারণে সম্পর্কিত সম্পর্কিত ডাটাবেসের প্রয়োজন হয় তবে এসকিউএলাইট ব্যবহার করুন ; এটি একটি লাইটওয়েট ডাটাবেস সিস্টেম এবং একটি একক ডাটাবেস ফাইলে বিদ্যমান। তবে বেশিরভাগ গেমের ক্ষেত্রে, রিলেশনাল ডাটাবেসগুলি যাওয়ার উপায় নয় এবং যে সংস্থাগুলি এগুলি ব্যবহারের চেষ্টা করে তারা সাধারণত সত্যিকারের সম্পর্কিত ডেটাবেসের পরিবর্তে মূল-মান অনুসন্ধানের টেবিল হিসাবে তাদের ব্যবহার করে।
স্থানীয় ডিস্ক ফাইলগুলির যে কোনও ধরণের এনক্রিপশন কেবলমাত্র অবরুদ্ধকরণ ; যে কোনও হ্যাকার আপনার প্রোগ্রামটি ডিক্রিপ্ট হওয়ার ঠিক পরে ডেটা স্নিগ্ধ করবে। আমি ব্যক্তিগতভাবে এই ধরণের জিনিসটির বিপক্ষে, ওয়ান-প্লেয়ার গেমসের সাথে বিশেষত। আমার মতামতটি হল যে গেমের মালিকরা (গ্রাহকদের অর্থ প্রদান করছেন) তারা চাইলে গেমটি হ্যাক করার অনুমতি দেওয়া উচিত। কিছু ক্ষেত্রে এটি সম্প্রদায়টির বৃহত্তর ধারণা তৈরি করতে পারে এবং আপনার গেমের জন্য "মোডগুলি" তৈরি করা যেতে পারে যা আপনাকে আরও বেশি গ্রাহক নিয়ে আসে drive সর্বাধিক সাম্প্রতিক উদাহরণ যা মনে আসে তা হ'ল সম্প্রতি প্রকাশিত মিনিক্রাফ্ট মোডের পোর্টাল । এটি পুরো ইন্টারনেট জুড়ে গেমার নিউজ সাইটগুলিতে প্রকাশিত হয় এবং আপনি বাজি ধরতে পারেন যে এটি মিনক্রাফ্টের বিক্রয়কে বাড়িয়ে তুলেছে।
যদি কোনও কারণে আপনি যেমন আমার মতো গেম ডেভেলপমেন্টের জন্য জাভা ব্যবহার করার পক্ষে যথেষ্ট পাগল হন তবে জাভায় সিরিয়ালাইজেশনের একটি দ্রুত ব্যাখ্যা এখানে দেওয়া হয়েছে:
আপনার সমস্ত গেমের স্টেটের ডেটা এক শ্রেণিতে রাখুন, প্রয়োগ করে ক্লাসকে সিরিয়ালাইজেবল করে তুলুন
Serializable
,transient
আপনি বিশেষ ইনস্ট্যান্টিয়েটেড ভেরিয়েবলগুলি শ্রেণিতে মিশ্রিত করলে কীওয়ার্ডটি ব্যবহার করুন (ক্ষণস্থায়ী বস্তুগুলি সিরিয়ালযুক্ত নয়), এবং কেবলObjectOutputStream
ফাইলটিতে লিখতে এবং ফাইলObjectInputStream
থেকে পড়তে ব্যবহার করুন । এটাই.
[field: NonSerialized]
আপনি যদি নিজের কোড লিখছেন তবে সি ++ তে বলুন, আপনি বাইনারি ফাইলগুলি ব্যবহার করতে পারেন । বাইনারি ফাইলগুলি আপনাকে অবরুদ্ধকরণের মাধ্যমে এক ধরণের এনক্রিপশন দেয়। তবে সমস্ত ইন্টারনেটগুলিতে ডকুমেন্টেড হিসাবে এটি সুরক্ষার একটি অত্যন্ত দুর্বল রূপ।
বা, আপনি যদি কোনও মানব পাঠযোগ্য সমাধান চান তবে আপনি র্যাপিডএক্সএমএল এর মতো কিছু ব্যবহার করতে পারেন ।
আপনি যদি কোনও ধরণের কাঠামো ব্যবহার করেন তবে এটির ফাইল সমর্থন ফাংশনগুলি দেখুন। আছে HTH
বেশিরভাগ গেমস আমি দেখেছি কেবল বাইনারি ফাইলগুলি থেকে / পড়ার জন্য হাতে লেখা কোড ব্যবহার করে। প্রায়শই, অন ডিস্ক ফর্ম্যাটটি কোনও অবজেক্টের মেমরি বিন্যাসের একটি সঠিক প্রতিরূপ হবে তাই লোডিংটি কেবলমাত্র:
এটি দ্রুত, তবে এটি রক্ষণাবেক্ষণ, প্ল্যাটফর্ম-নির্দিষ্ট এবং জটিল নয় a
ইদানীং, আমি বেশ কয়েকটি গেম এসকিউএলাইট ব্যবহার করতে দেখেছি। আমি যাদের সাথে কথা বলেছি তারা এটিকে পছন্দ করে বলে মনে হচ্ছে।
সিরিয়ালাইজেশন অন্যান্য উত্তরগুলির মধ্যে কয়েকটি উল্লেখ করা হয়েছে, এবং আমি সম্মত যে এটি একটি যুক্তিসঙ্গত সমাধান। সংস্করণে থাকলেও এটি একরকম ব্যর্থ।
বলুন যে আপনি আপনার গেমটি ছেড়ে দিন এবং লোকেরা এটি খেল এবং কিছু সংরক্ষণের গেম তৈরি করে। তারপরে একটি প্যাচে আপনি একটি বাগ ঠিক করতে বা কিছু বৈশিষ্ট্য যুক্ত করতে চান। আপনি যদি কোনও সাধারণ বাইনারি সিরিয়ালাইজেশন পদ্ধতি ব্যবহার করেন এবং আপনি আপনার ক্লাসে কোনও সদস্য যুক্ত করেন গ্রাহকরা যখন আপনার প্যাচ ইনস্টল করেন তখন আপনার সিরিয়ালটি পুরানো সেভ গেমগুলির সাথে সামঞ্জস্য হতে পারে না।
সুতরাং আপনি যে কোনও পন্থাই ব্যবহার করুন না কেন, গেমটি প্রথমবার প্রকাশের আগে আপনি এই সমস্যাটি সম্পর্কে নিশ্চিত হয়েছেন তা নিশ্চিত করুন! প্যাচ প্রয়োগের পরে যদি আরম্ভ করতে হয় তবে গ্রাহকরা খুশি হবেন না।
এটি এড়ানোর এক উপায় হ'ল প্রতিটি মৌলিক ডেটা টাইপ সেভ (সংস্করণ) এবং লোড (সংস্করণ) পদ্ধতিগুলি প্রয়োগ করা যা গেমের প্রতিটি সংস্করণের জন্য কী ডেটা সংরক্ষণ এবং লোড করতে হবে তা জানতে যথেষ্ট স্মার্ট। এইভাবে আপনি আপনার সেভ গেমগুলির পশ্চাদপদ সামঞ্জস্যতা সমর্থন করতে পারেন এবং যদি কোনও ব্যবহারকারী গেমের নতুন সংস্করণ থেকে কোনও সেভ গেমটি চালানোর চেয়ে লোড করার চেষ্টা করে তবে তারা নিখুঁতভাবে ব্যর্থ হয়।
আপনি যদি আপনার স্তরগুলিকে সঞ্চয় করতে একই বিন্যাসটি ব্যবহার করতে পারেন তবে এটি একটি বোনাস।
উদাহরণস্বরূপ, পেগলের মতো একটি খেলায় প্রাথমিক বোর্ড লেআউট, বলের সংখ্যা, বর্তমান স্কোর (প্রাথমিক বোর্ডের জন্য 0) ইত্যাদি থাকতে পারে। তাহলে কোনও সংরক্ষিত গেমটি ঠিক একই বিন্যাসটি ব্যবহার করতে পারে।
আপনি যদি একই ফর্ম্যাটটি ব্যবহার করেন তবে সেভ গেম এবং স্তরের লোড কোডটি আপনার কাজকে আরও সহজ করে তুলতে পারে!
সত্যিই বড় মানচিত্র ফাইল সহ একটি গেমের জন্য, সেভ গেমটি রেফারেন্স সহ মানচিত্রের ফাইল অন্তর্ভুক্ত করতে পারে। প্রাথমিক স্তরের ফাইলগুলিও একই কাজ করতে পারে, এমনকি এটি সেই মানচিত্রে ফিরে আসাও সহজ করে তোলে যদি কোনও কারণে গল্পটির চরিত্রটি একই জায়গায় ফিরে আসে তবে কিছু এনপিসি মারা যায় এবং মৃতদেহ সব পড়ে থাকে except ওভার।