আরপিজি বোর্ড গেমের নিয়মের জন্য জেনেরিক নিয়ম পার্সার - এটি কীভাবে করবেন?


19

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

উদাহরণ স্বরূপ:

প্লেয়ারের স্ট্রিট 18 রয়েছে, তার বর্তমানে সজ্জিত অস্ত্র তাকে +1 এসআরএসের বোনাস দেয় তবে ডেক্স -1 এর একটি মালাস দেয়। তিনি একটি দানব সত্তা আক্রমণ এবং গেম যুক্তি এখন নিয়ম বা ক্রিয়াকলাপ একটি সেট চালানোর প্রয়োজন:

খেলোয়াড় পাশা ঘূর্ণায়িত করে, যদি সে উদাহরণস্বরূপ 8 বা তার বেশি পায় (বেস আক্রমণ আক্রমণটি যে মানটি তাকে পাস করতে হবে তার একটি বেস বৈশিষ্ট্য!) তার আক্রমণটি সফল success আক্রমণটি যদি তার বর্মের মধ্য দিয়ে যায় তবে দানবটি গণনা করতে পাশ্বকে ঘুরিয়ে দেয়। যদি হ্যাঁ ক্ষতি না হয় তবে আক্রমণটি অবরুদ্ধ ছিল।

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

আপনি যদি ডিঙ্গিওন এবং ড্রাগনগুলির মতো আরপিজি সিস্টেমগুলির সাথে পরিচিত হন তবে আপনি কী করবেন তা আপনি জানতে পারবেন।

আমার ইস্যুটি এখন এটি কীভাবে সবচেয়ে ভালভাবে তৈরি করা যায় তা সম্পর্কে আমার কোনও ধারণা নেই। আমি চাই যে লোকেরা যে কোনও ধরণের নিয়ম সেট করতে সক্ষম হবে এবং পরে কেবল কোনও খেলোয়াড় এবং একটি দানব বাছাই করে কোনও ক্রিয়া চালাতে পারে (আক্রমণ করার মতো নিয়মের সেট)।

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

আমি সম্পাদনা করুন:

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

আমি এ পর্যন্ত যা চেষ্টা করেছি: ভুল আর্কিটেকচার তৈরিতে সময় নষ্ট না করে কেবল একটি ধারণার কথা ভাবছি। এখনও অবধি আমার ধারণা রয়েছে যে কোনও ব্যবহারকারীর পছন্দমতো যতগুলি বৈশিষ্ট্য তৈরি করতে দেওয়া হবে এবং তারপরে যেকোন ধরণের সত্তাকে তারা যতগুলি বৈশিষ্ট্য দেবে ততগুলি প্রদান করতে পারে। একটি সত্তা খেলোয়াড়, দৈত্য, একটি আইটেম, যে কোনও কিছু হতে পারে। এখন কোনও কিছু গণনা করার সময় নিয়ম পার্সারের কাছে ডেটা উপলব্ধ করা হয় যাতে নিয়ম পার্সার যদি প্লেয়ার.ব্যাস_ট্যাক + ডাইস (1x6)> মনস্টার.আর্মার_চেক করেন তবে মনস্টার.হেলথ - 1; এখানে প্রশ্নটি কীভাবে পার্সার তৈরি করবেন সে সম্পর্কে।

দ্বিতীয় সম্পাদনা করুন:

এখানে চমত্কার মৌলিক মানের একটি উদাহরণ তবে এটি সঠিকভাবে গণনা করার জন্য অ্যাকাউন্টে নিতে প্রচুর বিভিন্ন জিনিস এবং ভেরিয়েবল রয়েছে:

