আরপিজি গেমটিতে আক্রমণ শ্রেণীর নকশা কীভাবে করবেন?


37

আমি একটি ছোট আরপিজি শৈলীর খেলার পরিকল্পনার পর্যায়ে আছি।

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

প্রতিটি আক্রমণে আমি অক্ষরের বৈশিষ্ট্যগুলির উপর ভিত্তি করে এটি ক্ষতি করতে চাই, উদাহরণস্বরূপ: আক্রমণ "তরোয়াল স্ল্যাশ" অক্ষরের শক্তির মান 10 ডিএমজি + করবে।

আমি যেভাবে এটি করতে ভাবছিলাম তা হ'ল একটি বিমূর্ত আক্রমণ শ্রেণি, যার একটি বিমূর্ত আক্রমণ পদ্ধতি রয়েছে এবং প্রতিটি আক্রমণে আমি একটি শ্রেণি তৈরি করি যা আক্রমণ পদ্ধতি প্রয়োগ করে।

public class SwordSlash:Attack
{
    public void Attack(Character attacker, Character defender)
    {
        defender.DoDamage(10 + attacker.Strength);
    }
}

আমি দেখতে পাচ্ছি এটি বজায় রাখার জন্য এটি একটি দুঃস্বপ্ন তৈরি করবে।

আমি কীভাবে এই সুন্দর উপায়ে এটি সম্পাদন করতে পারি তার সম্পর্কে কারও কি ধারণা আছে?

আমি যেটিকে প্রধান সমস্যা বলে মনে করি তা হ'ল আক্রমণটির ভিত্তিতে সঠিক বৈশিষ্ট্যটি কীভাবে ইনপুট করা যায়।

উত্তর:


34

আপনার সম্ভবত এখানে ডেটা-চালিত ডিজাইনের জন্য যাওয়া উচিত।

জেনেরিক অ্যাটাক ক্লাস তৈরি করুন যার সাথে আপনি কাজ করতে চান সেই প্যারামিটারগুলি - বেস ক্ষতি, যা পরিসংখ্যানগুলি ক্ষয়কে প্রভাবিত করে, সম্ভাব্য স্থিতির প্রভাবগুলির একটি সেট ... এর মতো স্টাফ:

public enum AttackStat
{
  Strength,
  Agility,
  Intellect
  // etc.
}

public class Attack
{    
  private int baseDamage;
  private AttackStat stat;
  private double damageMultiplier;
  // ...and so on

  public void Attack(Character attacker, Character defender)
  {
    defender.DoDamage(baseDamage + attacker.GetStatValue(stat) * damageMultiplier);
  }    
}

// Put a method on Character to fetch the appropriate value given an AttackStat:
public int GetStatValue(AttackStat s)
{
  switch(s)
  {
    case AttackStat.Strength:
      return strength;
    case AttackStat.Agility:
      return agility;
    // etc.
  }
}

তারপরে, আপনার আক্রমণগুলিকে কোনও ফাইলে রাখুন, উদাহরণস্বরূপ একটি এক্সএমএল ফাইল, এবং সেখান থেকে ডেটা লোড করুন:

<Attacks>
  <Attack name="Sword Slash" damage="10" stat="Strength" multiplier="1" />
  <!-- More attacks here -->
</Attacks>

এমনকি আপনি একাধিক পরিসংখ্যান থেকে মান আঁকতে এটি প্রসারিত করতে পারেন, বলুন, এমন একটি ফায়ারবল যেখানে ক্ষতি একটি বুদ্ধি এবং ফায়ার স্ট্যাটাস উভয় থেকে গণনা করা হয়:

<Attack name="Fireball" damage="20">
  <StatModifier stat="Intellect" multiplier="0.4" />
  <StatModifier stat="Fire" multiplier="0.8" />
</Attack>

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


1
+1, তবে আমি সেই সুইচ স্টেটমেন্টটি বজায় রাখতে এড়াতে গেটস্ট্যাটভ্যালিয়াকে কোনও ধরণের লুক টেবিল দিয়ে প্রতিস্থাপন করব।

1
এই পদ্ধতির সমস্যাটি হ'ল আপনার কেবল জেনেরিক ডেটা-চালিত আক্রমণ থাকতে পারে - বিশেষ যুক্তি ব্যবহার করে এমন কিছু আপনার কাছে থাকতে পারে না। আপনি আইটেমগুলির একটি খুব জেনেরিক সেট দিয়ে শেষ করবেন (আপনি যেমন যুদ্ধযুদ্ধের সাথে উঠবেন
Iain

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

2
@ আইইন: কেবলমাত্র আরও ক্ষেত্র যুক্ত করার সাথে সাথে আপনি সমাধানও করতে পারেন কিছু ডেটা ক্ষেত্রের দ্বারা যেমন লুয়াতে এক্সপ্রেশন বা কোড ব্লক। অরথোগোনাল উপাদানগুলির ভাল ব্যবহার আরও আকর্ষণীয় ফলাফল দেয়।

1
ডেটা-চালিত হওয়ার সাধারণ ধারণার জন্য +1। আমি এক্সএমএল পরামর্শ দেওয়ার সাথে একমত নই। এখানে আরও ভাল ফর্ম্যাট রয়েছে - আপনি লুয়া এম্বেড করে থাকলে ইয়ামল, জসন বা একটি সরল .লুয়া ফাইল।
Egarcia


2

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


6
-1, এটি কেবল ডেটাচালিত নয়, এটি উপাদান-চালিতের চেয়ে গভীর স্তরক্রমও নয়। এটি সবচেয়ে খারাপ সমাধান।

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

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

2
আরপিজি গেম হওয়ার কারণে এটি প্রতিটি আইটেমটি প্রয়োগ করা সম্ভবত বেশ অবৈধ।
ভন হিল্ট

1

আমি এটিতে সত্যিই নতুন, তবে আমি যেভাবে এটি করব তা হল জেনেরিক আক্রমণ শ্রেণি তৈরি করা।

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

এই শ্রেণীর উদাহরণটি অন্য শ্রেণীর অভ্যন্তরে আবৃত হবে যাতে পরিসীমা বা অনুরূপ পরিবেশ নির্ধারণের জন্য হুক সরবরাহ করা হবে। আক্রমণটি বৈধ হলে আক্রমণ আক্রমণটি চরিত্রটিকে আক্রমণ করা হবে, যারা প্রভাব প্রয়োগ করবে who

আশা করি তা বোধগম্য হয়েছে।

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