Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Check if there are path tiles that are not connected int unconnectedTiles = 0; bool isConnected = false; for (int i = 0; i < PlacedTiles.GetLength(0); i++) { for (int j = 0; j < PlacedTiles.GetLength(1); j++) { isConnected = false; if (PlacedTiles[i, j] == (int)Tiles.Path) { // Check all 4 directions (if array boundaries X and Y are not hit) if (i > 0 && i < PlacedTiles.GetLength(0) && j > 0 && j < PlacedTiles.GetLength(1)) { if ((PlacedTiles[i - 1, j] == (byte)Tiles.Path || PlacedTiles[i + 1, j] == (byte)Tiles.Path || PlacedTiles[i, j - 1] == (byte)Tiles.Path || PlacedTiles[i, j + 1] == (byte)Tiles.Path)) { isConnected = true; } else { isConnected = false; unconnectedTiles++; } continue; } // Check all 3 directions, if ... } } } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Tris« (05.08.2018, 01:46)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Quellcode |
|
1 2 3 4 5 6 |
if( (i > 0 && PlacedTiles[i - 1, j] == (byte)Tiles.Path) || (i < PlacedTiles.GetLength(0) - 1 && PlacedTiles[i + 1, j] == (byte)Tiles.Path) || (j > 0 && PlacedTiles[i, j - 1] == (byte)Tiles.Path) || (j < PlacedTiles.GetLength(1) - 1 && PlacedTiles[i, j + 1] == (byte)Tiles.Path) ) |
Die Prüfung, ob es ein Randfeld ist, lässt sich relativ einfach mit einem Trick umgehen. Du machst die Map einfach an jeder Seite eine Feld breiter und prüfst nur den Index 1..n-2, wobei n die Höhe/Breite ist. Damit lassen sich diese Zusatzzeilen/Spalten nicht betreten und du brauchst sie auch nicht anzeigen. Es entfällt aber vollständig die Prüfung, ob du am Rand der Karte herum rechnest.
C#-Quelltext
1 2 3 4 5 6 if( (i > 0 && PlacedTiles[i - 1, j] == (byte)Tiles.Path) || (i < PlacedTiles.GetLength(0) - 1 && PlacedTiles[i + 1, j] == (byte)Tiles.Path) || (j > 0 && PlacedTiles[i, j - 1] == (byte)Tiles.Path) || (j < PlacedTiles.GetLength(1) - 1 && PlacedTiles[i, j + 1] == (byte)Tiles.Path) )
https://docs.microsoft.com/en-us/dotnet/…al-and-operator
Außerdem verstehe ich nicht warum ich das Enum Tiles vom Typ Byte nochmals zu Byte casten muss? (PlacedTiles[i, j - 1] == (byte)Tiles.Path)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Und wieso speichert man dann keinen Enum in der Map, sondern einen Int? Wäre doch cleverer dann keinen Int zu nehmen und sich den Cast zu schenken. Das ist vielleicht der bessere Tipp statt zu erklären, warum man casten muss.
Werbeanzeige