簡體   English   中英

如何編寫基於用戶輸入的構造函數?

[英]how can i write a user input based constructor?

我想要多個類,並希望根據用戶輸入構造一個類。 具體來說,我正在編寫文字冒險游戲,並為玩家可以使用的每種“玩家類別”提供了一個類別。 我的三個班級擴展了父級“統計”班級。

這是我的代碼的一部分:(我使用打印構造函數來提高書寫效率)

switch (answer) {
        case 1:
            {
                adv.print("you are a mage");
                mainCharacterMage mainCharacter = new mainCharacterMage();
                break;
            }
        case 2:
            {
                adv.print("you are an assasin");
                mainCharacterAssasin mainCharacter = new mainCharacterAssasin();
                break;
            }
        case 3:
            {
                adv.print("you are a fighter");
                mainCharacterFighter mainCharacter = new mainCharacterFighter();
                break;
            }
        default:
            adv.print("error wrong answer");
            break;
    }
    String printThis = Integer.toString(mainCharacter.getHealth());
    adv.print("your health is "+printThis);

我假設這三個子類的父類稱為MainCharacter

首先, mainCharacter必須為MainCharacter類型,除非您願意在每次要使用mainCharacter時進行instanceof檢查和強制轉換。 每一個動作,你需要做上mainCharacter將需要加以界定MainCharacter ,而不是在子類。

其次,你需要聲明mainCharacter的外部switch ,然后在把它定義switch

MainCharacter mainCharacter; // Declare it outside
switch (answer) {
        case 1:
            {
                adv.print("you are a mage");
                mainCharacter = new MainCharacterMage(); // Then define it on the inside
                break;
            }
        case 2:
            {
                adv.print("you are an assasin");
                mainCharacter = new MainCharacterAssasin();
                break;
            }
        case 3:
            {
                adv.print("you are a fighter");
                mainCharacter = new MainCharacterFighter();
                break;
            }
        default:
            adv.print("error wrong answer");
            break;
    }

可能是這樣的

public interface Character {
  // here is all common method of your Character
}

public class CharacterFactory {
    private class CharacterMage implements Character {
       // here is implementation
    }

    private class CharacterAssasin implements Character {
       // here is implementation
    }

    public Character createCharacter(String characterName) {
         switch (characterName) {
             case "Mage": 
                 return new CharacterMage();

             case "Assasin":
                 return new CharacterAssasin();

             default:
                 throw new IllegalArgumentException("Incorrect character type " + characterName);
    }
}

根據類之間的差異,可以僅使用一個MainCharacter class以及每個類的不同工廠方法來完成此操作。

例如,像這樣設置MainCharacter類:

public class MainCharacter{
    public int health;
    public int damage;
    // etc.
    public static MainCharacter buildMage(){
        health = 5;
        damage = 20;
        // etc.
    }
    public static MainCharacter buildAssassin(){
        health = 10;
        damage = 10;
        // etc.
    }
    public static MainCharacter buildMage(){
        health = 20;
        damage = 5;
        // etc.
    }
}

然后像這樣創建MainCharacter:

switch (answer) {
    case 1:
        {
            adv.print("you are a mage");
            MainCharacter main_character = MainCharacter.buildMage();
            break;
        }
    case 2:
        {
            adv.print("you are an assasin");
            MainCharacter main_character = MainCharacter.buildAssassin();
            break;
        }
    case 3:
        {
            adv.print("you are a fighter");
            MainCharacter main_character = MainCharacter.buildFighter();
            break;
        }

注意:這減少了必須創建的類的數量,但是僅當類之間的差異只是不同的初始統計信息時才合適。 如果不同的類實際上具有本質上不同的方法,則需要繼承。

暫無
暫無

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

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