Tetris Rotation?

Status
Nicht offen für weitere Antworten.

raven

Bekanntes Mitglied
Hallo,
ich habe ein boolean 2d Array 10x20. true entspricht Stein, false halt keinen.
Dann habe ich eine Klasse Block mit ein boolean 2d Array 4x4 mit bekannten Tetris Figuren.
1111
0000
0000
0000

1000
1000
1100
0000

usw....

Meine Frage mit welchen Algorithmus drehe ich die verschiedenen Stein, ich habe bereits im Internet geguckt, aber nichts passendes gefunden. Mir ist auch klar das ich die verschiedenen Figuren vor abspeichern könnte, das ich nicht mehr drehen brauch, sondern nur noch die passende Figur aufrufen muss, aber das möchte ich nicht. Ich möchte ein möglichen Algorithmus der möglichst unabhängig von der jeweiligen Figur ist.

wäre schön, wenn einer von euch ein e Idee hätte...
mfg raven
 

hdi

Top Contributor
Ich möchte ein möglichen Algorithmus der möglichst unabhängig von der jeweiligen Figur ist.

Tetris-Steine sind individuelle Gebilde, und es gibt keine gemeinsamen Regeln.
Es gibt ja noch nicht mal eine richtige Gemeinsamkeit bei den einzelnen Drehungen.
Entweder du legst dir also die verschiedenen Ausrichtungen zurecht, oder du berechnest
sie jedes mal neu beim drehen. Dafür kannst du zwar einen Algo schreiben, aber der ist
länger und komplizierter als die paar Steinchen direkt rumzuschieben. Mit Unabhängigkeit
oder Abstraktion brauchst du hier nicht anfangen, das ist hier wie ich finde einfach fehl am Platz.
Tetris ist Tetris. Das ist ein spezielles Spiel. Irgendwo muss man nun mal dem Programm sagen,
was Sache ist.

Mach's dir also nich so umständlich: Leg dir für jeden Stein 1 bis 4 statische 2-d Arrays zurecht (je nach Stein),
und tausch die einfach über ein switch-Konstrukt aus:

[HIGHLIGHT="Java"]switch(ausrichtung){
case linksgedreht : 2darray = SteinStatics.2darrayHochgedreht;
ausrichtung = hochgedreht;
break;
// usw
}[/HIGHLIGHT]
 

raven

Bekanntes Mitglied
ok danke! dann werd ich es wohl auch so machen... dachte nur vllt das so ein algo exestiert.... aber wenn ich mir das somit nur komplizierter mache, dann speichere ich mir sie wohl fest ein... danke!

mfg raven
 

hdi

Top Contributor
Du kannst dir vllt noch Maps machen, wenn du das unbedingt so ausdesignen willst:

[HIGHLIGHT="Java"]// irgendwo initialisieren, dann einfach public static zur Verfügung stellen:
Map<Integer,boolean[][]> stangeDirections = new HashMap<Integer,boolean[][]>();
stangeDirections.put(Params.STANGE_HORIZONTAL , {hier das passende 2darray};
//usw[/HIGHLIGHT]

So ne Map also für jeden Stein, dann wird die rotate Methode nicer:

[HIGHLIGHT="Java"]public void rotate(){
// direction festlegen:
direction = (direction == Params.STANGE_VERTIKAL ? Params.STANGE_HORIZONTAL : Params.STANGE_VERTIKAL)
2darray = stangeDirections.get(direction);
}[/HIGHLIGHT]

oder so. Naja ob das wirklich so viel besser is, wahrscheinlich eher nicht ;)
 

0x7F800000

Top Contributor
Tetris-Steine sind individuelle Gebilde, und es gibt keine gemeinsamen Regeln.
Äääh? Werden die nicht einfach gedreht?

Ein rechteck um 90° drehen, das kriegt man ja wohl grad noch so hin^^ :eek:
[HIGHLIGHT="Java"]

public class TetrisStoneRotation {

private static boolean[][] rotateLeft(boolean[][] square){
boolean[][] result=new boolean[square.length][square.length];
for(int x=0; x<square.length; x++){
for(int y=0; y<square.length; y++){
result[x][y]=square[y][square.length-1-x];
}
}
return result;
}

private static boolean[][] rotateRight(boolean[][] square){
boolean[][] result=new boolean[square.length][square.length];
for(int x=0; x<square.length; x++){
for(int y=0; y<square.length; y++){
result[x][y]=square[square.length-1-y][x];
}
}
return result;
}

private static String stoneToString(boolean[][] square){
String result="";
for(int x=0; x<square.length; x++){
for(int y=0; y<square.length; y++){
result+=square[x][y]?'#':'X';
}
result+="\n";
}
return result;
}

public static void main(String[] args){
boolean[][] stone={{false,true,false,false},
{false,true,true,false},
{false,true,false,false},
{false,false,false,false}};

System.out.println(stoneToString(stone));
System.out.println("\n"+stoneToString(rotateLeft(stone)));
System.out.println("\n"+stoneToString(rotateRight(stone)));
}
}

