আমি আমার গেমের জন্য একটি সেভ / লোড সিস্টেম কীভাবে লিখব?


17

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


1
প্রকৃতপক্ষে, এটি দেখার পরে, আমার পক্ষে এই প্রকল্পের জন্য পাইথনের সাথে লেগে থাকা ভাল। আমি পান্ডা 3 ডি গেম ইঞ্জিন হিসাবে ব্যবহার করছি এবং পাইথন সংস্করণটি আরও পোলিশ। এটি, এবং আমি সম্ভবত অজগর দ্রুত বিকাশ করতে পারে। এছাড়াও, পাইথনের আচার নামে একটি অন্তর্নির্মিত সিরিয়ালাইজ ক্লাস রয়েছে, যা আমাকে কোডিংয়ের ঝামেলা বাঁচায়।
Sonicbhoc

উত্তর:


5

সিরিয়ালাইজেশন হ'ল উপায় হবে এবং স্থিতি-পরীক্ষার ক্ষেত্রে এটি করার জন্য আপনার ডিসরিয়ালাইজেশন পদ্ধতিতে যুক্তি থাকতে পারে।


আমি এটি সম্পর্কে এখানে পড়ছি ( parashift.com/c++-faq-lite/serialization.html ) এবং এটি খুব আকর্ষণীয় দেখায়। আমি সত্যই সিরিয়ালীকরণের সাথে কখনই কাজ করি নি, তাই এটি আমার জন্য একটি ভাল শিক্ষার অভিজ্ঞতা হবে। ধন্যবাদ!
Sonicbhoc

