রগুইলাইক গেমের অবস্থা সংরক্ষণ করছেন?


11

আমি এইচটিএমএল 5 এবং জিকুয়ারি ব্যবহার করে একটি বেসিক রোগেলাইক নিয়ে কাজ করছি এবং আমি একটি সমস্যার মুখোমুখি হয়েছি।

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

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


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

সম্ভবত আমি সরাসরি এই সমস্যার সমাধান করতে
পুনরায় লিখব

@ টিমহোল্ট - আপনার পরামর্শ অনুসারে সম্পাদিত
কোডমুজ

উত্তর:


8

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

অবশ্যই, যখন সঠিক সংরক্ষণ করা হবে, তখন পুরানো কমান্ড লগটি ফেলে দেওয়া যেতে পারে (যদিও আপনি এটি পুরানো গেমগুলির পুনর্নির্মাণের জন্য এটি সংরক্ষণ করতেও পারেন; যদি আপনি এটি করেন, আপনি রিয়েল টাইম রিপ্লেয়ের জন্য লগে টাইমস্ট্যাম্পগুলি অন্তর্ভুক্ত করতে চাইতে পারেন )। খেলোয়াড় খেলাটি বন্ধ বা ক্র্যাশ করার আগে যদি একই পর্যায়ে খুব বেশি দীর্ঘ থাকে তবে অতিরিক্ত সংরক্ষণের পরে (যেখানে বলুন, এন = 1000) অতিরিক্ত সংরক্ষণের পরে এন কমান্ডগুলি তৈরি করার পরে আপনি স্বয়ংক্রিয়ভাবে একটি সম্পূর্ণ সেভ করতেও পারেন may ।

যদি আপনার গেমটিতে এলোমেলো সংখ্যা জড়িত থাকে (এবং একজন রোগুইলাইক হওয়ায় এটি সম্ভবত হয়) তবে আপনারও এটি নিশ্চিত করতে হবে যে রিপ্লে চলাকালীন সেগুলি সঠিকভাবে পুনরায় তৈরি করা যায়। একটি সমাধান হ'ল রিপ্লে লগে প্রতিটি এলোমেলো সংখ্যা অন্তর্ভুক্ত করা; অন্যটি হ'ল ডিটারমিনিস্টিক সিউডোর্যান্ডম নম্বর জেনারেটর ব্যবহার করা এবং গেমটি সংরক্ষণ করা হলে বীজ সংরক্ষণ করুন।

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


1
আফগের সমস্ত আরজিএন সিউডোরানডম .. সত্যিকারের (অপরিশোধিত) এলোমেলো মান পেতে আপনার বিশেষায়িত হার্ডওয়্যার প্রয়োজন ।
bobobobo

1
@ বোবোবো সিউডোরানডম (বীজযুক্ত) আছে এবং নেট নেট প্ল্যাটফর্মে ক্রিপ্টোগ্রাফিকভাবে নিরাপদ র্যান্ডম সংখ্যা (অপরিশোধিত) আছে। এটি হার্ডওয়ার এলোমেলো হতে পারে / নাও হতে পারে তবে এটি কেবলমাত্র একটি বীজ সংরক্ষণ করতে অক্ষম হওয়ার জন্য এটি যথেষ্ট কাছে।
রঙিনিক

2

দেখুন /programming/3888902/javascript-detect-browser-close-tab-close-browser একই প্রশ্ন একটি জেনেরিক সেই থাকাতে।

মেঝে পরিবর্তনগুলিতে পুরো গেমটি সংরক্ষণ এবং প্রতিটি পদক্ষেপে ক্রমবর্ধমান ডেল্টা বিবেচনা করুন। তারপরে আপনি শেষ পদক্ষেপের পয়েন্ট অবধি গেমটি পুনরায় খেলতে পারবেন।

ধরে নেওয়া যাক এলোমেলো নম্বর জেনারেটরের কিছু ব্যবহার রয়েছে, আপনি প্রতিটি নতুন তল শুরুতে এলোমেলো সংখ্যা জেনারেটর তৈরি এবং পুনরায় বীজ করতে পারেন এবং তারপরে এটি মেঝে সহ সংরক্ষণ করতে পারেন। তারপরে আপনি লোডে পুনরায় গবেষণা করতে পারেন এবং শেষটি শেষের মতো একই ক্রমগুলির সাথে চালগুলি পুনরায় প্লে করতে সক্ষম হওয়া উচিত।


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

কোনও উদ্বেগ নেই - প্রশ্নটিতেও আমার সংশোধিত মন্তব্য দেখুন :)
টিম হল্ট

আমি প্রতিটি পদক্ষেপে বর্ধিত ডেল্টাও বলতাম ।
bobobobo

2

ক্রমবর্ধমান সঞ্চয় না করে পন্থাগুলি, তবে সম্পূর্ণ সংরক্ষণের জন্য সময় সন্ধান করা:

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