簡體   English   中英

結構化類對象並定義變量

[英]Structuring Class Objects And Defining The Variables

我試圖勾勒出游戲中角色的輪廓。

然后,我想創建10個不同的角色,並比較它們在不同級別的統計信息。

我正在創建一個名為Character的類,看起來像這樣,

public class Character {

    String primaryAtribute; 

    double strength;
    double agility;
    double inteligence;
    double armor;
    double damageMultiplyer;
    int health;
    int mana;
    int range;
    int movement;
    int level;
    int damageMin;
    int damageMax;

    public Character() {

    } //constructor ends            

    private static int randomInt(int min, int max) { 
        return min + (int)(Math.random() * (max - min + 1)); 
    }

    int damageRange = randomInt(damageMin, damageMax);
    double damage = damageRange + level * damageMultiplyer;

} //class ends

然后我要像這樣創建每個角色,

public class FirstCharacter {

    String primaryAtribute = "Agility"; 

    int level = 0;

    double strength = 17 + level * 1.9;
    double agility = 26 + level * 1.9;
    double inteligence = 15 + level * 1.4;
    double armor = 0.64;
    double damageMultiplyer = 1.9;

    int health = 473;
    int mana = 195;
    int range = 625;
    int movement = 300;
    int damageMin = 44;
    int damageMax = 55;
}

我在正確的道路上嗎?

一旦創建了每個角色的類,我將如何設置我可以選擇哪個Character類?

正如其他人所建議的那樣,您可能應該只閱讀有關OOP的書。 但是,簡要地:

您提供的代碼創建了兩種完全不相關的對象類型: CharacterFirstCharacter 但是,看來您真正想要做的是創建字符類的實例,如下所示:

Character firstChar = new Character();

然后使用訪問器方法或其他方式設置角色的屬性。 例如,如果這些字段是公共的(不推薦),則可以執行以下操作:

firstChar.strength = 17;
firstChar.agility = 26;
...

級別更改后,您將需要稍后重新計算這些值,您無法以嘗試的方式為其指定公式。

祝好運!

正如我之前的評論所建議的那樣,您應該事先了解一些面向對象的原則。 我將嘗試概述其中一些可能使您走上正確軌道的方法。

接口:

interface Character {
    // define methods that must be defined across all character types
    public void getLevel();
    public void getAgility();
    ...
}

實現此接口:

public class Bob implements Character {
    private String primaryAtribute; 
    private double strength;
    private double agility;
    private double inteligence;
    private double armor;
    private double damageMultiplyer;
    private int health;
    private int mana;
    private int range;
    private int movement;
    private int level;
    private int damageMin;
    private int damageMax;

    // default constructor
    public Bob() {}

    // override as many times as you'd like
    public Bob(int level) {
        this.level = level;
    }

    // getters and setters - required to implement ALL from interface
    public void getLevel() {
        return this.level;
    }

    public void getAgility() {
        return this.agility;
    }

    public void setAgility(double agility) {
        this.agility = agility;
    }
}

從現在開始,我們可以在任何需要的地方使用Bob作為新實例: new Bob(...);

大多數成員變量始終是私有的,用於封裝。 所有這些都取決於您的用例以及您希望如何構造程序。 例如,您可以將health更改為public int health ,並且無需getHealth()函數就可以訪問此getHealth() ,可以直接調用[instance of Bob].health

我簡要介紹的主題是類變量,接口,范圍,重載,可能還有其他內容。 您需要找一本書,甚至通讀Java文檔。 他們有一些很好的例子,而且很冗長。

很抱歉遲到,交通阻塞是一場噩夢。 這是您可以做的事情的可能性:

A.建立合適的構造函數

public class Character {

    // ...

    public Character(String primaryAttribute, int level /* , ... */){
        this.primaryAttribute = primaryAttribute;
        this.level = level;
        // Write all fields with constructor variables.
    }
}

從那里可以使用:

{
    Character myfirstcharacter = new Character("Agility", 0 /* , ... */);
}

B.擴展新課程

public class FirstCharacter extends Character {
    {
        primaryAtribute = "Agility";

        level = 0;

        strength = 17 + level * 1.9;
        agility = 26 + level * 1.9;
        inteligence = 15 + level * 1.4;
        armor = 0.64;
        damageMultiplyer = 1.9;

        health = 473;
        mana = 195;
        range = 625;
        movement = 300;
        damageMin = 44;
        damageMax = 55;
    }
}

這是一個擴展您的Character類並在構造時寫入其字段的類。

{
    Character myfirstcharacter = new FirstCharacter();
    // FirstCharacter myfirstcharacter = new FirstCharacter();
}

C.用匿名類初始化

就像選項B一樣

{
    Character myfirstcharacter = new Character() {
        {
            primaryAtribute = "Agility";

            level = 0;

            strength = 17 + level * 1.9;
            agility = 26 + level * 1.9;
            inteligence = 15 + level * 1.4;
            armor = 0.64;
            damageMultiplyer = 1.9;

            health = 473;
            mana = 195;
            range = 625;
            movement = 300;
            damageMin = 44;
            damageMax = 55;
        }
    }
}

D.改用接口

請參閱山姆的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM