An मैं आपको एक उदाहरण देने की कोशिश करूँगा कि आप अपने शस्त्रागार और अपने शस्त्रागार को कैसे डिज़ाइन कर सकते हैं।
हमारा लक्ष्य संस्थाओं को खत्म करना है, इसलिए हथियार एक इंटरफ़ेस होना चाहिए।
interface Weapon {
public int getDamage();
}
मान लें कि प्रत्येक खिलाड़ी के पास केवल एक हथियार हो सकता है, हम Strategy pattern
हथियारों को आसानी से बदलने के लिए उपयोग कर सकते हैं।
class Knife implements Weapon {
private int damage = 10;
@Override
public int getDamage() {
return this.damage;
}
}
class Sword implements Weapon {
private int damage = 40;
@Override
public int getDamage() {
return this.damage;
}
}
एक अन्य उपयोगी पैटर्न खिलाड़ी के निहत्थे होने की स्थिति में नल ऑब्जेक्ट पैटर्न होगा ।
class Weaponless implements Weapon {
private int damage = 0;
@Override
public int getDamage() {
return this.damage;
}
}
शस्त्रागार के लिए, हम कई रक्षा उपकरण पहन सकते हैं।
// Defence classes,interfaces
interface Armor {
public int defend();
}
class Defenseless implements Armor {
@Override
public int defend() {
return 0;
}
}
abstract class Armory implements Armor {
private Armor armory;
protected int defence;
public Armory() {
this(new Defenseless());
}
public Armory(Armor force) {
this.armory = force;
}
@Override
public int defend() {
return this.armory.defend() + this.defence;
}
}
// Defence implementations
class Helmet extends Armory {
{
this.defence = 30;
}
}
class Gloves extends Armory {
{
this.defence = 10;
}
}
class Boots extends Armory {
{
this.defence = 10;
}
}
डिकॉउलिंग के लिए, मैंने डिफेंडर के लिए एक इंटरफ़ेस बनाया।
interface Defender {
int getDefended();
}
और Player
वर्ग।
class Player implements Defender {
private String title;
private int health = 100;
private Weapon weapon = new Weaponless();
private List<Armor> armory = new ArrayList<Armor>(){{ new Defenseless(); }};
public Player(String name) {
this.title = name;
}
public Player() {
this("John Doe");
}
public String getName() {
return this.title;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack(Player enemy) {
System.out.println(this.getName() + " attacked " + enemy.getName());
int attack = enemy.getDefended() + enemy.getHealth()- this.weapon.getDamage();
int health = Math.min(enemy.getHealth(),attack);
System.out.println("After attack " + enemy.getName() + " health is " + health);
enemy.setHealth(health);
}
public int getHealth() {
return health;
}
private void setHealth(int health) {
/* Check for die */
this.health = health;
}
public void addArmory(Armor armor) {
this.armory.add(armor);
}
@Override
public int getDefended() {
int defence = this.armory.stream().mapToInt(armor -> armor.defend()).sum();
System.out.println(this.getName() + " defended , armory points are " + defence);
return defence;
}
}
चलो कुछ गेमप्ले जोड़ते हैं।
public class Game {
public static void main(String[] args) {
Player yannis = new Player("yannis");
Player sven = new Player("sven");
yannis.setWeapon(new Knife());
sven.setWeapon(new Sword());
sven.addArmory(new Helmet());
sven.addArmory(new Boots());
yannis.attack(sven);
sven.attack(yannis);
}
}
देखा!