Tetris anfang

hannah111

Neues Mitglied
Hallo,
erstmal vorne weg ich bin ein kompletter Anfänger hinsichtlich Programmierung. Ich bin mir dessen bewusst das Tetris kein einfach Spiel für den Anfang ist aber ich habe keine Wahl. Meine frage wäre eine generelle. ICh muss mein Spielfeld in form eines Gitters aufbauen oder? Meine zweite frage bezieht sich auf die Tetrisblöcke. Ich weiß dass ich diese mit Hilfe eines array (4*4)programmieren muss allerdings verstehe ich nicht wie ich es hinbekomme das letzendlich dann meine wirklichen blöcke entstehen. Vielleicht kann mir ja jemand helfen.
 

dennisbauer

Aktives Mitglied
Wenn man mit dem Programmieren anfängt ist erstmal alles, was mit Algorithmen und Lösungen finden angeht schwer.

Vielleicht hilft es dir, wenn du dir das Spielfeld als Raster vorstellst. Ich habe die genauen Maße nicht mehr im Kopf, war es 8 Blöcke breit und 20 hoch? Dementsprechend kannst du das Spielfeld als Array vorstellen (Array engl. für 'Feld', suggeriert es ja schon)

Ein Objekt, sprich eine Form, ob diese komische Ecke oder einer Geraden, muss zwangsläufig immer in der Mitte anfangen und immer oben. Das bedeutet erstmal, dass deine Objekte alle eine Position besitzen müssen, die du animieren möchtest. Die Position entspricht dann eben der Position im Feld, welches du zuvor angelegt hast.
Dann folgt ein Kollisionsmodell, welches recht einfach gehalten ist, da es sich hier ja nur um das 2D-Feld geht mit festen Breiten und Kanten. Du musst hier nun überprüfen, ob das unterste Feld / die untersten Felder deines Objektes ein Feld im nächsten Takt (Erklärung folgt gleich) überlappen. Trifft dies zu, befüllst du dein Spielfeld-Array an den entsprechenden Positionen deines Objektes und erzeugst ein neues, zufälliges Objekt, bei dem der ganze Fluss erneut durchläuft. Das Kollisionsmodell muss dann auch hier angewandt werden, ob die oberste Reihe getroffen wird, ansonsten bricht das Spiel ja mit einem Game Over ab.
Der Takt bestimmt im wesentlichen die Spielgeschwindigkeit, da mit ihm die Dynamik ins Spiel gebracht wird, als auch die Schwierigkeit. In JavaFX kannst du das mit der Timeline und einem unendlichen KeyFrame realisieren, welches alle Sekunde im einfachsten oder eben Bruchteile für verschiedene Schwierigkeitsgrade einen Takt auslöst bzw. eine Neuberechnung des Spielfeldes.

Das war nun die Logik-Seite, die du für das Spiel auf jeden Fall benötigen wirst. Herunterprogrammieren kann man das recht zügig, auch als Anfänger, wobei das Kollisionsmodell eben etwas tricky werden kann.

Wie bekommst du das nun auf die grafische Oberfläche?

Hier fange ich von vorne an, da ich nicht weiß, wie weit du hier drin bist.
JavaFX arbeitet mit einer Stage, was, wenn ich es ausdrücken sollte, die Basis für ein Fenster ist. In diese Basis hinein legst du eine Scene. Ich denke Scene als Szene braucht man nicht näher erläutern, hier passiert eben etwas, wie in einem Film auch :)

Eine Scene benötigt ein Wurzel-Element, was, meine ich, auf ein AnchorPane beschränkt ist. Ein AnchorPane ist ein Container, der bestimmte Ankerpunkte besitzt und auch automatisch den Content streckt bzw. stauchen kann, je nachdem, wie man das Fenster vergrößert/verkleinert, ein responsives Layout sozusagen also.
Alle Container in JavaFX haben eine getChilden-Methode, die dir eine Liste aller Subelemente, die in diesem Container liegen, zurückliefert. Fügst du hier ein Element an, wird beim nächsten Rendering-Durchlauf dieses neue Element mit angezeigt.

Wie du das Tetris nun umsetzt, liegt in deiner Art und Weise zu programmieren. Es ist möglich, in dieses AnchorPane ein Gridpane zu legen, also einer Art Raster, welches die Maße deines Spielfeldarrays abbildet. Du kannst aber auch hingehen und die einzelnen Blöcke, aus denen die Objekte in Tetris bestehen, einfach auf Pixel umrechnen und so einen Maßstab zu erhalten, der direkt auf einen Block umgerechnet werden kann.

Um auf deine Frage zu kommen, wie sich dein Objekt hier darstellen lässt:

