3

私は学校のプロジェクトのためにゲームを作成しているので、私はどんな種類のコードのためにもここにいるのではなく、私がやろうとしていることをどのように行うかについてのグローバルなアイデアです...

私はピースを持っており、各ピースは独自の色とタイプです:
ピース1-イエロー-シンプル
ピース2-イエロー-爆発物
....
ピース10-ブルー-ChangeColor

開始時に、ゲームはこのリスト(各ピースの1種類だけで以前に作成されたリスト)からランダムなピースを含むフィールドになります。ゲームが3つ以上連続している場合、それらを削除してポイントをカウントしますが、1つである場合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;                
    }
}

でも、それらの「パワーピース」を簡単に追加できる良い方法を考えていたのですが、それ以上に、将来的にはもっと色や「パワー」を追加できるようになりました...

サブクラスを作成してextendを使用することを考えていましたが、いくつかのクラスを拡張できないため、アイデア全体が頭に浮かびません...

それで、誰かが私にそれをアーカイブする方法についてのグローバルなアイデアを私に与えることができますか?

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 に答える