myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

(Java) Tetris HILFE!!!

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 19.06.13, 10:21   #1
Silberhand
Anfänger
 
Registriert seit: Oct 2010
Beiträge: 3
Bedankt: 43
Silberhand ist noch neu hier! | 0 Respekt Punkte
Standard (Java) Tetris HILFE!!!

Hallo Leute,
ich versuche gerade in Java Tetris zu programmieren und habe momentan ein Problem.
Und zwar geht es darum die Steine um 90° nach links zu drehen die einzelnen Steine sind in einem boolean array drin.
Beispiel eines Steins:
public final static Form T = new Form(
new boolean[][] {
new boolean[] { false, true, false },
new boolean[] { true, true, true }},
Color.MAGENTA);

In der Theorie denke ich zuwissen was man machen muss und zwar einfach nur die Achsen tauschen und spiegeln. Die Steine allgemein sind folgend definiert:
public Form(boolean[][] raster, Color farbe) {
this.raster = raster;
this.farbe = farbe;

this.hoehe = raster.length;
int breite = 0;
for(int i=0; i<raster.length; i++)
breite = Math.max(breite, raster[i].length);
this.breite = breite;
}

Ich hoffe das es verständlich ist wo mein Problem liegt(ich befürchte das es sehr einfach ist komme aber leider einfach nicht drauf). Falls zusätzliche Infos gebraucht werden einfach anschreiben.

Schon mal Danke an alle die Antworten
Silberhand ist offline   Mit Zitat antworten
Ungelesen 19.06.13, 17:37   #2
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

Ich sehe das Problem ganz woanders.
Du verwendest eine objektorientierte Programmiersprache, aber keine Objekte!
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 20.06.13, 17:34   #3
Meiner
Anfänger
 
Registriert seit: Sep 2009
Beiträge: 4
Bedankt: 0
Meiner ist noch neu hier! | 0 Respekt Punkte
Standard

Ich denke auch, dass du es dir leichter machen würdest, wenn du Objekte benutzen würdest. Übrigens muss du die Drehung gar nicht unbedingt berechnen lassen (zumindest nicht jedes mal), man kann die Werte einfach schon vorher abspeichern, es gibt für jeden Baustein doch nur 4 mögliche Drehrichtungen, von denen bei den meisten 2 identische Paare vorhanden sind.
Aber andere Wege sind bestimmt auch nicht schlecht
Meiner ist offline   Mit Zitat antworten
Ungelesen 21.06.13, 04:48   #4
Quentym
Anfänger
 
Registriert seit: Dec 2009
Beiträge: 3
Bedankt: 1
Quentym ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von ProgMaster Beitrag anzeigen
Ich sehe das Problem ganz woanders.
Du verwendest eine objektorientierte Programmiersprache, aber keine Objekte!
verwendet er doch.

Zitat:
Zitat von Meiner Beitrag anzeigen
Ich denke auch, dass du es dir leichter machen würdest, wenn du Objekte benutzen würdest. Übrigens muss du die Drehung gar nicht unbedingt berechnen lassen (zumindest nicht jedes mal), man kann die Werte einfach schon vorher abspeichern, es gibt für jeden Baustein doch nur 4 mögliche Drehrichtungen, von denen bei den meisten 2 identische Paare vorhanden sind.
Aber andere Wege sind bestimmt auch nicht schlecht
würde ich auch sagen.
deinem codeschnipsel entnehme ich dass du ziemlicher anfänger bist, also speichere die 4 rotationsmöglichkeiten einfach vor.

ansonsten würde ich empfehlen lieber ein int- statt boolean array zu benutzen, dann hilft dir [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] sicher weiter.
Quentym ist offline   Mit Zitat antworten
Ungelesen 28.06.13, 01:18   #5
prini1989
Anfänger
 
Registriert seit: Mar 2013
Beiträge: 1
Bedankt: 0
prini1989 ist noch neu hier! | 0 Respekt Punkte
Standard

Dein Array hat auch die Falsche Größe. Da du alle 4 Möglichkeiten darstellen willst die möglich sind, musst du dein Array größer machen. So wie es jetzt ist kannst du den Stein nicht auf die Seite Kippen. Um frei drehen zu können Brauchst du quadratische Matrizen, weil du ja nicht mal eben so die Größe deines Arrays ändern kannst.

Edit: Der Datentyp kann so Bleiben... ob int, boolean oder sonst was ist da uninteressant. Wenn du es allerdings auch ausgeben willst würde Ich dir String empfehlen.
Quasi mit " " und "X" füllen.
prini1989 ist offline   Mit Zitat antworten
Ungelesen 03.07.13, 21:07   #6
Silberhand
Anfänger
 
