Hallo zusammen,
Ich möchte Tetris Programmieren und habe auch schon einiges dahingehend getan, allerdings bin ich jetzt an dem Punkt angelangt, an dem ich die Rotation von den fallenen Formen programmieren möchte. Meine Objekte bestehen immer aus vier einzelnen Block Objekten.
Zusätzlich habe ich die Klasse BlockHandler, in der alles rund um die Steuerung von den Formen gemacht wird.
Block[][] ist ein Array, das als Koordinatensystem dient um meine Objekte zu ordnen.
Hier ein beispiel eines Quadrats, aus vier kleinen Block Objekten:
Mein Problem ist die Rotation. Meine einzige Idee ist es für jedes Objekt, für jede Drehungsstufe, alles einzeln zu testen. Das währe allerdings sehr viel aufwand.
Hier ein Beispiel wie das gemeint ist:
Das bräuchte ich dann noch vier mal für jede der sieben Formen. Deshalb wollte ich fragen, ob das irgendwie einfacher geht.
Danke schonmal für die Hilfe.
Ich möchte Tetris Programmieren und habe auch schon einiges dahingehend getan, allerdings bin ich jetzt an dem Punkt angelangt, an dem ich die Rotation von den fallenen Formen programmieren möchte. Meine Objekte bestehen immer aus vier einzelnen Block Objekten.
Zusätzlich habe ich die Klasse BlockHandler, in der alles rund um die Steuerung von den Formen gemacht wird.
Block[][] ist ein Array, das als Koordinatensystem dient um meine Objekte zu ordnen.
Hier ein beispiel eines Quadrats, aus vier kleinen Block Objekten:
Java:
package Blocks;
public class Square extends Forms{
private BlockHandler blockH;
private Block first;
private Block second;
private Block third;
private Block fourth;
public Square(BlockHandler pBlockH) {
super();
blockH = pBlockH;
first = blockH.addBlock(4,15);
second = blockH.addBlock(4,14);
third = blockH.addBlock(5,15);
fourth = blockH.addBlock(5,14);
}
public void rotate() {
//in diesem Falle nicht nötig, habe aber als Beispiel ein weitgehend fertiges Objekt genommen
}
@Override
public void move() {
if(blockH.block[second.getX()][second.getY()-1] == null && blockH.block[fourth.getX()][fourth.getY()] == null) {
blockH.moveDown(first.getX(),first.getY());
blockH.moveDown(second.getX(),second.getY());
blockH.moveDown(third.getX(),third.getY());
blockH.moveDown(fourth.getX(),fourth.getY());
}
else {
blockH.newForm();
}
}
}
Mein Problem ist die Rotation. Meine einzige Idee ist es für jedes Objekt, für jede Drehungsstufe, alles einzeln zu testen. Das währe allerdings sehr viel aufwand.
Hier ein Beispiel wie das gemeint ist:
Code:
if(rotation == 0) {
if(first.getX() != 15 && blockH.block[first.getX()][first.getY()+1] == null && blockH.block[second.getX()][second.getY()+1] == null) {
if(blockH.block[second.getX()][third.getY()-1] == null) {
blockH.moveBlock(first.getX(),first.getY(),second.getX() +1,first.getY()+1);
blockH.moveBlock(third.getX(),third.getY(),second.getX() +1,third.getY()-1);
blockH.moveBlock(fourth.getX(),fourth.getY(),first.getX() +1,first.getY()+1);
rotation = 1;
}
}
}
Das bräuchte ich dann noch vier mal für jede der sieben Formen. Deshalb wollte ich fragen, ob das irgendwie einfacher geht.
Danke schonmal für die Hilfe.