গেমটি এগিয়ে যাওয়ার সাথে সাথে আক্রমণ আক্রমণে শত্রুদের সংখ্যা এবং চ্যালেঞ্জ কীভাবে স্কেল করতে পারি?


9

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

এই মুহুর্তে আমি যেটির সাথে লড়াই করছি তা হ'ল এই গেমটি কীভাবে ক্রমান্বয়ে আরও শক্তিশালী হয়ে উঠতে পারে এবং শত্রুরা বয়ে যাওয়ার সম্ভাবনাটি মূলত অবশেষে 100% এ পৌঁছায়।

এখনও অবধি আমি নীচের মতো কিছু পেয়েছি

if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){
    spawnEnemy()
    spawnTimer = rand(); // random number between 1 and 3
}

তবে এটি দিয়ে শুরু করা খুব অভিন্ন বলে মনে হচ্ছে। এই মুহুর্তে আমি কেবল এক ধরণের শত্রু বানাচ্ছি, ধারণাটি হ'ল সময়ের সাথে সাথে আরও শক্ত শত্রুরা তৈরি হয়।

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

আমি বর্তমানে গেমটি লিখতে জাভাস্ক্রিপ্ট ব্যবহার করছি, তবে স্পষ্টতই এটি ধারণা সম্পর্কে আরও বেশি।


অতিবাহিত সময় কী? এটি কি এখনও অবধি পাস? আপনি এই শর্তটি কতবার কল করেন?
আতুরস্যাম

হাই, হ্যাঁ দুঃখিত দু: খিত সময়টি গেমটি শুরু হওয়ার পরে কেটে গেছে এবং আমার গেমস আপডেট ()
চক্রটিতে

উত্তর:


3

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

দিন threshহতে একটি অসুবিধা থ্রেশহোল্ড আপনি কি মনে করেন বেশি। আমরা গেমটি আরও শক্ত হয়ে যাওয়ার গতি কখন কমিয়ে দেবে তা সিদ্ধান্ত নিতে আমরা এটি পরে ব্যবহার করি।

rateআপনি প্রতি মিনিটে (বা রাউন্ড) আসতে চান এমন পরিমাণ দানব হোক Let

দিন GROWTH_RATEহার যা অসুবিধা বাড়ে (বর্তমানে জন্য এটি হবেন হতে 0.2)।

যাক আপনি শুরু দিয়ে দিন rate = 10। এখন প্লেয়ারটি 5দানবকে হত্যা করেছিল যাতে আপনি GROWTH_RATE * 5 = 1.0এবং নতুনের দ্বারা হার বাড়িয়ে তুলতে পারেন rate = 11

কীভাবে এমন শর্তটি প্রয়োগ করতে হবে যা rateপ্রতি মিনিটে দানব তৈরি করবে :