Registriert seit: Oct 2010
Beiträge: 3
Bedankt: 43
Silberhand ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Quentym Beitrag anzeigen
verwendet er doch.



würde ich auch sagen.
deinem codeschnipsel entnehme ich dass du ziemlicher anfänger bist, also speichere die 4 rotationsmöglichkeiten einfach vor.

ansonsten würde ich empfehlen lieber ein int- statt boolean array zu benutzen, dann hilft dir [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] sicher weiter.
Quentym du weißt nicht wie mich dein Kommentar zum lachen gebracht hat....
da es jetzt nicht mehr relevant ist(und mir eh keiner helfen konnte) kann ich sagen das die Frage zu einem Projekt in der Uni war und der Code den ich hier gepostet habe war ein Teil vom mir vorgegebenen Code mit dem ich arbeiten musste.
Silberhand ist offline   Mit Zitat antworten
Ungelesen 06.07.13, 01:03   #7
Schmicky
Echter Freak
 
Registriert seit: Feb 2010
Beiträge: 2.943
Bedankt: 1.785
Schmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt PunkteSchmicky leckt gerne myGully Deckel in der Kanalisation! | 14379469 Respekt Punkte
Standard

Silberhand,

sollten wir die Glaskugel verwenden und sehen, dass das eine Vorgabe der Uni war?

Ganz ehrlich, ich hätte auch was anderes vorgeschlagen, als den "Codegeschnipsel".

Hellseher sind wir noch lange nicht.
__________________
Gruß Schmicky
Schmicky ist offline   Mit Zitat antworten
Ungelesen 13.07.13, 17:56   #8
Silberhand
Anfänger
 
Registriert seit: Oct 2010
Beiträge: 3
Bedankt: 43
Silberhand ist noch neu hier! | 0 Respekt Punkte
Standard

Tut mir leid wenn das falsch rüber kam. Ich habe nicht über euch gelacht, sondern eher über die Leute aus der Uni die solch einen komischen Code geschrieben haben, das selbst Leute mit Ahnung nicht so viel damit Anfangen können(habe auch selbst 2 profis gefragt die ich kenne die waren der selben Meinung das der Code seltsam/umständlich ist)
Silberhand ist offline   Mit Zitat antworten
Ungelesen 17.09.13, 18:40   #9
Tomsen1410
Erfahrenes Mitglied
 
Benutzerbild von Tomsen1410
 
Registriert seit: Jul 2009
Beiträge: 470
Bedankt: 509
Tomsen1410 ist noch neu hier! | 0 Respekt Punkte
Standard

Ich habe vor kurzem auch Tetris programmiert und bin zu folgendem Rotations-Algorythmus gekommen:

Du hast eine Klasse cStone, welche Blöcke beinhaltet und vererbt werden kann. Vereinfacht schaut die Klasse dann so aus(c++):
PHP-Code:
class cStone{
public:
 
virtual void Create() = 0//Interface
 
virtual void Rotate();
private:
 
std::vector<cBlock*> m_Blocks//Liste der Blöcke im Stein 
}; 
Man siehst, dass man diese Klasse vererben muss, da es ja insgesamt 7 verschiedene Steine gibt. Das heißt, dass man aber auch für jede der sieben Klassen eine andere Create-Funktin hat, weil ja jeder Stein anders aufgebaut ist.
Die Klasse cBlock beinhaltet eine X, sowie Y-Position und einen X- und Y-Offset zum "MainBlock", welchen man zum drehen braucht.

Den Drehalgorythmus funktioniert also wie folgt:
Ein Stein besteht ja aus Blöcken, von denen einer der "Hauptblock oder wie oben auch der "MainBlock" ist um den sich dann alle anderen Blöcke drehen werden. Wenn man jetzt überlegt, findet man heraus, dass wenn man den Stein nach links dreht und ein bestimmter Block zum Beispiel 2 y-Positionen nach oben und 1 x-Position nach rechts vom Hauptblock entfernt ist wird das beim drehen genau getauscht:
Der neue x-Offset ist der alte y-Offset,
der neue y-Offset ist der alte x-Offset MIT VORZEICHENWECHSEL! (kommt auf deine Achsen an)

Das heißt im Fall wenn die y-Achse nach unten verläuft und die x-Achse nach rechts verläuft:

x_offset_neu = y_offset_alt;
y_offset_neu = x_offset_alt * (-1);


PS: Falls man einen Sonderfall hat, wie den Quadrat-Stein, welcher um seine eigene Achse rotiert kann man die Rotate() Funktion einfach überschreiben(in diesem Fall leer lassen), da sie ja als "virtual" instanziert wurde.
Ich hoffe ich konnte dir helfen
__________________
Ein DANKE tut nicht weh.
DRÜCKEN


__________________________________________________ ____
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Tomsen1410 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.


Sitemap

().