bool FindPaths() { foreach (GameTile tile in tiles) { if (tile.Content.Type == GameTileContentType.Destination) { tile.BecomeDestination(); searchFrontier.Enqueue(tile); } else { tile.ClearPath(); } } if (searchFrontier.Count == 0) { return(false); } while (searchFrontier.Count > 0) { GameTile tile = searchFrontier.Dequeue(); if (tile != null) { if (tile.IsAlternative) { searchFrontier.Enqueue(tile.GrowPathNorth()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathWest()); } else { searchFrontier.Enqueue(tile.GrowPathWest()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathNorth()); } } } foreach (GameTile tile in tiles) { if (!tile.HasPath) { return(false); } } if (showPaths) { foreach (GameTile tile in tiles) { tile.ShowPath(); } } return(true); }
bool FindPaths() { foreach (GameTile tile in tiles) //Kontrolle ob alle Kacheln einen gültigen Pfad haben, wenn nicht wird der letzte Befehl zurück gesetzt { if (!tile.HasPath) { return(false); } } foreach (GameTile tile in tiles) { if (tile.Content.Type == GameTileContentType.Destination) { tile.BecomeDestination(); //Bestimmt das Ziel der Pfeile searchFrontier.Enqueue(tile); //Bestimmt das Ziel der Pfeile } else { tile.ClearPath(); } } if (searchFrontier.Count == 0) { return(false); } while (searchFrontier.Count > 0) //Solange wiederholen, solang sich die Kacheln in den Grenzen befinden { GameTile tile = searchFrontier.Dequeue(); if (tile != null) //überprüfen ob davor noch eine Kachel ist { if (tile.IsAlternative) { searchFrontier.Enqueue(tile.GrowPathNorth()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathWest()); } else { searchFrontier.Enqueue(tile.GrowPathWest()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathNorth()); } } } if (showPaths) //wird nur angezeigt, wenn bool == true { foreach (GameTile tile in tiles) { tile.ShowPath(); } } return(true); }
private void FindPaths() { foreach (GameTile t in tiles) { t.ClearPath(); } // default tiles[tiles.Length / 2].BecomeDestination(); searchFrontier.Enqueue(tiles[tiles.Length / 2]); while (searchFrontier.Count > 0) { GameTile tile = searchFrontier.Dequeue(); if (tile != null) { if (tile.IsAlternative) { searchFrontier.Enqueue(tile.GrowPathNorth()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathWest()); } else { searchFrontier.Enqueue(tile.GrowPathWest()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathNorth()); } } } foreach (GameTile tile in tiles) { tile.ShowPath(); } }
//Set tile[0] as destination for the moment public bool FindPaths() { //first step is to clear the path of all tiles, then make one tile the destination and add it to the frontier foreach (GameTile tile in tiles) { if (tile.Content.Type == GameTileContentType.Destination) { tile.BecomeDestination(); searchFrontier.Enqueue(tile); } else { tile.ClearPath(); } } //Check if ther's at least one destination cell if (searchFrontier.Count == 0) { return(false); } //Next step is to take the single tile out of the frontier and grow the path to its neighbors while (searchFrontier.Count > 0) { GameTile tile = searchFrontier.Dequeue(); if (tile != null) { if (tile.IsAlternative) { searchFrontier.Enqueue(tile.GrowPathNorth()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathWest()); } else { searchFrontier.Enqueue(tile.GrowPathWest()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathNorth()); } } } //Check that all tiles have a path foreach (GameTile tile in tiles) { if (!tile.HasPath) { return(false); } } //Put the correct rotation for all the ties if disered if (showPaths) { foreach (GameTile tile in tiles) { tile.ShowPath(); } } return(true); }