In JavaFX hast du die Möglichkeit auch geometrische Formen in deinen Containern abzulegen. Das macht es relativ leicht, wenn du weißt, dass dein Objekt aus festen Blöcken besteht.
Ich rede nicht umsonst von "Blöcken", da es hiermit wesentlich einfacher ist, eine durchgängige "Rasterstruktur" bezubehalten.
Ein Quadrat stellst du z.B. aus vier Rechtecken mit gleicher Seite da. Eine Gerade ebenfalls mit vier Rechtecken, jedoch anders angeordnet. Wie diese Rechtecke dargestellt werden, ergibt sich schlussendlich aus der Drehachse (Hinweis: drittes Feld: Art des Objektes [Quadrat, Stange, Dreieck usw.], viertes Feld deines Objekts: Drehwinkel)

In deinem Spielfeld musst du nun an entsprechenden Positionen immer mehrere Rechtecke ablegen, die dein Objekt repräsentieren.

Ein Rechteck generierst du mit der Klasse Rectangle von JavaFX.


Ich hoffe, ich konnte dir hier einen kleinen Einblick geben, wie du dieses Thema am besten angehst, bzw. was diese JavaFX-Welt übe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Rotation von Formen in Tetris Java Basics - Anfänger-Themen 4
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
L Tetris-Segment "malen" Java Basics - Anfänger-Themen 7
K Tetris Spielschleife Java Basics - Anfänger-Themen 3
J Tetris-Stein wird nicht gezeichnet! Java Basics - Anfänger-Themen 9
J Tetris - Spielfeldgröße Java Basics - Anfänger-Themen 9
J Tetris - Problem Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
K Wie kann ich ein Element an den Anfang setzten ? Java Basics - Anfänger-Themen 1
berserkerdq2 Warum macht man in IJVM am Anfang Bipush 0? Java Basics - Anfänger-Themen 1
M Java Anfang Java Basics - Anfänger-Themen 13
L Anfang von Programmtext Java Basics - Anfänger-Themen 11
T Netzwerkprogrammierung Anfang Java Basics - Anfänger-Themen 9
J am Anfang eines String ein Leerzeichen löschen Java Basics - Anfänger-Themen 6
N Anfang eine Array Schleife finden Java Basics - Anfänger-Themen 18
F Interface JTextField am Anfang unsichtbar o_o Java Basics - Anfänger-Themen 3
V Bin eigentlich noch VOR dem Anfang .... Java Basics - Anfänger-Themen 9
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
D ListIterator auf Anfang zurücksetzen Java Basics - Anfänger-Themen 2
S Video2Brain Java7 gut fürn Anfang? Java Basics - Anfänger-Themen 8
M Komplett anfang in Java Java Basics - Anfänger-Themen 9
O Erste Schritte Aller Anfang ist schwer ! Bitte um Unterstützung Java Basics - Anfänger-Themen 6
M Aller anfang ist schwer :D Hilfe! Java Basics - Anfänger-Themen 18
S Erste Schritte Von Anfang an ! Java Basics - Anfänger-Themen 6
J Variablen Letzte berechnete variable am anfang Ausgeben ? Java Basics - Anfänger-Themen 4
B Anfang des Damenproblems Java Basics - Anfänger-Themen 82
H Problem beim Anfang von Java (Java Editor) Java Basics - Anfänger-Themen 2
E Listen vereinen, wenn Elemente am Anfang/Ende übereinstimmen Java Basics - Anfänger-Themen 2
J Bufferedreader nich von anfang an. Java Basics - Anfänger-Themen 14
Z TableCellRenderer anfang so richtig? Java Basics - Anfänger-Themen 13
M JTextPane an den Anfang springen Java Basics - Anfänger-Themen 8
Povlsen84 String - Zeichen am Anfang entfernen Java Basics - Anfänger-Themen 11
P Ein Programm vorzeitig beenden und wieder an den Anfang springen. Java Basics - Anfänger-Themen 7
K Befehl um am Anfang einer Methode zu kommen? Java Basics - Anfänger-Themen 9
A Filereader - An den Anfang des File springen Java Basics - Anfänger-Themen 2
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
A Aus switch case an den Anfang? Java Basics - Anfänger-Themen 7
B so ziemlich am anfang Java Basics - Anfänger-Themen 11
G datei -> zeile am anfang einfügen/löschen Java Basics - Anfänger-Themen 4
K Ganz am Anfang - Java + Datenbank Java Basics - Anfänger-Themen 6
G Aller anfang is schwer. Java Basics - Anfänger-Themen 4
C Java-Anfang main void public? Java Basics - Anfänger-Themen 5
T Grundlagen ganz am Anfang Java Basics - Anfänger-Themen 12
R An den Anfang einer While-Schleife springen Java Basics - Anfänger-Themen 2
D wieso ist die combobox nicht von anfang an aktiviert? Java Basics - Anfänger-Themen 4
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
G in txt file text nicht am ende sondern am anfang anhängen! Java Basics - Anfänger-Themen 12
A ganz am Anfang Java Basics - Anfänger-Themen 15
K Zum Anfang einer ArrayList springen Java Basics - Anfänger-Themen 4
J TextArea auf Anfang setzen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben