ট্র্যাক
/
Java
Java
/
অনুশীলনী
/
উইজার্ড ও যোদ্ধা
উইজার্ড ও যোদ্ধা

উইজার্ড ও যোদ্ধা

লার্নিং অনুশীলনী

ভূমিকা

ইনহেরিটেন্স

ইনহেরিটেন্স অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP)-এর একটি মূল ধারণা। এটি একটি IS-A সম্পর্ক প্রকাশ করে। প্রোগ্রামিংয়ে এর অর্থ হুবহু ইংরেজিতে যেভাবে বোঝায় সেভাবেই: প্যারেন্ট থেকে বৈশিষ্ট্য উত্তরাধিকারসূত্রে পাওয়া (প্রোগ্রামিংয়ে বৈশিষ্ট্য সাধারণত ফাংশন ও ভ্যারিয়েবল হয়)।

নিচে দেখানো মতো একটি Animal ক্লাস ধরুন,

//Creating an Animal class with bark() as a member function.
public class Animal {

    public void bark() {
        System.out.println("This is an animal");
    }

}

Animal একটি প্যারেন্ট ক্লাস, কারণ এই ক্লাসের বৈশিষ্ট্যগুলো সাধারণভাবে সব প্রাণীতে এক্সটেন্ড করা যায়।

এখন Lion নামের একটি প্রাণী ধরুন, যার ক্লাসটি দেখতে এমন,

//Lion class is a child class of Animal.
public class Lion extends Animal {

    @Override
    public void bark() {
        System.out.println("Lion here!!");
    }

}
Note

Override অ্যানোটেশনটি বোঝায় যে সাবক্লাসের একটি মেথড তার সুপারক্লাসের একটি মেথড ওভাররাইড করছে। এটি কঠোরভাবে জরুরি নয়, তবে এটি ব্যবহার করা একটি ভালো অভ্যাস।

এখন যখনই আমরা এটা করি,

Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();

লক্ষ করুন: এখানে Animal ক্লাসটি Lion দিয়ে ইনিশিয়ালাইজ করা হচ্ছে। আউটপুট দেখতে এমন হবে

Lion here!!

OOP অনুযায়ী ইনহেরিটেন্সের অনেক ধরন আছে, তবে Java এর মধ্যে কয়েকটিই সাপোর্ট করে (মাল্টি-লেভেল ও হায়ারার্কিক্যাল)। এটি নিয়ে আরও পড়তে, অনুগ্রহ করে এটি পড়ুন।

নির্দেশনা

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

Warrior-এর জন্য নিয়মগুলি হলো:

  • একজন Warrior কখনোই ভালনারেবল নয়।
  • Warrior যে যোদ্ধাকে আক্রমণ করছে সে ভালনারেবল না হলে Warrior 6 পয়েন্ট ড্যামেজ দেয়।
  • Warrior যে যোদ্ধাকে আক্রমণ করছে সে ভালনারেবল হলে Warrior 10 পয়েন্ট ড্যামেজ দেয়।

Wizard-এর জন্য নিয়মগুলি হলো:

  • একজন Wizard আগে থেকে একটি স্পেল প্রস্তুত করতে পারে।
  • আগে থেকে স্পেল প্রস্তুত না থাকলে একজন Wizard ভালনারেবল থাকে।
  • আগে থেকে স্পেল প্রস্তুত থাকলে একজন Wizard 12 পয়েন্ট ড্যামেজ দেয়।
  • আগে থেকে স্পেল প্রস্তুত না থাকলে একজন Wizard 3 পয়েন্ট ড্যামেজ দেয়।

1. Warrior ক্লাস তৈরি করুন

Warrior নামে একটি নতুন ক্লাস তৈরি করুন। এই ক্লাসটি বিদ্যমান Fighter ক্লাস থেকে ইনহেরিট করবে।

2. Warrior-এর বর্ণনা দিন

Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর toString() মেথডটি বর্ণনা করে এটি কী ধরনের যোদ্ধা। মেথডটি "Fighter is a Warrior" স্ট্রিংটি রিটার্ন করবে।

Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"

3. Warrior-দের ইনভালনারেবল করুন

Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর isVulnerable() মেথডটি সর্বদা false রিটার্ন করে।

Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false

4. Warrior-এর ড্যামেজ পয়েন্ট হিসাব করুন

Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর getDamagePoints(Fighter) মেথডটি উপরের নিয়ম অনুযায়ী Warrior-এর দেওয়া ড্যামেজ হিসাব করে।

Warrior warrior = new Warrior();
Wizard wizard = new Wizard();

warrior.getDamagePoints(wizard);
// => 10

5. Wizard ক্লাস তৈরি করুন

Wizard নামে আরেকটি নতুন ক্লাস তৈরি করুন। এই ক্লাসটিও বিদ্যমান Fighter ক্লাস থেকে ইনহেরিট করবে।

6. Wizard-এর বর্ণনা দিন

Wizard ক্লাসটি এমনভাবে আপডেট করুন যাতে এর toString() মেথডটি বর্ণনা করে এটি কী ধরনের যোদ্ধা। মেথডটি "Fighter is a Wizard" স্ট্রিংটি রিটার্ন করবে।

Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"

7. Wizard-দের স্পেল প্রস্তুত করার সুযোগ দিন এবং স্পেল প্রস্তুত না থাকলে তাদের ভালনারেবল করে তুলুন

Wizard ক্লাসটি আপডেট করে prepareSpell() নামে একটি মেথড যোগ করুন। ক্লাসটির মনে রাখা উচিত কখন এই মেথডটি কল করা হয়, এবং নিশ্চিত করা উচিত যে এর isVulnerable() মেথডটি false রিটার্ন করে কেবল তখনই, যখন একটি স্পেল প্রস্তুত থাকে।

Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false

8. Wizard-এর ড্যামেজ পয়েন্ট হিসাব করুন

Wizard ক্লাসটি এমনভাবে আপডেট করুন যাতে এর getDamagePoints(Fighter) মেথডটি উপরের নিয়ম অনুযায়ী Wizard-এর দেওয়া ড্যামেজ হিসাব করে।

Wizard wizard = new Wizard();
Warrior warrior = new Warrior();

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Java Exercism

উইজার্ড ও যোদ্ধা শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।