বেস অ্যাটাক বোনাস (টার্ম) আপনার বেস অ্যাটাক বোনাস (সাধারণত ডি 20 সম্প্রদায় বিএবি হিসাবে পরিচিত) অক্ষর শ্রেণি এবং স্তর থেকে প্রাপ্ত একটি আক্রমণ রোল বোনাস। বেস অ্যাটাকের বোনাসগুলি বিভিন্ন চরিত্রের শ্রেণীর জন্য বিভিন্ন হারে বৃদ্ধি পায়। একটি চরিত্র যখন প্রতি তার আক্রমণ আক্রমণ বোনাস +6 পৌঁছে, একটি তৃতীয়াংশ +11 বা উচ্চতর বেস আক্রমণ বোনাস, এবং চতুর্থ +16 বা উচ্চতর বেস আক্রমণ বোনাস সঙ্গে একটি রাউন্ড প্রতি দ্বিতীয় আক্রমণ অর্জন করে। বেস অ্যাটাক বোনাসগুলি বিভিন্ন ক্লাস থেকে প্রাপ্ত, যেমন একটি মাল্টিক্লাস চরিত্রের জন্য, স্ট্যাক। একটি চরিত্রের বেস অ্যাটাকের বোনাস +16 এ পৌঁছানোর পরে আর কোনও আক্রমণ দেয় না, +0 এর চেয়ে কম হতে পারে না এবং অক্ষরের স্তর 20 তম পৌঁছানোর পরে শ্রেণীর স্তরের কারণে বৃদ্ধি পায় না not নির্দিষ্ট কৃতিত্বের জন্য একটি ন্যূনতম বেস অ্যাটাক বোনাস প্রয়োজন।

আপনি এখানে এটি পড়তে পারেন http://www.dandwiki.com/wiki/Base_Attack_Bonus_( টারম) সহ ক্লাস এবং ফাইটগুলির লিঙ্কগুলি যা বেস আক্রমণটির জন্য প্রয়োজনীয় মানগুলি গণনা করার জন্য আবার তাদের নিজস্ব নিয়ম রয়েছে।

আমি ভাবতে শুরু করেছিলাম যে এটিকে যতটা সম্ভব জেনেরিক রাখা ভাল নিয়মের পার্সার করা বেশ শক্ত করে তুলবে।



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

1
@jk। সেই নিবন্ধটি আমাকে কমান্ড লাইন প্রোগ্রামের যুক্তি পার্সিংয়ের জন্য পছন্দ করে এমন একটি প্যাটার্নের কথা মনে করিয়ে দেয়, এর একটি অভিধান ব্যবহার করে Funcযা অভিধানের কী হিসাবে আর্গুমেন্টের ভিত্তিতে প্রোগ্রামের অবস্থাটি আরম্ভ করে। অবাক হয়ে আমি ইগেজের কাছ থেকে এই পোস্টটি আগে কখনও পাইনি, খুব শীতল, এটি দেখানোর জন্য ধন্যবাদ।
জিমি হোফা

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

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

উত্তর:


9

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

প্রথমে, আদিম ক্রিয়াকলাপগুলির একটি সেট সন্ধান করুন যার মাধ্যমে অন্যান্য ক্রিয়াকলাপগুলি প্রয়োগ করা যেতে পারে। উদাহরণ স্বরূপ:

  • প্লেয়ার, একটি এনপিসি, বা একটি দৈত্যের সম্পত্তি পান বা সেট করুন

  • ডাই রোলের ফলাফল পান

  • পাটিগণিতের এক্সপ্রেশন মূল্যায়ন করুন

  • শর্তসাপেক্ষ এক্সপ্রেশন মূল্যায়ন করুন

  • শর্তসাপেক্ষ শাখা সঞ্চালন

এমন একটি সিনট্যাক্স ডিজাইন করুন যা আপনার আদিমগুলিকে প্রকাশ করে। আপনি কীভাবে সংখ্যা উপস্থাপন করবেন? একটি বিবৃতি দেখতে কেমন? বিবৃতি সেমিকোলন-সমাপ্ত হয়? NEWLINE-সমাপ্ত? ব্লক কাঠামো আছে? আপনি এটি কীভাবে নির্দেশ করবেন: প্রতীক বা প্রসারণের মাধ্যমে? ভেরিয়েবল আছে? আইনী পরিবর্তনশীল নামটি কী গঠন করে? ভেরিয়েবলগুলি কি পরিবর্তনযোগ্য? আপনি কীভাবে অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করবেন? বস্তুগুলি কি প্রথম শ্রেণীর? এগুলি কি আপনি নিজে তৈরি করতে পারবেন?

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

এমন একটি দোভাষী লিখুন যা আপনার এএসটি মূল্যায়ন করে। এটি কেবল গাছের প্রতিটি নোডটি পড়তে পারে এবং যা বলে তা করতে পারে: a = bহয়ে new Assignment("a", "b")যায় vars["a"] = vars["b"];। যদি এটি আপনার জীবনকে সহজ করে তোলে তবে মূল্যায়নের আগে এএসটিকে একটি সহজ আকারে রূপান্তর করুন।

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

