私は Java を使用して Tetris ゲームを自分で作成することに取り組んでいます。コードを自分で分解して、どこまでできるかを確認したいので、既にコードが含まれているチュートリアルは使用していません。
これまでのところ、あまり良くありません。私はシェイプの創造に出くわしました。私の考えは次のいずれかです: 1. の引数として使用できるように、Area または Shape を拡張または実装する個別のクラスとして、各基本形状 (L、立方体、ボートなど) を用意しg2.fill(LShape)
ます。2. 各クラスには、回転位置を表すある種の状態変数がありますが、次の課題は、回転を理解することです..
したがって、ステップ 1 として、これまでに LShape クラスの次のドラフトを作成しました。
草案 a):
public class LShape implements Shape{
private Rectangle[][] poc;
private int rotationState;
public LShape() {
rotationState = 0;
poc = new Rectangle[3][3];
poc[0][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y, BRICK);
poc[1][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y + BRICK, BRICK);
poc[2][0] = new Brick(INITIAL_X - BRICK, INITIAL_Y + 2 * BRICK, BRICK);
poc[2][1] = new Brick(INITIAL_X, INITIAL_Y + 2 * BRICK, BRICK);
}
}
//.....all the Shape's methods which I'm not overriding cause I don't know how
メイン クラスでは、paint() メソッドで呼び出しています。
g2.fill(lShape); // where lShape is a LShape object;
問題は、例外がスローされることです。getPathIterator()
またはドラフトb):
public class LShape extends Area{
public LShape () {
add(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y + BRICK, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X - BRICK, INITIAL_Y + 2 * BRICK, BRICK)));
exclusiveOr(new Area(new Brick(INITIAL_X, INITIAL_Y + 2 * BRICK, BRICK)));
}
}
この場合、 を呼び出してg2.fill(lShape)
も例外はなく、Shape が描画されますが、それを移動する方法がわかりません。Area の一部は Rectangles である Brick オブジェクトであるためsetLocation
、Area 内の各 Brick のメソッドにアクセスしようとすることができましたが、アクセス方法がわかりません。
したがって、Tetris Shape の Shape 実装が例外をスローしないようにする方法、つまり、必要なすべてのメソッドを実装し、実際に JPanel に表示する方法を理解するために助けが必要だと思います..そして、回転について心配します. または、Tetris Shape の Area 拡張を移動する方法を見つけます。
ありがとう、