// get tile from array public bool GetTileAt(int row, int column, out Tile tile) { bool bOK = true; tile = null; try { tile = TileViewModels.GetValue(row, column) as Tile; } catch (Exception ex) { Logger.Instance.Error($"GetTileAt exception, {ex.Message}"); bOK = false; } return(bOK); }
// select a random direction and position bool SelectRandomPose(ref Word word) { bool bOK = false; try { int rows = TileViewModels.GetLength(0); int columns = TileViewModels.GetLength(1); int tries = 0; while (tries < Defines.MAX_RANDOM_TRIES) { int wordLen = word.Text.Length; int row = Random.Next(rows); int column = Random.Next(columns); word.Row = row; word.Column = column; var directions = new List <Defines.WordDirection>(); var directionsToTest = new List <Defines.WordDirection>(); foreach (Defines.WordDirection direction in Enum.GetValues(typeof(Defines.WordDirection))) { directionsToTest.Add(direction); } directionsToTest.Add(Defines.WordDirection.TopLeftToBottomRight); directionsToTest.Add(Defines.WordDirection.TopRightToBottomLeft); directionsToTest.Add(Defines.WordDirection.BottomLeftToTopRight); directionsToTest.Add(Defines.WordDirection.BottomRightToTopLeft); foreach (Defines.WordDirection direction in directionsToTest) { // test if word fits word.Direction = direction; if (word.WordFits(rows, columns)) { // test for collision with existing words bool bHasCollision = false; lock (WordsLock) { foreach (var existingWord in Words) { if (existingWord.HasCollision(word)) { bHasCollision = true; break; } } } if (!bHasCollision) { directions.Add(direction); } } } if (directions.Count > 0) { // select direction and set row and column for word object word.Direction = directions[Random.Next(directions.Count)]; bOK = true; break; } tries++; } } catch (Exception ex) { Logger.Instance.Error($"SelectRandomPose exception, {ex.Message}"); bOK = false; } return(bOK); }