এর মধ্যে একটি সংখ্যা সেট ডিম টাইমার 0.5থেকে 1.0 multiplied by 60 seconds orবৃত্তাকার সময় and divided byহার . Also leave a0.25` সুযোগ কোনো দৈত্য যখন টাইমার 0 ছুঁয়েছে এবং সময় আবার এলোমেলোভাবে হয় উত্পন্ন হওয়া হয়।

যদি rateকখনও পৌঁছায় তবে threshআপনাকে ধীর করতে হবে। এখন পরিবর্তে বৃদ্ধি rateদ্বারা GROWTH_RATE, আপনি এটি দ্বারা বাড়তে পারে 1 / math.sqrt(rate)। এইভাবে শক্ততর সেটিংয়ে প্লেয়ারটি তাত্ক্ষণিকভাবে ধ্বংস হবে না।

খেলোয়াড়টি যে খেলাটি হারিয়েছে তার threshপ্রায় 80% আপনি পুনরায় সেট করতে পারেন rate

আপনি যদি দৈত্যের শক্তি এলোমেলো করতে চান তবে টাইমার সম্পর্কে সতর্ক হন। উদাহরণস্বরূপ, যদি আপনি সিদ্ধান্ত নেন যে player-score(এ পর্যন্ত নিহত দানব দ্বারা নির্ধারিত) একটি দৈত্য যে ডিম পারে সর্বোচ্চ শক্তি নির্ধারণ করতে ব্যবহার করা হবে, আপনি ভালো কিছু করতে পারেন: max-monster-strength = player-score / 1000। তারপর একটি এলোমেলো floatবা doubleমধ্যবর্তী 0.0করতে 1.0নিজে এবং সংখ্যাবৃদ্ধি ফলাফল।

float monster_power = Math.random();
monster_power *= monster_power; // Multiply result by itself
    // Makes hard monsters less frequent than weak ones
monster_power *= max_monster_strength;

এখন আপনি যখন টাইমারটি এলোমেলো করে ফেলেন আপনার সম্ভবত পাওয়ার স্তরটি অ্যাকাউন্টে নেওয়া উচিত। উদাহরণস্বরূপ আপনি পরবর্তী দানবীয় শক্তির বর্গমূল দ্বারা টাইমার ফলাফলকে বহুগুণ করতে পারেন।

spawn_timer *= math.sqrt(monster_power);

6

আপনার বর্তমান সেটআপ সহ দুটি বিকল্প রয়েছে:

  • শত্রুদের আরও শক্ত করুন
  • আরও শত্রুদের স্পান করুন (হয় প্রায়শই বা একাধিকবার)

তারপরে অতিরিক্ত বৈশিষ্ট্য সহ আরও:

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

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


ধারণাগুলির জন্য ধন্যবাদ তবে আমি মনে করি নির্বাচিত উত্তরটি আমার বেশি প্রয়োজন is তবে আপনি অবশ্যই আমাকে চিন্তার জন্য আরও বেশি খাবার দিয়েছেন এবং আমি আপনার উত্তরটি
টমিবসকে জানাতে পেরেছি

2

একটি নির্দিষ্ট সংখ্যক শত্রু (এক) ভেরিয়েবল সম্ভাবনার সাথে স্পোনের পরিবর্তে, আপনি এটিকে ঘুরিয়ে দিতে পারেন এবং স্থির সম্ভাবনার সাথে একটি পরিবর্তনশীল সংখ্যক শত্রু থাকতে পারেন।

static const double SPAWN_CHANCE_ON_DIFFICULTY_1 = 0.01;

for (int i = 0; i < currentDifficulty; i++) {
   if(Math.random() < SPAWN_CHANCE_ON_DIFFICULTY_1 ){
       spawnEnemy()
   }
}

অসুবিধা স্তর 1 এ, এতে টিকের জন্য প্রতি এক শত্রু ছড়িয়ে দেওয়ার 1% সুযোগ থাকবে।

অসুবিধা স্তর 1000 এ, এটি 1000 শত্রু পর্যন্ত স্পোন করবে, যার প্রত্যেকে 1% এর পৃথক সুযোগ থাকবে। এর অর্থ দাঁড়ায় যে গড়ে 10 টি টিক প্রতি স্প্যান করবে তবে এটি কমবেশিও হতে পারে। 10 এর থেকে খুব আলাদা একটি সংখ্যা একবারে ছড়িয়ে পড়বে এমন সম্ভাবনা রয়েছে, এমনকি সমস্ত 1000ও but তবে সম্ভাবনা কীভাবে কাজ করে তার কারণে এটি একটি খুব সম্ভাবনাময় ঘটনা (তুলনা: বড় সংখ্যাগুলির আইন )।

আপনি যখন বিভিন্ন আচরণ এবং পরিসংখ্যানের সাথে আরও বিভিন্ন শত্রু যুক্ত করেন, আপনি সম্ভবত কিছু শক্ত শত্রুদের উচ্চতর অসুবিধাগুলি নিয়ে শুরু করতে চান এবং তারপরে প্রথমে কম ঘনত্ব নিয়েও শুরু করতে পারেন। এটি করতে আপনি একটি অসুবিধা-সংশোধক যোগ করতে পারেন যা বর্তমান সমস্যা থেকে বিয়োগ করা হয়েছে। অসুবিধা-স্তরটি পৌঁছানোর আগে শত্রু সেইভাবে উত্থিত হবে না এবং তারপরেও কেবল প্রথমে কম সুযোগ নিয়ে:

for (EnemyType enemyType: allEnemyTypes) {
    for (int i = 0; i < currentDifficulty - enemyType.getDifficulty(); i++) {
        if(Math.random() < enemyType.spawnChance() ){
            spawnEnemy(enemyType);
        }
    }
}

1
এটি উদ্দীপক তবে এটি ব্যবহারের আগে এটি অনুকূলিত হওয়া উচিত। উদাহরণস্বরূপ, আপনি কতগুলি শত্রু উদয় করতে হবে তা স্থির করার জন্য একবার Math.random () ব্যবহার করতে পারেন। যদি আপনি বিপুল পরিমাণ শত্রুদের জন্য একটি ছোট সুযোগ ছেড়ে যেতে চান তবে আপনি "সাধারণ বিতরণ" আরও দক্ষতার সাথে প্রয়োগ করতে পারেন। stackoverflow.com/questions/2325472/...
AturSams
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.