Wenn man auf eines der Ruinen Spielfelder tritt, soll ein Puzzle gestartet werden, ich hatte einige Zeit damit verbracht, nach geeigneten Spielen zu suchen. Mein Ziel war, Spiele zu finden welche zu einem gewissen grad dem Zufall überlassen werden können.
Das Lights-Out Puzzle ist eines dieser Mini-Games, für die Puzzle-Szene wurden natürlich auch wieder Hintergründe und Assets erstellt (siehe Bild oben).
Das Lights-Out Puzzle funktioniert so: alle Felder beginnen in einem Deaktiviertem oder Blockiertem Zustand, sobald der Cursor über einem Feld ist, und den Action-Button drückt, wird das Feld und alle Angrenzenden Felder aktiviert.
Das Ziel des Spiels ist es, alle Felder in einen aktivierten Zustand zu bekommen – Außer die Blockierten, bei denen muss einfach nichts gemacht werden.
Sobald die Logik hinter dem Spiel funktioniert, möchte ich eine Art Spezifische Währung einbauen, welche man durch Puzzles bekommt.
Diese wird dann für Mid oder End-Game dinge benutzt, um die Puzzles ins Game einzubinden, dass diese einen Sinn im Spiel haben.
Das gesamte Mini-Game besteht aus 7 Assets, von denen ich 6 neu gemacht hatte, der Cursor ist vom Rucksack übernommen.
Wie im Rest des Spiels sind die Assets Traditionelle Kunst, Wasserfarbe mit Micron Linework -mein bevorzugtes Medium-.
Das macht den Look etwas mehr Matt, und nicht so Saturiert wie man es aus vielen anderen Spielen aus dem Genre fallen.
Das gesammte Lights-Out-Puzzle besteht eigentlich aus einer Vielzahl an if Bedingungen, und einem Zweidimensionalem Array, welches den Status des Feldes trackt.
Mit jeder Feldveränderung muss auch der Status im Array geändert werden.
spielfeldArray[cursorPosition.x+1][cursorPosition.y] = "DISABLED"
Das Raster ist einfach nur eine Tile-Map Node, welche das Tile bei Aktion verändert mit der praktischen funktion set_cell.
Ist die Win-Condition erreicht, verändert es jedes Feld in das gebrochene Tile (siehe Rechts)
set_cell(LAYER, Vector2(cursorPosition.x +1 , cursorPosition.y), 0, DISABLEDTILE)
Auf der Rechten Seite sind einige interessante Code Snippets.
Solltest du Interesse an Game Development haben, ich streame meinen GameDev Prozess, die Traditional-Art Sessions und hin und wieder Games auf Twitch.
Für Chats steht auch ein Discord bereit!
Spielfeld Generator:
func _spielfeld(rows, cols):
for x in range(rows):
spielfeldArray.append([]) # Hinzufügen einer leeren Liste für jede Spalte
for y in range(cols):
set_cell(LAYER, Vector2(x,y), 0, DISABLEDTILE)
spielfeldArray[x].append("DISABLED")
Cursorlocation Changer:
func setChangeTile():
if cursorPosition.y >= 0 and cursorPosition.x >= 0 and cursorPosition.y <= spielfeldY-1 and cursorPosition.x <= spielfeldX-1 :
if spielfeldArray[cursorPosition.x][cursorPosition.y] == "DISABLED" and spielfeldArray[cursorPosition.x][cursorPosition.y] != "BLOCKED":
set_cell(LAYER, cursorPosition, 0, ENABLEDTILE)
spielfeldArray[cursorPosition.x][cursorPosition.y] = "ENABLED"
counterTiles = counterTiles + 1
_closeTilesLightup()
elif spielfeldArray[cursorPosition.x][cursorPosition.y] == "ENABLED" and spielfeldArray[cursorPosition.x][cursorPosition.y] != "BLOCKED":
set_cell(LAYER, cursorPosition, 0, DISABLEDTILE)
spielfeldArray[cursorPosition.x][cursorPosition.y] = "DISABLED"
counterTiles = counterTiles - 1
_closeTilesLightup()
else: pass
else: pass