ATK = D20
if ATK >= player.ATK
    DEF = D20
    if DEF < monster.DEF
        monster.HP -= ATK
        if monster.HP < 0
            monster.ALIVE = 0
        end
    end
end

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


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

1
@ জিমি হোফা: যথেষ্ট ফর্সা। ভাষা-ভিত্তিক সমাধানগুলি বিশেষত গেমসের জন্য পৌঁছানো কেবল আমার প্রকৃতির মধ্যে। আমি সম্ভবত ছোট এবং কার্যক্ষম কিছু তৈরিতে অসুবিধা হ্রাস করব কারণ আমি এটি বহুবার করেছি। তবুও, এটি এক্ষেত্রে উপযুক্ত সুপারিশের মতো বলে মনে হচ্ছে।
জন পূর্ব

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

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

1
@ বারজুম: আপনার ইন্টারফেসটি লুয়া স্ক্রিপ্টগুলি উত্পন্ন করার বিষয়ে কী?
টিএমএন

3

আমি প্রতিটি ক্রিয়াকলাপের বিভিন্ন "পর্যায়" নির্ধারণ করে শুরু করব।

উদাহরণস্বরূপ, একটি যুদ্ধের পর্যায়ে জড়িত থাকতে পারে:

GetPlayerCombatStats();
GetEnemyCombatStats();
GetDiceRoll();
CalculateDamage();

এই পদ্ধতির প্রতিটিটিতে কিছু সাধারণ জেনেরিক অবজেক্টগুলিতে অ্যাক্সেস থাকতে পারে যেমন এবং Playerএবং এর মতো এবং Monsterকিছু সংখ্যক জেনেরিক চেকগুলি সম্পাদন করবে যা অন্যান্য সত্তাগুলি মানগুলি সংশোধন করতে ব্যবহার করতে পারে।

উদাহরণস্বরূপ, আপনার কাছে এমন কিছু থাকতে পারে যা দেখতে আপনার GetPlayerCombatStats()পদ্ধতিতে অন্তর্ভুক্ত রয়েছে :

GetPlayerCombatStats()
{
    Stats tempStats = player.BaseStats;

    player.GetCombatStats(player, monster, tempStats);

    foreach(var item in Player.EquippedItems)
        item.GetCombatStats(player, monster, tempStats);
}

এটি আপনাকে কোনও নির্দিষ্ট নিয়ম যেমন কোনও প্লেয়ার ক্লাস, দানব, বা সরঞ্জামের টুকরো সহ সহজেই কোনও সত্তা যুক্ত করতে দেয়।

অন্য উদাহরণ হিসাবে, ধরুন আপনি স্কুইড ব্যতীত সমস্ত কিছুকে মেরে ফেলার একটি তরোয়াল চেয়েছিলেন , যা আপনাকে সমস্ত কিছুর বিপরীতে +4 দেয়, যদি না সেই জিনিসটির তাঁবু না থাকে, সেক্ষেত্রে আপনাকে যুদ্ধে আপনার তরোয়াল ফেলে দিতে হবে এবং একটি -10 পেতে হবে।

এই তরোয়ালটির জন্য আপনার সরঞ্জাম শ্রেণীর GetCombatStatsমধ্যে এটির মতো দেখতে কিছু থাকতে পারে :

GetCombatStats(Player player, Monster monster, Stats tmpStats)
{
    if (monster.Type == MonsterTypes.Tentacled)
    {
        player.Equipment.Drop(this);
        tmpStats.Attack -= 10;
    }
    else
    {
        tmpStats.Attack += 4;
    }
}

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

কী জিনিসগুলি মূল্যবোধগুলি পরিবর্তন করতে পারে এবং কোন উপাদানগুলি এই মানগুলিকে প্রভাবিত করে তা হ'ল মূল বিষয়গুলি। এটি একবার হয়ে গেলে, আপনার স্বতন্ত্র উপাদানগুলি তৈরি করা সহজ হওয়া উচিত :)


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

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

@ বারজুম হ্যাঁ এর অর্থ এই নিয়মগুলি কোড দ্বারা সংজ্ঞায়িত করা হবে তবে এটি কোড থেকে এটিকে খুব এক্সটেনসিবল করে তোলে। উদাহরণস্বরূপ, আপনি যদি নতুন ক্লাসের ধরণ, বা একটি নতুন উপকরণের টুকরো বা একটি নতুন মনস্টার প্রকার যুক্ত করতে চান, তবে আপনাকে কেবল সেই সত্তার জন্য শ্রেণীর অবজেক্টগুলি তৈরি করতে হবে এবং আপনার যুক্তিতে আপনার ক্লাসে উপযুক্ত পদ্ধতি পূরণ করতে হবে।
রাচেল