সমস্যা নেই! আমি আমার গেমের জন্য সিরিয়ালাইজেশনের পাশাপাশি (সি # তে থাকা) নিয়েও কাজ করছি। শুভকামনা!
ThatsGobbles

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

4
উন্নয়নের সময় আমি আপনাকে দৃ strongly়ভাবে একটি মানব পাঠযোগ্য বিন্যাসে ফাইলগুলি লিখতে উত্সাহিত করি। জেএসএন বা এক্সএমএলের মতো কিছু হতে পারে। আপনার প্রয়োজনীয় সমস্ত কিছু সংরক্ষণ করা হয়েছে কিনা তা দেখতে খুব সহজেই এবং ইতিমধ্যে লিখিত ফাইলটিতে ডেটা টুইঙ্ক করা আরও সহজ (পরীক্ষার জন্য বা ডিস্কে কোনও ফাইল লেখার পরে জিনিস ঠিক করতে)।
bummzack

5

আমি ডুমের উত্স কোডটি কিছুটা অধ্যয়ন করেছি। আমি আপনাকে বলব কিভাবে এটি সেখানে হয়েছে।

D_DoomMain এ সমস্ত ওপেন / সেভ / লোড ফাংশন এবং সেই সাথে অন্যান্য অনেকগুলি জিনিস রয়েছে। যেমন ফাইলের শুরুতে বলা আছে,

// DESCRIPTION:
//      DOOM main program (D_DoomMain) and game loop (D_DoomLoop),
//      plus functions to determine game mode (shareware, registered),
//      parse command line parameters, configure game parameters (turbo),
//      and call the startup functions.

মূলত, পুরো ফাইলটি M_CheckParmশুরু থেকে শেষ পর্যন্ত সম্পূর্ণরূপে পূর্ণ । এটিই ডি_ডুমলুপ নিয়ে থাকে। এটি একটি বিশাল লুপ (1000-2000 লাইনের মতো কিছু)।

যেহেতু আপনার প্রশ্নটি 'আমি কীভাবে লিখব?' আমি কেবল কোডের কিছু বিট পেস্ট করতে যাচ্ছি যা ডি_ডমমাইন থেকে গেমস্যাভগুলি উল্লেখ করে:

লুপের একেবারে শেষে যেখানে স্টাফগুলি ব্যবহৃত হয় তা এখানে বিবৃতি।

   p = M_CheckParm ("-loadgame");
   if (p && p < myargc-1)
   {
       if (M_CheckParm("-cdrom"))
           sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
       else
           sprintf(file, SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
       G_LoadGame (file);
   }


   if ( gameaction != ga_loadgame )
   {
       if (autostart || netgame)
           G_InitNew (startskill, startepisode, startmap);
       else
           D_StartTitle ();                // start up intro loop

   }

   D_DoomLoop ();  // never returns

স্ট্রিংগুলি অ্যাক্সেস করে এমন ফাংশনটি এখানে দেওয়া হয়েছে যা আপনি কোডে ছড়িয়ে ছিটিয়ে দেখতে পান:

void M_ReadSaveStrings(void)
{
   int             handle;
   int             count;
   int             i;
   char    name[256];

   for (i = 0;i < load_end;i++)
   {
       if (M_CheckParm("-cdrom"))
           sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",i);
       else
           sprintf(name,SAVEGAMENAME"%d.dsg",i);

       handle = open (name, O_RDONLY | 0, 0666);
       if (handle == -1)
       {
           strcpy(&savegamestrings[i][0],EMPTYSTRING);
           LoadMenu[i].status = 0;
           continue;
       }
       count = read (handle, &savegamestrings[i], SAVESTRINGSIZE);
       close (handle);
       LoadMenu[i].status = 1;
   }
}

আপনার কাছে p_savegame.c নামে একটি ফাইল রয়েছে যা স্টাফ সহ ব্যবহারকারীর সাথে সম্পর্কিত সমস্ত তথ্য সংরক্ষণ করবে (কোন অস্ত্র আপনি পেয়েছেন, আপনি কোন স্তরে রয়েছেন ইত্যাদি)।

এবং পরিশেষে আপনি ফাইলটি পেয়ে গেছেন যা গেমের দৃশ্যে সেভগেম ডেটা লোড করে, যুক্তিযুক্তভাবে সবচেয়ে জটিল, কারণ এটি অন্য সমস্ত কিছু লোড করে। একে বলা হয় p_setup.c, এবং একই ডিরেক্টরিতে অবস্থিত।

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


3

কর্পোরেট ফায়ারওয়ালের কারণে আমি সেই লিঙ্কগুলিতে উঠতে পারিনি। দুঃখিত।
Sonicbhoc

4
যদি আপনার কর্পোরেশন আপনাকে স্টাফগুলি পড়তে বাধা দেয় তবে আপনার কাজ করা দরকার তারা সেরা বোকা।
o0 '

2
ঠিক আছে, এটি এখনও আমার কাজ নয়। : পি (এবং সম্ভবত "কর্পোরেট" সবচেয়ে ভাল শব্দ ছিল না ... এটি আমার স্কুলে ফায়ারওয়াল)
Sonicbhoc

-1

I +1: সেভ গেমসের কাঠামো তৈরি করতে XML / JSON ব্যবহার করার পরামর্শটি সম্পাদনা করুন। এইভাবে আপনি সংরক্ষণকে "মেঘ" ভিত্তিক করতে খুব প্রস্তুত। বা কমপক্ষে, আপনার ভবিষ্যতে প্রকল্পগুলির জন্য এমন কাঠামো ব্যবহার করতে পারেন যা ওয়েবে জড়িত। যতক্ষণ না ফাইলগুলি এমনভাবে সংরক্ষণ করা হয় না যে পড়তে খুব সহজ হয় সেগুলি আপনাকে আপনার প্রচুর সুবিধা দিতে হবে। মেট্রিকের মতো! হুররে


1
ক্লাউড স্টোরেজটির অর্থ হল আপনি অনলাইনে সংরক্ষণ করা সঞ্চয় করছেন। যে কোনও ফাইল ফর্ম্যাট দিয়ে আপনি এটি করতে পারেন।

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

যদি আপনার গেমটি তার নিজস্ব সেভ ফাইল ফর্ম্যাটের সাথে সামঞ্জস্য না করে, আপনি "স্থানান্তরের স্বাচ্ছন্দ্য" থেকে অনেক বড় সমস্যা পেয়েছেন
গুরুগাদুর্গেন

এক্সএমএল এবং জেএসওন সেভগুলি (= প্রতারণা) দিয়ে টেম্পার করা খুব সহজ হবে। একজন বিকাশকারী হিসাবে, আপনি এটির সাথে ভাল বা নাও থাকতে পারেন।
ট্রাং ওউল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.