কোনও গেমটিতে আক্রমণ এবং আক্রমণ করার ধরণের জন্য প্রোগ্রামিং ডিজাইনের বিষয়ে কিছু অন্তর্দৃষ্টি খুঁজছেন


14

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

আপনারা কি প্রতিটি ইউনিট এবং কাঠামোর ধরণের নিজস্ব আক্রমনাত্মক টাইপ পেতে চান? মানে আপনি প্রতিটি ইউনিট / কাঠামোর জন্য একটি স্ক্রিপ্ট তৈরি করেন যা এটির আক্রমণ, ক্ষতি, প্রভাব, পরিসীমা, কণা, স্প্রিটস ইত্যাদির সংজ্ঞা দেয় এবং এটিকে একটি উপাদান হিসাবে সংযুক্ত করে?

অথবা একটি স্ক্রিপ্ট তৈরি করুন যা আক্রমণ সম্পর্কিত ধরণের সংজ্ঞা দেয়, এর সাথে সম্পর্কিত প্রক্ষেপণ টাইপের জন্য একটি স্ক্রিপ্ট ... এবং তারপরে সেগুলি প্রসারিত করুন এবং প্রতিটি ইউনিটের জন্য সেগুলি সংশোধন করুন, প্রতিটি স্ক্রিপ্টকে ইউনিট / কাঠামোর সাথে সংযুক্ত করুন।


আমি আশা করি আমি কিছুটা বুদ্ধি বোধ করছি, আমি এত দিন ধরে এই বিষয়টি নিয়ে চিন্তাভাবনা করছি যে আমি কোনও সমস্যা সমাধান করছি কিনা তা নিশ্চিত নই, বা কেবল নিজের সমস্যা তৈরি করে নিজেকে একটি গর্তে খনন করছি।

আপনার যখন এমন একটি গেম থাকে যা প্রচুর আক্রমণের ধরণ থাকতে পারে যা একটি নির্দিষ্ট ইউনিট / কাঠামোর মধ্যে সীমাবদ্ধ বা নাও থাকতে পারে, আপনি কীভাবে কাঠামোটি ডিজাইন করবেন যা একটি উপাদান-চালিত নকশার পরিবেশে নির্দিষ্ট ইউনিট / কাঠামোর সাথে একত্রে আবদ্ধ ?

যদি এটি যথেষ্ট পরিষ্কার না হয় তবে আমাকে জানান।

সম্পাদনা করুন: দুর্দান্ত উত্তর, আপনাকে ধন্যবাদ।

প্রসারিত প্রশ্ন:

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


1
সাধারণ গেম প্রোগ্রামিং আইডিয়াগুলির জন্য, আমি আরপিজি এফএফভি - গেমফ্যাকস.com
কোড

উত্তর:


12

ঠিক আছে, আমি সত্যই এটির জন্য বিশেষজ্ঞ নই তবে ... আমি মনে করি এটি আক্রমণগুলি কতটা জটিল ও বৈচিত্র্যময় বলে মনে করবে তার উপর নির্ভর করে। যেহেতু এটি একটি আরটিএসের অনুমান করছি যে আপনার কাছে সম্ভবত 10-50 বা এরকম বিভিন্ন ইউনিট বা স্ট্রাকচার তাদের নিজস্ব আক্রমণাত্মক ধরণের রয়েছে।

বিকল্প 1: যদি তুলনামূলকভাবে কম সংখ্যক ইউনিট থাকে যা আক্রমণগুলির সাথে কিছুটা মিল থাকে তবে আমি কেবল সমস্ত কিছু একটি বড় স্ক্রিপ্টে রেখে দেব এবং পরিদর্শকের ব্যবহৃত প্যারামিটারগুলি সংজ্ঞায়িত করব।

বিকল্প 2: যদি অন্যদিকে আপনি বিচিত্র আচরণের মাধ্যমে প্রচুর আক্রমণাত্মক ধরণের কল্পনা করে থাকেন তবে আপনি সমস্ত কিছু ভেঙে ফেলতে পারেন যাতে প্রতিটি ইউনিট এবং বিল্ডিং তাদের নিজস্ব অনন্য আক্রমণ স্ক্রিপ্ট পায়। আমি ভাবছি যে আপনি যদি এটি করেন তবে আপনি একটি "সহায়ক" স্ক্রিপ্ট তৈরি করতে চাইতে পারেন যা সাধারণভাবে ব্যবহৃত কোডগুলির সংখ্যাকে পৃথক স্ক্রিপ্টগুলির দ্বারা গ্রহণ করতে পারে def এইভাবে আপনাকে সবকিছু পুনর্লিখন করতে হবে না এবং আপনি জানেন যে এটি সমস্ত কোথায়।