@ বারজুম আমি কেবল আপনার প্রশ্নের সম্পাদনাটি পড়েছি। আপনি শুধুমাত্র UI 'তে ব্যবহারের জন্য একটি নিয়ম ইঞ্জিন চান, আমি সত্ত্বা (এর একটি পুল কথা বিবেচনা করবে Player, Monster, Dice, ইত্যাদি), এবং একটি "সমীকরণ" এলাকার মধ্যে এমন কিছু বিষয় যা ড্র্যাগ / ড্রপ সত্তা টুকরা করার জন্য ব্যবহারকারীদের অনুমতি দেয় স্থাপনের, এর প্যারামিটার পূরণ সত্তা (যেমন পূরণ করা player.base_attack), এবং টুকরাগুলি কীভাবে একসাথে ফিট হয় সে সম্পর্কে সাধারণ অপারেটরগুলি নির্দিষ্ট করে। আমার ব্লগে আমার কাছে এমন একটি পোস্ট আছে যা আপনি ব্যবহার করতে সক্ষম হতে পারে এমন একটি গাণিতিক সমীকরণকে পার্স করে
রাচেল

@ রাচেল আপনি যা বর্ণনা করেছেন তা মৃত সহজ ওওপি O এই বিষয়গুলি থাকা এবং তাদের সাথে কাজ করা সহজ অংশ, আমি ডেটাবেস থেকে ডেটার উপর ভিত্তি করে এগুলি ফ্লাইতে তৈরি করতে পারি। আপনার পদ্ধতির সমস্যাটি হ'ল getEnemyCombatStats () এর মতো হার্ডকর্ডযুক্ত নিয়ম যা এই পদ্ধতিটি যাই হোক না কেন একটি ইউআইয়ের মাধ্যমে কোথাও সংজ্ঞায়িত করা এবং একটি ডিবিতে সংরক্ষণ করা দরকার। আপনার নিবন্ধটি ith github.com/bobtheCO/Ruler বা ith github.com/Trismegiste/PhpRules এর মতো বলে মনে হচ্ছে ।
বুর্জুম

0

আমি ম্যাপটোলে বিশেষভাবে রাম্বলের চতুর্থ এড কাঠামোটি দেখে নেব । আপনি যে বিষয়ে কথা বলছেন সেট আপ করার জন্য এটি আমি দেখেছি সেরা সিস্টেম। দুর্ভাগ্যক্রমে সেরাটি এখনও ভয়াবহ ক্রুফটি। তাদের "ম্যাক্রো" সিস্টেমটি রয়েছে ... আসুন আমরা ... সময়ের সাথে বিবর্তিত হয়ে উঠি।

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

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


0

আমি মনে করি যে আপনার সমস্যার জায়গাগুলিতে কী জিনিসগুলি হতে চলেছে সে সম্পর্কে আপনাকে বিমূর্তভাবে চিন্তা করতে সক্ষম হতে হবে, কিছুটা মডেল নিয়ে আসুন এবং তারপরে আপনার ডিএসএলকে বেস করুন।

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

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

একটি রুট হ'ল বাহ্যিক ডিএসএল বলা হয় এমনটি সংজ্ঞায়িত করা হয় যেখানে আপনি আপনার বাক্য গঠনটি সংজ্ঞায়িত করেন এবং এন্ট্রারের মতো একটি সরঞ্জাম ব্যবহার করে এটি পার্স এবং আপনার যুক্তি কল করতে পারেন। আরেকটি রুট হ'ল আপনার ডিএসএল সংজ্ঞায়িত করার জন্য প্রোগ্রামিং ভাষায় উপস্থিত সুবিধাগুলি ব্যবহার করা। গ্রোভি এবং রুবির মতো ভাষা এই স্থানটিতে বিশেষত ভাল।

আপনার কার্যকর হওয়া গেম মডেলটির সাথে আপনার ডিসপ্লে লজিকটি মিশ্রণ করা উচিত একটি ফাঁদ avoid আমি আপনার মডেলটির সাথে আপনার ডিসপ্লে কোডটি মিশ্রিত না করে ডিসপ্লেটি আপনার মডেলটি পড়তে এবং যথাযথভাবে প্রদর্শন করার জন্য ভোট দেব।

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