2012-05-26 58 views
3

我創造了我的學校項目遊戲色彩和權力,所以我在這裏不是任何形式的代碼,就如何做什麼,我試圖做一個全球性的想法...找到一種方法來處理在棋盤遊戲

我有塊,分別爲是自己的顏色和類型是這樣的:
片1 - 黃色 - 簡單
片2 - 黃色 - 爆炸
....
品10 - 藍 - ChangeColor

在開始遊戲會隨機片場從這個列表(列表C早期只有一種每件)reated,如果我們在一排有3個或更多的遊戲,以消除他們和計分,但如果3個(或以上的)有任何「權力效應」不是件arround必須對這種力量作出反應(很難用我的低英語水平解釋,但我認爲你得到了它:S ..)

現在我的遊戲只有簡單的部分,併爲此我使用和枚舉像這樣:

public enum CorPeca 
{  
    AMARELO, 
    AZUL, 
    VERMELHO; 
} 

在板類我這樣做:

this.arrayPecas = new ArrayList<Peca>(); 

    for (CorPeca corPeca : CorPeca.values()) 
     this.arrayPecas.add(new Peca(corPeca)); 

,並在小品類我是d卷板機這

public Peca(CorPeca tipoPeca) 
{ 
    this.definirPeca(tipoPeca); 
} 

public CorPeca getCorPeca() { return this.corPeca; } 
public char getCharPeca() { return this.charPeca; } 

public void definirPeca(CorPeca tipoPeca) 
{ 
    switch (tipoPeca) 
    { 
     case AMARELO: 
      this.charPeca = 'a'; 
      this.corPeca = CorPeca.AMARELO; 
      break; 
     case AZUL: 
      this.charPeca = 'u'; 
      this.corPeca = CorPeca.AZUL; 
      break; 
     case VERMELHO: 
      this.charPeca = 'e'; 
      this.corPeca = CorPeca.VERMELHO; 
      break;     
    } 
} 

但我想一個很好的方法可以輕鬆地添加這些「權力小品」的,但更重要的是,能夠在未來添加更多的色彩和更多的「權力」 ......

我在想創建子類,並使用延長,但整體思路只是因爲我們不能延長几類不我心中充滿...

因此,誰能給我如何我一個全球性的想法可以歸檔嗎?

回答

3

經典的面向對象的方式做這將是定義一個代表所有作品,包含常用功能(如權力的列表)的抽象基類:

public abstract class Piece { 
    // put in fields that every piece has, e.g. x and y co-ordinate here 

    // array of powers 
    protected ArrayList<Power> powers=new ArrayList<Power>(); 

    // method to add new powers to the piece 
    public void addPower(Power power) { 
     powers.add(power); 
    } 

    // power method - optionally overriden by specififc pieces 
    public void applyPowers() { 
     for (Power power:powers) { 
      power.methodToActivatePower(); 
     } 
    } 

    // abstract char method 
    public abstract char getChar(); 

} 

注意abstract意味着你可以不能直接實例化這個類 - 你只能創建具體子類的實例。

然後擴展這個類來實現每個特定件:

public class YellowPiece extends Piece { 

    // override applyPowers for yellow piece (if needed) 
    @Override 
    public void applyPowers() { 
     // code for yellow piece power handling goes here 
    } 

    // override char - required 
    @Override 
    public char getChar() { 
     return 'y'; 
    } 

} 

,您仍然可以創建一個ArrayList<Piece>和喜歡的東西來填充它:如果你想申請的功率

ArrayList<Piece> pieces = new ArrayList<Piece>(); 
pieces.add (new YellowPiece()); 
pieces.add (new GreenPiece()); 
// etc.... 

然後一個具體的作品,只是做:

pieces.get(pieceNumber).applyPower(); 

你會明顯nee d自定義這個代碼很多,使它在你的遊戲中工作,但希望它給你的一般想法。請注意,還有很多其他方法可以實現相同的目標 - 我剛剛描述了「經典」OOP方式。

P.S.所有代碼都是英文的道歉,但你的英語遠遠好於我的葡萄牙語:-)

+0

你忘了指定'YellowPiece extends Piece'。您還應該添加'@ Override'註釋作爲最佳做法。 –

+0

非常感謝您的幫助!真的^^(PS:這是葡萄牙語不是西班牙語,這是一個常見的錯誤沒有問題xD)。 只有一個問題,你的編碼是說每種顏色都有一個特定的力量?我怎樣才能定義一個不同的權力? – aliasbody

+0

@aliasbody - 啊好的,也許我誤解了權力點....如果一塊可以有多個權力,那麼你可以在Piece內添加一個'powers' arraylist。然後,Power本身可以是一個抽象類,它有不同功率類型的多個子類。那麼你可以做一些像'piece.addPower(new ExplosionPower())'等等,希望這是有道理的?將做一些快速編輯回答 – mikera