আমি কীভাবে জাভা গেমের মতো আমার আরপিজিতে আইটেমগুলি সংজ্ঞায়িত করতে পারি?


21

আমি জাভাতে কোনও আরপিজি টাইপ গেমটিতে কাজ করছি তবে প্রতিটি আইটেমের জন্য আলাদা ক্লাস তৈরি না করে আমার কাছে কীভাবে আইটেম থাকতে পারে যা বিভিন্ন জিনিস করতে পারে তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।

উদাহরণ হিসাবে, আমি কীভাবে এমন একটি অক্ষ তৈরি করব যা গাছ কাটা এবং দানবদের আক্রমণ করতে পারে?

আমি যদি চপিং বা অস্ত্রের ক্লাসটি প্রসারিত করি তবে আমি অন্য শ্রেণিকে প্রসারিত করতে পারি না।

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

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

উত্তর:


15

একাধিক ভূমিকা সম্পাদনের জন্য আইটেমের দৃষ্টান্তগুলি কীভাবে গঠন করা যায় তার জন্য গ্রেগরি ওয়েয়ারের উত্তর আমার প্রিয়।

একটি ফাইল থেকে লোড করতে:

প্রথমে, YAML ব্যবহার করুন। ওয়াইএএমএল একটি বৈশিষ্ট্যযুক্ত ডেটা বর্ণনার ভাষা; এটি তুলনামূলকভাবে দ্রুত পার্স করা যায়, মানুষ পড়া এবং সম্পাদনা করতে পারে, বাইনারি ডেটা সমর্থন করে এবং জাভা সহ বেশিরভাগ প্রোগ্রামিং ভাষার জন্য লাইব্রেরি বিদ্যমান। এটি "আমি কীভাবে ফাইলগুলি থেকে বস্তুগুলিতে ডেটা পাব?"

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

একক অবজেক্টে ক্রস-ইনস্ট্যান্স ডেটা ভাগ করে, আপনি প্রচুর স্মৃতি সংরক্ষণ করেন এবং অবিরাম গেমের স্টেট ছাড়াই আইটেমগুলি আপডেট করা সহজ করেন (গেমস বা প্লেয়ার ডাটাবেস সংরক্ষণ করুন)।

সুতরাং আপনার শ্রেণি কাঠামোটি দেখতে এমন কিছু দেখাচ্ছে:

  • শ্রেণি আইটেম - আইটেম প্রতি এক উদাহরণ
    • মালিকানা - একটি অস্ত্র উদাহরণ
    • মালিকানা - একটি সরঞ্জাম উদাহরণ
    • একটি কাস্টম নাম, ইত্যাদি আছে
  • শ্রেণি অস্ত্র - প্রতিটি আইটেমের জন্য একটি উদাহরণ (পর্যন্ত)
    • একটি আইটেম কম্পোনেন্ট
    • রেফারেন্স-ওয়েপনডেফ
    • একটি বোনাস জাদু স্তর, ইত্যাদি
  • বর্গ সরঞ্জাম - (প্রতিটি জিনিস) প্রতি এক উদাহরণ (আপ))
    • একটি আইটেম কম্পোনেন্ট
    • সরঞ্জামদফত উল্লেখ করে
    • একটি স্থায়িত্ব আছে, ইত্যাদি।
  • WeaponDef বর্গ - অস্ত্র প্রতি ধরণের এক উদাহরণ
    • একটি ফাইল থেকে পড়ুন, ক্ষেত্রগুলি ধ্রুবক হওয়া উচিত।
    • একটি বেস ক্ষতি পরিমাণ, 1 বা 2 হাত, ইত্যাদি আছে
  • ক্লাস টুলডেফ - প্রতিটি ধরণের সরঞ্জামের একটি উদাহরণ
    • একটি ফাইল থেকে পড়ুন, ক্ষেত্রগুলি ধ্রুবক হওয়া উচিত।
    • এর একটি বেস স্থায়িত্ব আছে, উপকরণগুলি এটি ভেঙে দিতে পারে ইত্যাদি etc.

18

কম্পোনেন্ট (যৌগিক নয়) নকশার প্যাটার্নটি এই উদ্দেশ্যে দুর্দান্ত: http://gameprogrammingpatterns.com/component.html

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

একটি ফাইল থেকে লোড করা অবশ্যই একটি পৃথক অনুশীলন।


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

6
@ কোডেক্সআরকানাম: "আপনার এক্স টাইপটি আইচোপার এবং আইওয়াইপন বাস্তবায়ন করতে পারে তবে এর জন্য উপাদানটির আচরণটি প্রকাশ করতে পারে" - এর মূল বক্তব্য কী? এটি কেবল আপনার শ্রেণীর শ্রেণিবিন্যাস ফুটিয়ে তোলে। উপাদান বিন্যাসের বিষয়টি হ'ল আপনার একটি এক্স বর্গ বা আইসিহ্পার ইন্টারফেস বা আইওয়াইপন ইন্টারফেসের দরকার নেই, কেবল কংক্রিট চপার এবং ওয়েপেন উপাদান এবং একটি শীর্ষ স্তরের আইটেম।

আমি বর্তমানে আমার গেম আইটেমগুলির জন্য একটি উপাদান সিস্টেমে কাজ করছি এবং প্যাটার্নটি কীভাবে ব্যবহৃত হয় সে সম্পর্কে কেবলমাত্র একটি বড় অভিযোগ রয়েছে। অস্ত্র, পোশাক এবং উপভোক্তার উপাদানগুলি দেওয়া, কোনও আইটেম তাত্ত্বিকভাবে আইটেমগুলির ক্ষেত্রে "দুর্নীতিগ্রস্ত" হতে পারে যা অস্ত্র এবং পোশাক উভয়ই হতে পারে না, বা এমন একটি পোশাকও যা গ্রহণযোগ্য। যৌক্তিকভাবে কোনও আইটেম কেবল একটি "মেজর উপাদান" হতে পারে তবে উপাদানগুলিকে সীমাবদ্ধ করে আপনি সমস্ত উপাদান একসাথে ভেঙে ফেলছেন। সুতরাং, অন্যথায় আশ্চর্যজনক সিস্টেমের সাথে মৌলিক ত্রুটিগুলির মধ্যে একটি
ক্রিথিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.