Ich arbeite an einem boggle-artigen Spiel für Android mit libgdx. Dem Benutzer wird ein 4x4-Buchstabengitter angezeigt, und er muss Wörter finden, indem er seinen Finger über die Buchstaben zieht.
Im Gegensatz zu Boggle möchte ich, dass gebrauchte Buchstaben verschwinden. Die verbleibenden Buchstaben fallen nach unten (auf die Unterseite der Tafel, die Bildschirmausrichtung ist festgelegt) und die Tafel wird von oben nachgefüllt. Benutzer können das Board drehen, um zu versuchen, schwer zu verwendende Buchstaben durch strategische Wortauswahl an einer besseren Stelle zu platzieren.
Ein Beispiel:
d g a o
u o r T
h v R I
d G n a
Wenn ich das Wort GRIT auswähle, verschwinden diese Buchstaben und die restlichen fallen herunter:
d
u g a
h o r o
d v n a
und dann durch neue Buchstaben ersetzt werden
d w x y
u g a z
h o r o
d v n a
Ich weiß nicht, wie ich das Brett und die Kacheln darstellen soll.
Ich habe versucht, das Brett als Matrix darzustellen, um die ausgewählten Kacheln und gültigen Züge sowie die in einer Matrix gespeicherten Kacheln im Auge zu behalten, damit eine einfache Zuordnung möglich ist. Das funktioniert, aber ich musste etwas Code schreiben, um das Board zu drehen.
Wie gehen andere Spiele mit diesem Problem um?
EDIT: Wenn ich darüber nachdenke, sollte ich meinen Berührungspunkt wirklich nur entsprechend der Boardrotation verarbeiten, damit die Zellen konstant bleiben. Anbei ein Bild von dem, was ich denke.
Antworten:
Ich würde dafür überhaupt keine Arrays verwenden, da die Verwaltung immer komplexer wird. Erstellen Sie eine benutzerdefinierte Board-Datenstruktur mit Knoten, die Verweise auf ihre Nachbarn enthalten. Dies ist im Wesentlichen eine mehrdimensionale LinkedList von Knoten. Wenn der Buchstabe eines Knotens entfernt wird, können andere Knoten dies auf diese Weise gekapselt anzeigen. Dies vermeidet komplizierte Array-Arithmetik. Sie benötigen eine große Funktion, um alles richtig zu verbinden, aber sobald die Logik verknüpft ist, sollte es viel einfacher sein, mit ihr zu arbeiten.
Für Ihre Randknoten sind die Nachbarn auf festgelegt.
null
Vergewissern Sie sich daher, dass Sie diese in Ihren Methoden in der Knotenklasse, die auf Nachbarn verweisen müssen, entsprechend behandeln.Ich habe diesen Ansatz für die Implementierung von Conways Game Of Life verwendet Sobald Sie es eingerichtet haben, wird die Komplexität des Hinzufügens von Logik, die den Status eines Knotens basierend auf den Nachbarn ändert, drastisch verringert.
Abhängig davon, wie Sie die Knoten in der Karte manipulieren, benötigen Sie möglicherweise eine Kartenmethode, um den nächsten Status oder die nächste Aktion zu durchlaufen und zu bestimmen und diese in jedem Knoten zu speichern. Folgen Sie dem, indem Sie jeden Knoten iterieren und in den neuen Zustand versetzen. Auf diese Weise wird vermieden, dass Knoten ihren nächsten Status bestimmen, indem sie Knoten betrachten, die sich bereits geändert haben.
quelle
Ja, die Lösung besteht darin, dass Sie einen Wert aus Ihrer Matrix oder einem Array erhalten und diesen Wert für ein temporäres Array oder eine temporäre Matrix festlegen. Anschließend wird der Wert von dort festgelegt. Ich fügte unten Code hinzu, ich denke, es hilft Ihnen
quelle