স্ক্রিপ্টগুলির বাইরে সত্তা কনফিগারেশন কেন রাখুন?


11

আমি প্রচুর গেমস দেখেছি যা স্ক্রিপ্ট ফাইলগুলিতে সত্তার উপাদানগুলি সংজ্ঞায়িত করে, তবে যখন তারা প্রতিটি সত্তা কনফিগার করে এবং এর উপাদানগুলি নির্দিষ্ট করে, তারা কিছু অন্যান্য ফাইল ফর্ম্যাট (যেমন এক্সএমএল) ব্যবহার করে। তারা এটা কেন করে?

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


@ ক্রিস্টোফার লারসনের উত্তর: মন্তব্য হিসাবে পোস্ট করা খুব দীর্ঘ

আমি আশঙ্কা করছি আপনি প্রশ্নের বিষয় থেকে কিছুটা বিচ্যুত হয়ে থাকতে পারেন। আপনি যে সমস্যার বর্ণনা দিচ্ছেন তা হায়ারার্কি ভিত্তিক সত্তাদের সাথে সম্পর্কিত; আমার প্রশ্নের নোট আমি উল্লেখ করেছি যে আমি উপাদান-ভিত্তিক সত্ত্বা সম্পর্কে কথা বলছিলাম।

আমি যা চাইতে চেয়েছিলাম তার একটি উদাহরণ এখানে। সত্তাটি কনফিগার করার জন্য দুটি বিকল্প উপায় রয়েছে: স্ক্রিপ্টের মাধ্যমে এবং একটি বাহ্যিক JSON ফাইলের মাধ্যমে। আমার প্রশ্ন ছিল, এত লোক কেন স্ক্রিপ্টের বাইরে সত্তাটি কনফিগার করতে পছন্দ করে?

একটি বেস সত্তা শ্রেণি:

class Entity:
    def __init__(self, name):
        pass
    def addComponent(self, comp):
        pass

স্ক্রিপ্ট পদ্ধতির:

orc = Entity('Orc')
orc.addComponent(PositionComponent(3.4, 7.9))

JSON পদ্ধতির:

{
    "name" : "Orc",
    "components":
    {
        "PositionComponent": {
            "x" : 3.4,
            "y" : 7.9
        }
    }
}

প্রযুক্তিগত এবং সাংগঠনিক এই পদ্ধতির ব্যবহারের জন্য আমি আমার কারণগুলি ইতিমধ্যে জানিয়েছি। আমি জানতে চেয়েছিলাম কেন আরও অনেকে (আমি যা দেখেছি) কেন এটি ব্যবহার করে।

উত্তর:


13

আমার মনে যে সবচেয়ে বড় সুবিধাটি আসে তা হ'ল এটি কনফিগারেশনটি কোনও নন-প্রোগ্রামার দ্বারা গেম স্ক্রিপ্টগুলির কোনও স্পর্শ না করেই সম্পাদনা / পরিচালনা করতে দেয়।


কেবল দুটি ফাইল (একটি .h এর সমকক্ষ এবং তারপরে একটি .cpp) দ্বারা এটি অর্জন করা যায়। আমি অবাক হয়েছি যে এমন কোনও ব্যক্তি যিনি কোনও অবজেক্ট তৈরি করতে চান (এই কাজটি বলার সাথে সাথে ফুলদানির মতো দেখায় না এবং কিছুই-কিছুই বাটারির মতো দেখায় না) এটিও কিছু যুক্তি যুক্ত করতে চাইবে না (যেমন ফুলদানিতে ফুল থেকে পরাগের আচ্ছাদিত ব্যক্তি যদি প্রজাপতি আকর্ষণ করে)। মানব পঠনযোগ্য দুর্দান্ত এবং এটি কেন তা সম্পর্কে আমার একটি চিন্তাভাবনা, তবে সেখানে আবার আমি সরিয়ে নিয়েছি যে জেএসওএন, লুয়া টেবিলগুলি এবং এক্সএমএল সবার অ-প্রোগ্রামারদের দ্বারা মানব পাঠযোগ্যতার একই স্তরের রয়েছে।
জেমস

2
গ্লাস্ট এক্সএমএল সহ মোডেড একটি গেম। অনেক নন-প্রোগ্রামাররা এর জন্য মোড তৈরি করে। স্ক্রিপ্টের চেয়ে এক্সএমএল / জেএসন পাওয়া অবশ্যই সহজ।
হবে

6

আমি সাধারণত এর জন্য স্ক্রিপ্টের চেয়ে একটি কনফিগার ফাইল ব্যবহার করি তা হ'ল:

নির্ভুলতার জন্য স্ক্রিপ্টটি পরীক্ষা করার একমাত্র উপায় যেমন সমস্ত মান এবং সেগুলি নির্দিষ্ট করে এটি চালানো।

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


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

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

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

2

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


1

আপনি যে প্যাটার্নটি বর্ণনা করেছেন সেটি হ'ল ডেটা চালিত সিস্টেমের প্রয়োগ।

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