বিকল্প 3: আপনার সম্ভবত যা করা উচিত নয় তা হ'ল ইউনিটগুলি ভাগ করার স্ক্রিপ্টগুলির নির্দিষ্ট গোষ্ঠীকরণ, এটি সম্ভবত আপনাকে বিভ্রান্ত করবে এবং যদি আপনাকে আক্রমণ করার জন্য প্রয়োজনীয় কোডটি 10 ​​টি ভিন্ন স্ক্রিপ্টে থাকে তবে গোলমাল হয়ে যাবে।

এখানে, আমি আপনাকে একটি ছবি আঁকছি।

এখানে চিত্র বর্ণনা লিখুন


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

কোনও সমস্যা নেই, এটি একটি নির্দিষ্ট উত্তর নয় তবে আশা করি এটি সহায়তা করবে helps
মীর

1
আপনি একটি বড় স্ক্রিপ্টে একই ধরনের আক্রমণ স্থাপন করে 1 এবং 2 সংকরকরণ করতে পারেন এবং ভিন্ন ভিন্ন আক্রমণগুলি আলাদা করতে পারেন
রাচেট ফ্রিক

4
আমি বিস্মিত # 3 এর বিরুদ্ধে সুপারিশ করা হয়? মডিউলার / জেনেরিক ক্লাসগুলির পুরো পয়েন্টটি কি তাই নয় যাতে প্রতিটি ইউনিটকে তার নিজস্ব ধরণ নির্ধারণ করতে না হয়? যদি কোনও গেমটি আরটিএস হয়, এবং অবরোধের ক্ষতি (সাধারণত "দীর্ঘ পরিসীমা") ক্ষতির ধরণ হয় তবে আপনি এটি একবার সংজ্ঞায়িত করতে এবং একাধিক আর্টিলারি-স্টাইল ইউনিট তাদের ক্ষতির ক্যালক সম্পাদন করার সময় এটি উল্লেখ করতে চাইবেন, যাতে অবরোধের ক্ষতি হলে কখনও অসম্পূর্ণ হওয়া প্রয়োজন (পুনরুদ্ধার করা), আপনি কেবল একটি ক্লাস আপডেট করতে চান?
এইচসি_আর 26'15

1
"Here, I drew you a picture."আমাকে স্মরণ করিয়ে এই
FreeAsInBeer

4

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

আপনার সমস্যার জায়গাটি হ'ল:

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

আমি নিম্নলিখিতগুলির মতো সমাধানটি গঠন করব:

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

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

// components
var bulletStrength = { strength: 50 };
var inertia = { inertia: 100 };
var target = { entityId: 0 };
var bullets = {};
var entity = entityManager.create([bulletStrength, inertia, target, bullets]);

var bulletSystem = function() {
  this.update = function(deltaTime, entityId) {
    var bulletStrength = this.getComponentForEntity('bulletStrength', entityId);
    var targetComponent = this.getComponentForEntity('target', entityId);
    // you may instead elect to have the target object contain properties for the target, rather than expose the entity id
    var target = this.getComponentForEntity('inertia', targetComponent.entityId);

    // do some calculations based on the target and the bullet strength to determine what damage to deal
    target.health -= ....;
  }
};

register(bulletSystem).for(entities.with(['bullets']));

দুঃখিত এই উত্তরটি কিছুটা 'জলযুক্ত'। আমার কেবল আধা ঘন্টার মধ্যাহ্নভোজের বিরতি রয়েছে এবং ityক্য সম্পর্কে পুরোপুরি না জেনে কিছু নিয়ে আসা শক্ত :(


3

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

সম্প্রসারিত উত্তর
এভাবেই আমি ব্লাস্টার আক্রমণ কাছে চাই এই পদ্ধতির । আমি অন্যদের নিজের জন্য জবাব দেব।

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

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


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

আপনি যখন "ব্লাস্টারএট্যাক (বা উত্পন্ন শ্রেণি) বলা হয়" তখন আমি বলব একটি ব্লাস্টারআট্যাক তৈরি হয়েছে। BlasterAttack এই নব নির্মিত উদাহরণস্বরূপ, মরীচি (অথবা বুলেট বা রশ্মি বা যাই হোক না কেন) প্রতিনিধিত্ব করে তাই এটি হয় প্রজেক্ট। ব্লাস্টারএট্যাক আইএট্যাকার এবং আইডামেজেজেবল অবজেক্টস থেকে যা প্রয়োজন তার স্ট্যাটাস অনুলিপি করে: পজিশন, আক্রমণকারী স্ট্যাটাস ইত্যাদি। ব্লাস্টারঅ্যাটাক তারপরে তার নিজস্ব অবস্থান সন্ধান করে এবং যদি প্রযোজ্য হয় তবে "যোগাযোগ" এ ক্ষতি প্রয়োগ করে। এটি তার গন্তব্য (লক্ষ্যটির পুরানো অবস্থান) মিস করে বা পৌঁছে যায় তবে আপনাকে কী করতে হবে তা বুঝতে হবে। মাটি পোড়াও? উধাও? আপনার কল
রিক্সেট

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

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

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