[/HIGHLIGHT]
 

hdi

Top Contributor
Äääh? Werden die nicht einfach gedreht?

Wenn mich nicht alles irrt, liegen die Tetris-Steine nicht in einem Rechteck wie gegeben,
oder irgendeinem anderen Rechteck.
Die Tetris-Steine haben jeder für sich ne eigene Art, sich zu drehen.
Wie gesagt: Ich leg jetz nich meine Hand ins Feuer dafür, aber ich glaube die durch
deinen Algo errechneten Drehungen sind nicht die Original Tetris-Drehungen.
 

0x7F800000

Top Contributor
Naja, es sind drehungen um 90° für beliebige quadrate... Wie sollen sich denn die tetris steine großartig anders drehen, außer an der Drehachse kann man hier doch gar nichts mehr ändern, und die Drehachse kann man beliebig auf Kästchengrenzen oder Zentren von Kästchen setzen.
 

hdi

Top Contributor
Ja aber diese Drehachse ist eben bei jedem Stein anders, und ich glaube sogar
je nach Ausrichtung anders. Diese L-Formen zB drehen sich nich so krass um einen
Mittelpunkt, sondern verschieben sich immer. Das macht es fairer weil man sonst
schwer abschätzen kann wo das Teil landet wenn man's dreht.

Und wenn man wieder an der Stelle ist, dass man einen eigenen Algo für nahezu
jede Drehung braucht, kann man's gleich lassen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Tetris: Rotation der Tetrominos Spiele- und Multimedia-Programmierung 4
M Tetris Vorgehensweise Spiele- und Multimedia-Programmierung 15
T Tetris Spiele- und Multimedia-Programmierung 3
L Abfrage-Fehler? - Hilfe bei Tetris Spiele- und Multimedia-Programmierung 9
Developer_X Java Tetris-Umsetztungs Problem Spiele- und Multimedia-Programmierung 30
T 3D-Tetris Feld neuzeichnen ohne neue Branchgroup Spiele- und Multimedia-Programmierung 18
E Tetris mit Images anstatt gezeichneten Rechtecken Spiele- und Multimedia-Programmierung 4
hdi wer hat lust auf ne runde tetris ! Spiele- und Multimedia-Programmierung 17
Chris_1980 J-Tetris ist fertig Spiele- und Multimedia-Programmierung 7
E Tetris? Spiele- und Multimedia-Programmierung 8
G Tetris Spiele- und Multimedia-Programmierung 9
BraunBerry Rotation mit Radiusänderung Spiele- und Multimedia-Programmierung 0
BraunBerry Rotation von Objekten um ein Raumschiff Spiele- und Multimedia-Programmierung 6
E Rotation um Bildmittelpunkt ohne Affine Transform!!!!! Spiele- und Multimedia-Programmierung 13
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
P Rotation von Sprite klappt nicht Spiele- und Multimedia-Programmierung 4
J Java 3d Rotation Spiele- und Multimedia-Programmierung 6
B j3d Rotation um mehr als eine Achse Spiele- und Multimedia-Programmierung 9
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
H Rotation auf Knopfdruck Spiele- und Multimedia-Programmierung 20
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
aze Transform3D - dauerhafte Rotation Spiele- und Multimedia-Programmierung 3
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
P Figur Rotation Spiele- und Multimedia-Programmierung 14
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
T Java3D: Rotation und Translation Spiele- und Multimedia-Programmierung 2
S Rotation relativ zur Rotation einer anderen Transform Group Spiele- und Multimedia-Programmierung 3
S Rotation um verschobene Achse Spiele- und Multimedia-Programmierung 7
Quaxli Java 3D - Rotation mit Alpha Spiele- und Multimedia-Programmierung 2
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
J Problem mit Rotation (Sprite3D) Spiele- und Multimedia-Programmierung 4
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
W 3d-rotation Spiele- und Multimedia-Programmierung 4
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen


Oben