0

まず、私は Android でテトリスのクローンを作成しようとしています。学習経験のために、すでにこれを達成していますが、コードはひどい混乱であり、最終的に戻ってクリーンアップすることにしました。起こっていました。

しかし今、私のコンストラクタの1つが実行されていないようです...

最初にグローバル変数として設定された、コンストラクターで初期化する必要があるものを参照すると、NPE が発生します。このコードでは失敗しています:

blocksWorld.blockoid.parts.size()

GameScreen のコンストラクターで BlocksWorld のオブジェクトをセットアップしましたが、これは実行されます。

public GameScreen(Game game) {
    super(game);
    this.screen = AndroidGame.GAME_SCREEN;
    blocksWorld = new BlocksWorld();
}

これは、実行されていないように見える BlocksWorld のコンストラクターです。

public BlocksWorld() {
    // resets the game world
    for (int x = 0; x < WORLD_WIDTH; x++) {
        for (int y = 0; y < WORLD_HEIGHT; y++) {
            grid[x][y] = 0;
        }
    }
    NewBlockoid(blockoid);
}

新しいブロックイド:

public void NewBlockoid(Blockoid blockoid) {
    nextPiece = random.nextInt(7) + 1;
    blockoid = new Blockoid(grid, nextPiece);
}

Blockoid のコンストラクター:

public Blockoid(int[][] grid, int blockoidType) {
    this.grid = grid;
    this.blockoidType = blockoidType;
    switch (blockoidType) {
    case Blockoid.I:
        color = Color.CYAN;
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(5, 2));
        parts.add(new BlocksParts(5, 3));
        break;
    case Blockoid.J:
        color = Color.BLUE;
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(5, 2));
        parts.add(new BlocksParts(4, 2));
        break;
    case Blockoid.L:
        color = Color.rgb(255, 165, 0);
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(5, 2));
        parts.add(new BlocksParts(6, 2));
        break;
    case Blockoid.O:
        color = Color.YELLOW;
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(6, 0));
        parts.add(new BlocksParts(6, 1));
        break;
    case Blockoid.S:
        color = Color.GREEN;
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(4, 1));
        parts.add(new BlocksParts(6, 0));
        break;
    case Blockoid.T:
        color = Color.rgb(128, 0, 128);
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(4, 0));
        parts.add(new BlocksParts(6, 0));
        parts.add(new BlocksParts(5, 1));
        break;
    case Blockoid.Z:
        color = Color.RED;
        parts.add(new BlocksParts(5, 0));
        parts.add(new BlocksParts(5, 1));
        parts.add(new BlocksParts(4, 0));
        parts.add(new BlocksParts(6, 1));
        break;
    }
}

誰が何が悪いのか知っていますか?さらにコードが必要ですか? ご協力ありがとうございました...

4

0 に答える 0