新しいピース (4 つのタイルで構成される) ごとに新しいランダムな色を設定しようとしています。ボードに完全な部分を描画するために、Board クラスにペイント コンポーネントがあります。
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
for(int row = 0; row < grid.length; row++) {
for(int col = 0; col < grid[row].length; col++) {
if(grid[row][col] != null) {
//if there is a non-null space, that is a Tetris piece.. fill it red
g.setColor(color);
g.fillRect(row * tilesize, col * tilesize, tilesize, tilesize);
g.setColor(Color.WHITE);
g.drawString("(" + row + ", " + col + ")", row * tilesize, col * tilesize+10);
}
}
}
}
g.setColor()
グローバル変数が与えられていることがわかりますcolor
Board コンストラクターでの定義:
color = setColor();
setColor():
public Color setColor() {
Random rand = new Random();
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();
Color randomColor = new Color(r, g, b);
return randomColor;
}
衝突が発生すると、新しいピースが生成され、color
グローバル変数が新しいランダムな色で上書きされます...
public void collisionCheck() {
if (newPiece.isCollision()){
newPiece = new Piece(this, randomPiece());
color = setColor();
}
}
これにより、次の結果が得られます。
すべての形状が同じ色に設定されています...私が望むものではありません
次に、新しいピースが生成されると、それらすべての色が変わります...再び、私が望むものではありません.
問題が何であるかはわかっています...グローバルカラー変数を上書きすべきではないということです...しかし、ボードクラスから色を割り当てずに...代わりにタイルクラスから色を取得すると、そのような:
g.setColor(grid[row][col].getColor());
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
for(int row = 0; row < grid.length; row++) {
for(int col = 0; col < grid[row].length; col++) {
if(grid[row][col] != null) {
//if there is a non-null space, that is a Tetris piece.. fill it red
g.setColor(grid[row][col].getColor());
g.fillRect(row * tilesize, col * tilesize, tilesize, tilesize);
g.setColor(Color.WHITE);
g.drawString("(" + row + ", " + col + ")", row * tilesize, col * tilesize+10);
}
}
}
}
次に、タイルが再描画されるたびに、個々のタイルに新しい色が生成されます...
私の目標は、1 つのピース (4 つのタイルで構成される) にランダムな色を与えることです...その後、新しいピースが生成されると、その最初のピースはその色を保持します...そして新しいピースはその色を保持します...
何かご意見は?
ありがとう!