public void PlaceGameTags() { var startTime = DateTime.UtcNow; var counter = 0; do { //RemoveStartingBaseFromCoordinatesSeed(); var coordinate = GetRandomCoordinatesFromSeed(); RemoveCoordinatesFromSeed(coordinate); var valueSeed = GetValueSeed(); if (_gameBoard.Where(t => t.Value != null).Any(t => t.Coordinate != coordinate) || _gameBoard.Count == 0) { do { var value = GetRandomValueFromSeed(valueSeed); valueSeed = RemoveValueFromSeed(valueSeed, value); var tag = new GameBoardTag(coordinate, value); if (_boardRules.ValidateGameBoardTag(tag, _gameBoard, _startingBase)) { counter++; _gameBoard.AddOrReplace(tag); break; } } while (valueSeed.Length != 0); } BackTrackIfCoordinatesSeedIsEmpty(); if (counter == 35000) { Console.WriteLine("Not SOlved!!!!!"); } } while (_gameBoard.Count(t => t.Value != null) < 81 && counter < 35000); Console.WriteLine(counter); }
public void AddOrReplace(GameBoardTag tag) { ValidateTag(tag); RemoveAt(tag.Coordinate); _boardTags.Add(tag); _boardTags = _boardTags.OrderByDescending(r => r.Coordinate.Y).ThenBy(c => c.Coordinate.X).ToList(); }
private void CheckIfBoardSlotIsFree(GameBoardTag tag) { if (_boardTags.Any(t => t.Coordinate.X == tag.Coordinate.X && t.Coordinate.Y == tag.Coordinate.Y && t.Value != null)) { throw new ArgumentException("Slot is taken"); } }
private void ValidateGameTagValue(GameBoardTag tag) { if (tag.Value > _gameBoardRoot) { throw new ArgumentException("Invalid value. " + "Min value is 1. " + $"Max value is {_gameBoardRoot}"); } }
public void Replace(GameBoardTag tag) { ValidateTag(tag); if (!RemoveAt(tag.Coordinate)) { throw new ArgumentException("Tag not found"); } _boardTags.Add(tag); _boardTags = _boardTags.OrderByDescending(r => r.Coordinate.Y).ThenBy(c => c.Coordinate.X).ToList(); }
public void Add(GameBoardTag tag) { if (tag == null) { throw new ArgumentNullException(nameof(tag)); } CheckIfBoardSlotIsFree(tag); ValidateTag(tag); _boardTags.Add(tag); _boardTags = _boardTags.OrderByDescending(r => r.Coordinate.Y).ThenBy(c => c.Coordinate.X).ToList(); }
public bool Remove(GameBoardTag tag) { return(_boardTags.Remove(tag)); }
private void ValidateTag(GameBoardTag tag) { ValidateCoordinates(tag.Coordinate); ValidateGameTagValue(tag); }