- Forum-Beiträge: 2.492
02.10.2015, 08:03:12 via Website
02.10.2015 08:03:12 via Website
Hallo,
ich bin gerade dabei ein Spiel zu programmieren, meine verwendete Datenstruktur weist aber jetzt schon nicht akzeptable Performanceprobleme auf, und da ich bisher nicht selbst auf etwas Besseres gekommen bin wollte ich mal hier um Rat fragen.
Das Ziel
Mein Spiel ist ähnlich wie Tetris. Es fallen Blöcke (immer einzelne) von oben und diese können nach Links und Rechts bewegt werden. Wenn bestimmte Blöcke neben oder übereinander sind sollen diese entfernt werden.
Mein bisheriger Ansatz
Für die Blöcke habe ich eine eigene Klasse. Im Spiel führe ich eine ArrayList in der alle Blöcke gespeichert sind. Wenn ein neuer Block erscheint wird er an das Ende der Liste hinzugefügt. Außerdem habe ich ein zweidimensionales Array welches die gleichen Maße hat, wie das Spielfeld. Wenn sich die Blöcke bewegen wird in dem Array festgehalten, wo sich die Blöcke befinden. Damit schaffe ich es, dass sich Blöcke nicht "übereinander" her bewegen, sondern stoppen wenn einer im Weg ist.
Mein Problem bei diesem Ansatz
Wenn ich die Blöcke löschen will ist es noch recht einfach sie aus dem zweidimensionalen Array zu entfernen. Das Problem ist aber die Liste. Die Blöcke müssen daraus auch entfernt werden. Erstens weiß ich nicht an welcher Position in der Liste sich die Blöcke befinden (ich weiß nur, dass der aktuell fallende Block an der letzten Position ist) und zweitens würden sich diese Positionen einiger Blöcke ja ändern, wenn ich einen Block entferne (wodurch mein Ansatz ein zweites Array zu führen, in dem die Positionen in der Liste gespeichert sind zunichte gemacht wird, bzw. zu viel Arbeit aufweisen würde, da das Array dann ja ständig aktualisiert werden müsste).
Nochmal anders beschrieben: Wenn sich die Möglichkeit zum Löschen einiger Blöcke ergibt, dann habe ich nur
- dieses zweidimensionale Array in dem beschrieben wird wo sich Blöcke befinden
- aus dem Array habe ich die x und y Koordinaten welche Blöcke entfernt werden
- die Position in der Liste des zuletzt bewegten Blockes (= die Letzte Position in der Liste)
Hat jemand eine Idee, wie ich das alles schöner und sauberer programmieren kann, mit einer geeigneten Datenstruktur für das Spiel? Wenn noch etwas besser erklärt werden muss gebt eben Bescheid, das ist nicht so einfach zu beschreiben.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.