একবার ডেটা বাহ্যিকভাবে সংজ্ঞায়িত হয়ে গেলে, আপনি টেক্সট ফাইলগুলি (ugh!) সম্পাদনা থেকে পরিশীলিত UI- র মধ্যে ডিজাইনাররা কীভাবে এটির সাথে ইন্টারঅ্যাক্ট করেন তাতে বিভিন্ন ধরণের সম্ভাবনা রয়েছে যা ডিজাইনারের পছন্দগুলিকে যৌক্তিক, ধারাবাহিকভাবে এবং এমনকি নির্ভুলতার জন্য যাচাইয়ের জন্যও নির্দেশ করে (থেকে গেমের ভারসাম্যের দৃষ্টিভঙ্গি) পদ্ধতি।

যদি ডেটা সরাসরি কোডে এম্বেড করা থাকে তবে যে কোনও পরিবর্তনের জন্য অ্যাপ্লিকেশনটির পুনর্নির্মাণের প্রয়োজন হবে যা বড় প্রকল্পগুলির জন্য মাঝারি সময় ব্যয় করার পাশাপাশি বাইনারিগুলি মোতায়েনের জন্য প্রয়োজনীয় সময় (যেমন নতুন বাইনারিগুলি অবশ্যই স্থাপন করা এবং ইনস্টল করতে হবে) সার্ভার)।

আসুন "orc" স্টেরোটাইপিকাল সত্তার উদাহরণ নিই ...

আমাদের orc প্রয়োগের একটি উপায় হ'ল orc এর সমস্ত বৈশিষ্ট্য এবং যুক্তির কোডের একটি সম্পূর্ণ বিবরণ লিখতে হবে।

  • maxhealth = 10
  • ক্ষতি = প্রতি সেকেন্ডে 3 ক্ষতি
  • পলাতক = সত্য
  • রানওয়েওয়েন = স্বাস্থ্য <10
  • আক্রমনাত্মক = সত্য

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

দুর্দান্ত, এখন আপনার আলাদা ক্লাস দরকার বা (সম্ভবত আমরা প্রত্যাশায় এগিয়ে ছিলাম) "ফ্যাক্টরি" তে আমরা যে মানগুলি খাওয়াইয়াছি সেগুলি "নবাগত" অঞ্চলে তৈরি করার সময় orc তৈরি করে adjust সুতরাং আমরা পরিবর্তনগুলি করি, নতুন বাইনারিগুলি মোতায়েন করি। কেবলমাত্র প্লেস্টারদের ফিরে আসতে এবং নতুন স্বাস্থ্য মানগুলি খুব কম হওয়ায় আমরা ওআরসিএসকে এক হিট মারি।

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

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


2
স্ক্রিপ্টগুলিও বেশিরভাগ সংজ্ঞা দ্বারা ডেটা হয়
উইল

1
-1। প্রশ্ন বনাম হার্ড-কোডিং সম্পর্কিত ডেটা সম্পর্কিত নয়, তবে গতিশীল স্ক্রিপ্টিং বনাম স্থির ঘোষণার বিষয়ে।

ক্রিস্টোফার আমি আমার ওপিতে একটি দীর্ঘ উত্তর যুক্ত করেছি। অনুগ্রহপূর্বক এটি ভালো করে দেখুন.
পল মানতা

0

আপনার উদাহরণে আপনি ইতিমধ্যে দুটি স্ক্রিপ্টিং ভাষা ব্যবহার করছেন। দীর্ঘমেয়াদে আমি যেভাবে বলব এটি আরও ভাল কাজ করে তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যে স্ক্রিপ্টিং ভাষাটি ব্যবহার করছেন তা একীভূত করুন। আপনার দেওয়া স্ক্রিপ্ট উদাহরণটি যদি জাসনের পরিবর্তে লুয়ায় করা হয় তবে আমি বলতে চাই যে আপনার অবজেক্টটি তৈরি করতে লুয়ার টেবিলগুলি ব্যবহার করুন। বাক্য গঠনটি আসলে একই রকম হবে এবং আপনার উপাদানগুলি প্রকাশের জন্য আপনাকে একটি ইন্টারফেস সমর্থন করতে অনুমতি দেবে।

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

এটি ভুল ধারণা নয় তবে আমার দৃষ্টিতে লোকেরা কেবল পরবর্তী পদক্ষেপে চলেছে না। যে কোনও পূর্ণ ভাষা দেখুন, সি / সি ++ / সি #, আপনি সমস্ত স্ক্রিপ্টিং ইন্টারফেসে একই জিনিস করবেন না কেন আপনি অবজেক্টগুলি এবং তাদের যুক্তিগুলি সমস্তই একটি ভাষায় সংজ্ঞায়িত করতে পারেন ... এটি প্রায় বলার মতোই যখন আপনি এটি সম্পর্কে চিন্তা করেন তখন আমাদের ক্লাসটি এক্সএমএল এবং আমাদের পদ্ধতিগুলি সংজ্ঞায়িত করা উচিত। সম্ভবত পুরানো গেমের স্ক্রিপ্টিং ভাষাগুলি যথেষ্ট শক্তিশালী ছিল না এবং এটি এখনও এটি ঠিকভাবেই ধরে রয়েছে it

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.