আপনি এখনও এটি পড়ছেন কিনা তা সম্পর্কে আমি নিশ্চিত নই তবে আমি দীর্ঘদিন ধরে এই ধরণের সমস্যার সাথে লড়াই করেছি।
আমি বিভিন্ন ধরণের প্রভাবিত সিস্টেমগুলি ডিজাইন করেছি। আমি সংক্ষেপে এখন তাদের উপর যেতে হবে। এটি আমার অভিজ্ঞতার ভিত্তিতে তৈরি। আমি উত্তরগুলি সব জানার দাবি করি না।
স্ট্যাটিক মোডিফায়ার
এই ধরণের সিস্টেম বেশিরভাগ সহজ পরিবর্তনগুলি নির্ধারণ করতে সাধারণ পূর্ণসংখ্যার উপর নির্ভর করে। উদাহরণস্বরূপ, +100 থেকে সর্বোচ্চ এইচপি, আক্রমণ করতে +10 এবং আরও অনেক কিছু। এই সিস্টেমটি পাশাপাশি পার্সেন্টগুলিও পরিচালনা করতে পারে। আপনার কেবল এটি নিশ্চিত করা দরকার যে স্ট্যাকিং নিয়ন্ত্রণের বাইরে চলে যায় না।
আমি এই ধরণের সিস্টেমের জন্য উত্পন্ন মানগুলি সত্যই কখনও ক্যাশে করি না। উদাহরণস্বরূপ, আমি যদি কোনও কিছুর সর্বাধিক স্বাস্থ্য প্রদর্শন করতে চাই, তবে আমি ঘটনাস্থলে মানটি তৈরি করব। এটি বিষয়গুলিকে ত্রুটির প্রবণ হতে বাধা দেয় এবং জড়িত প্রত্যেকের জন্য বুঝতে সহজ।
(আমি জাভাতে কাজ করি সুতরাং যা যা জাভা ভিত্তিক তা অনুসরণ করা হয় তবে এটি অন্যান্য ভাষার জন্য কিছু সংশোধন করে কাজ করা উচিত) এই সিস্টেমটি সহজেই পরিবর্তনের ধরণগুলির জন্য এনামগুলি এবং তারপরে পূর্ণসংখ্যার সাহায্যে করা যায়। শেষ ফলাফলটি এমন কোনও ধরণের সংগ্রহের মধ্যে রাখা যেতে পারে যা কী, মান অর্ডারযুক্ত জোড়া রয়েছে। এটি দ্রুত সন্ধান এবং গণনা হবে, সুতরাং অভিনয়টি খুব ভাল।
সামগ্রিকভাবে, এটি কেবল ফ্ল্যাট আউট স্ট্যাটিক সংশোধকগুলির সাথে খুব ভালভাবে কাজ করে। যদিও, সংশোধনকারীদের ব্যবহারের জন্য উপযুক্ত জায়গাগুলিতে কোড অবশ্যই উপস্থিত থাকতে হবে: getAttack, getMaxHP, getMeleeDamage, এবং আরও অনেক কিছু।
যেখানে এই পদ্ধতিটি ব্যর্থ হয় (আমার জন্য) বাফগুলির মধ্যে খুব জটিল মিথস্ক্রিয়া। কিছুটা ঘেঁটো করে ছাড়া মিথস্ক্রিয়া করার সত্যিকারের সহজ উপায় নেই। এটিতে কিছু সহজ ইন্টারঅ্যাকশন সম্ভাবনা রয়েছে। এটি করার জন্য, আপনার স্ট্যাটিক সংশোধনকারীদের যেভাবে সংরক্ষণ করবেন তা আপনাকে অবশ্যই একটি পরিবর্তন করতে হবে। কী হিসাবে এনাম ব্যবহার না করে আপনি একটি স্ট্রিং ব্যবহার করেন। এই স্ট্রিংটি হবে এনাম নাম + অতিরিক্ত ভেরিয়েবল। 10 এর মধ্যে 9 বার, অতিরিক্ত ভেরিয়েবল ব্যবহার করা হয় না, তাই আপনি এখনও এনামের নামটি কী হিসাবে ধরে রাখেন।
একটি দ্রুত উদাহরণটি করা যাক: আপনি যদি অপরিবর্তিত প্রাণীর বিরুদ্ধে ক্ষতির পরিমাণ পরিবর্তন করতে সক্ষম হতে চান তবে আপনার এর মতো অর্ডারযুক্ত জুড়ি থাকতে পারে: (ড্যাম্পিক্স ইউনডিয়েড, 10) ড্যামেজটি এনাম এবং আনডিয়ড অতিরিক্ত পরিবর্তনশীল। সুতরাং আপনার লড়াইয়ের সময় আপনি এমন কিছু করতে পারেন:
dam += attacker.getMod(Mod.DAMAGE + npc.getRaceFamily()); //in this case the race family would be undead
যাইহোক, এটি মোটামুটি ভাল কাজ করে এবং দ্রুত। তবে এটি জটিল ক্রিয়াকলাপে এবং "বিশেষ" কোড সর্বত্রই ব্যর্থ। উদাহরণস্বরূপ, "মৃত্যুতে টেলিপোর্ট করার 25% সুযোগ" এর পরিস্থিতি বিবেচনা করুন। এটি একটি "মোটামুটি" জটিল একটি। উপরের সিস্টেমটি এটি পরিচালনা করতে পারে তবে সহজে নয়, আপনার নিম্নলিখিতগুলির প্রয়োজন হিসাবে:
- প্লেয়ারটির এই মোড রয়েছে কিনা তা নির্ধারণ করুন।
- কোথাও, টেলিপোর্টেশন কার্যকর করার জন্য কিছু কোড রয়েছে, যদি সফল হয়। এই কোডের অবস্থানটি নিজেই একটি আলোচনা!
- মোড মানচিত্র থেকে সঠিক তথ্য পান। মান বলতে কী বোঝায়? এটা কি সেই ঘর যেখানে তারা টেলিপোর্ট করে? কোন খেলোয়াড়ের উপর যদি দুটি টেলিপোর্ট মোড থাকে তবে কি হবে ?? পরিমাণগুলি একসাথে যুক্ত হবে না ?????? ব্যর্থতা!
সুতরাং এটি আমার পরবর্তী একটিকে নিয়ে আসে:
আলটিমেট কমপ্লেক্স বাফ সিস্টেম
আমি একবার নিজেই একটি 2D এমএমওআরপিজি লেখার চেষ্টা করেছি। এটি একটি ভয়াবহ ভুল ছিল কিন্তু আমি অনেক কিছু শিখেছি!
আমি প্রভাবিত সিস্টেমটি 3 বার পুনরায় লিখেছি। প্রথমটি উপরেরটির চেয়ে কম শক্তিশালী প্রকরণ ব্যবহার করেছে। দ্বিতীয়টি আমি যা সম্পর্কে কথা বলতে যাচ্ছি।
এই সিস্টেমে প্রতিটি সংশোধন করার জন্য ক্লাসগুলির একটি সিরিজ ছিল, তাই জিনিসগুলি: চেঞ্জএইচপি, চেঞ্জম্যাক্সএইচপি, চেঞ্জএইচপিবিপারেন্ট, চেঞ্জম্যাক্সবাইপারসেন্ট। আমার কাছে এই মিলিয়ন মিলিয়ন ছিল - এমনকি টেলিপোর্টঅনডিথের মতো জিনিস।
আমার ক্লাসে এমন জিনিস ছিল যা নিম্নলিখিতগুলি করতে পারে:
- applyAffect
- removeAffect
- চেকফোরইন্ট্যাকশন <--- গুরুত্বপূর্ণ
প্রয়োগ করুন এবং মুছে ফেলুন তাদের ব্যাখ্যা করুন (যদিও পার্সেন্টের মতো জিনিসের জন্য, প্রভাবটি কখন প্রভাব ফেলেছিল তা নিশ্চিত করে এটি এইচপি কতটা বাড়িয়েছিল তা নজর রাখবে, এটি কেবল যুক্ত হওয়া পরিমাণটি সরিয়ে ফেলবে This এটি ছিল বগি, লওল এবং এটি সঠিক ছিল তা নিশ্চিত করতে আমাকে দীর্ঘ সময় নিয়েছে still এখনও আমি এটি সম্পর্কে ভাল অনুভূতি পাইনি))।
চেকফোরইন্টেরাকশন পদ্ধতিটি হ'ল কোডের একটি ভৌতিক জটিল জটিল অংশ। প্রতিটি প্রভাবিত (যেমন: চেঞ্জএইচপি) শ্রেণিতে, ইনপুট প্রভাবের মাধ্যমে এটি পরিবর্তন করা উচিত কিনা তা নির্ধারণ করার কোড রয়েছে। সুতরাং উদাহরণস্বরূপ, যদি আপনার মতো কিছু থাকে ...
- বাফ 1: ডিল 10 আক্রমণে আগুনের ক্ষতি
- বাফ 2: সমস্ত আগুনের ক্ষতি 25% বাড়ায়।
- বাফ 3: সমস্ত আগুনের ক্ষতি 15 দ্বারা বৃদ্ধি করে।
চেকফোরইন্টার্যাকশন পদ্ধতি এই সমস্ত প্রভাবিত করে। এটি করার জন্য, কাছাকাছি থাকা সমস্ত খেলোয়াড়ের উপর প্রতিটি প্রভাব ফেলতে হবে! এটি হ'ল কারণ প্রভাবিত হওয়ার ধরণের কারণে আমি একটি অঞ্চল জুড়ে একাধিক খেলোয়াড়ের সাথে আচরণ করেছি। এর অর্থ কোডের উপরের মতো কোনও বিশেষ বিবৃতি নেই - "যদি আমরা সবে মারা গেছি তবে আমাদের মৃত্যুতে টেলিপোর্টের জন্য পরীক্ষা করা উচিত"। এই সিস্টেমটি সঠিক সময়ে স্বয়ংক্রিয়ভাবে এটি সঠিকভাবে পরিচালনা করবে।
এই সিস্টেমটি লেখার চেষ্টা করতে আমাকে 2 মাসের মতো লেগেছিল এবং মাথা দ্বারা তৈরি হয়েছিল বেশ কয়েকবার বিস্ফোরিত। যাইহোক, এটি সত্যই শক্তিশালী ছিল এবং একটি পাগল পরিমাণে জিনিস করতে পারে - বিশেষত যখন আপনি আমার গেমের দক্ষতার জন্য নিম্নলিখিত দুটি বিষয় বিবেচনা করেন: ১. তাদের লক্ষ্যমাত্রা ছিল (যেমন: একক, স্ব, গোষ্ঠী কেবল, পিবি এই স্ব) , পিবি এই টার্গেট, লক্ষ্যযুক্ত এই, এবং আরও অনেক কিছু)। 2. ক্ষমতাগুলি তাদের উপর 1 টিরও বেশি প্রভাব ফেলতে পারে।
আমি উপরে উল্লিখিত হিসাবে, এই এই গেমের জন্য 3 য় প্রভাবিত সিস্টেম ছিল। আমি কেন এ থেকে সরে এসেছি?
এই সিস্টেমে আমার দেখা সবচেয়ে খারাপ পারফরম্যান্স ছিল! এটি চলমান প্রতিটি জিনিসের জন্য এত বেশি চেকিং করতে হওয়ায় এটি ভীষণ ধীর হয়ে গিয়েছিল। আমি এটিকে উন্নত করার চেষ্টা করেছি, তবে এটিকে ব্যর্থ বলে মনে করেছি।
সুতরাং আমরা আমার তৃতীয় সংস্করণে (এবং অন্য ধরণের বাফ সিস্টেমটিতে) আসি:
কমপ্লেক্স হ্যান্ডলারের সাথে ক্লাসকে প্রভাবিত করে
সুতরাং এটি প্রথম দুটিগুলির সংমিশ্রণটি: আমাদের একটি প্রভাব শ্রেণিতে স্ট্যাটিক ভেরিয়েবল থাকতে পারে যাতে প্রচুর কার্যকারিতা এবং অতিরিক্ত ডেটা থাকে। তারপরে হ্যান্ডলারদের কেবলমাত্র কল করুন (আমার জন্য, নির্দিষ্ট ক্রিয়াকলাপের জন্য সাবক্লাসের পরিবর্তে বেশ কয়েকটি স্থিতিশীল ইউটিলিটি পদ্ধতি।
প্রভাব শ্রেণিতে লক্ষ্যযুক্ত প্রকার, সময়কাল, ব্যবহারের সংখ্যা, কার্যকর করার সুযোগ এবং এরকম আরও অনেকগুলি সরস স্টাফ থাকবে।
পরিস্থিতিগুলি পরিচালনা করতে আমাদের এখনও বিশেষ কোড যুক্ত করতে হবে, উদাহরণস্বরূপ, মৃত্যুতে টেলিপোর্ট। আমাদের এখনও এটি যুদ্ধের কোডে ম্যানুয়ালি চেক করতে হবে এবং তারপরে এটি বিদ্যমান থাকলে আমরা প্রভাবগুলির একটি তালিকা পাই get প্রভাবের এই তালিকায় মৃত্যুর সাথে টেলিপোর্টিংয়ের সাথে মোকাবিলা করা খেলোয়াড়ের উপর বর্তমানে প্রয়োগ করা সমস্ত প্রভাব রয়েছে affects তারপরে আমরা কেবল প্রত্যেকটির দিকে নজর রেখে পরীক্ষা করব যে এটি কার্যকর হয়েছে কিনা এবং তা সফল হয়েছে কিনা (আমরা প্রথম সফলটিকে থামাতে চাই) stop এটি সফল ছিল, আমরা এটির যত্ন নেওয়ার জন্য হ্যান্ডলারকে কেবল কল করব।
ইন্টারঅ্যাকশন করা যেতে পারে, আপনি যদি চান। প্লেয়ার / ইত্যাদির নির্দিষ্ট বাফগুলির জন্য এটি কেবল কোডটি লিখতে চাই। কারণ এর ভাল পারফরম্যান্স রয়েছে (নীচে দেখুন), এটি করার জন্য এটি মোটামুটি দক্ষ হওয়া উচিত। এটির জন্য আরও জটিল হ্যান্ডলারগুলির প্রয়োজন হবে।
সুতরাং এটির প্রথম সিস্টেমটির প্রচুর পারফরম্যান্স রয়েছে এবং এখনও দ্বিতীয়টির মতো অনেক জটিলতা রয়েছে (তবে এএস তেমন নয়)। জাভাতে কমপক্ষে, বেশিরভাগ ক্ষেত্রে প্রায় প্রথমটির পারফরম্যান্স পেতে আপনি কিছু কৃপণ কাজ করতে পারেন (যেমন: এনাম ম্যাপ থাকা ( http://docs.oracle.com/javase/6/docs/api/java) /util/EnumMap.html ) কী হিসাবে এনামস এবং অ্যারেলিস্টের মান হিসাবে প্রভাব ফেলে with এটি আপনাকে দেখতে দেয় যে আপনি কীভাবে দ্রুত প্রভাব ফেলছেন [তালিকাটি 0 হবে বা মানচিত্রে এনাম থাকবে না] এবং না রয়েছে খেলোয়াড়ের প্রভাববিহীন তালিকার উপরে অকারণে ক্রমাগত পুনরাবৃত্তি করা। এই মুহুর্তে আমাদের যদি তাদের প্রয়োজন হয় তবে ওভারগুলি পুনরাবৃত্তি করতে আমি আপত্তি করি না it সমস্যা পরে গেলে আমি পরে অনুকূলিত করব)।
আমি বর্তমানে পুনরায় উদ্বোধন করছি (২০০৫ সালে শেষ হওয়া আমার এমইউডির ফাস্টআউএম কোড বেসের পরিবর্তে জাভাতে গেমটি পুনরায় লেখা) আমি সম্প্রতি আমার ব্যাফ সিস্টেমটি কীভাবে বাস্তবায়ন করতে চাই? আমি এই সিস্টেমটি ব্যবহার করতে যাচ্ছি কারণ এটি আমার আগের ব্যর্থ গেমটিতে দুর্দান্তভাবে কাজ করেছিল।
ঠিক আছে, আশা করি যে কেউ, কোথাও কোথাও এই অন্তর্দৃষ্টিগুলির কয়েকটি কার্যকর খুঁজে পাবেন।