3

我正在为我的学校项目创建一个游戏,所以我在这里不是为了任何类型的代码,只是一个关于如何做我想做的事情的全球想法......

我有碎片,每件都有自己的颜色和类型,如下所示:
碎片 1 - 黄色 - 简单
碎片 2 - 黄色 - 爆炸
......
碎片 10 - 蓝色 - 改变颜色

在开始游戏时,该列表中的随机棋子将是场(之前创建的列表,每个棋子只有一种),如果我们连续有 3 个或更多,游戏将删除它们并计算分数,但如果一个3个(或更多)中的任何一个“力量效应”比周围的碎片必须对这种力量做出反应(我的英语水平很难解释,但我认为你明白了:S..)

现在我的游戏只有简单的部分,为此我使用了这样的枚举:

public enum CorPeca 
{    
     AMARELO,
     AZUL,
     VERMELHO;
}

在董事会课上,我正在这样做:

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

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

在 Pieces 课上,我正在这样做

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;                
    }
}

但我在想一个很好的方法来轻松添加那些“力量碎片”,但不仅如此,将来能够添加更多的颜色和更多的“力量”......

我正在考虑创建子类并使用扩展,但整个想法并没有填满我的脑海,因为我们不能扩展多个类......

那么任何人都可以给我一个关于如何存档的全局想法吗?

4

1 回答 1

3

执行此操作的经典 OOP 方法是定义一个抽象基类,该基类代表所有部分并包含通用功能(例如权力列表):

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();

您显然需要大量自定义此代码以使其在您的游戏中工作,但希望它可以为您提供总体思路。请注意,还有很多其他方法可以实现相同的目标——我刚刚描述了“经典”OOP 方式。

PS 抱歉所有代码都是英文的,但你的英语比我的葡萄牙语好得多 :-)

于 2012-05-26T01:43:29.883 回答