コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 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();
 }
コード例 #3
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 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");
     }
 }
コード例 #4
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 private void ValidateGameTagValue(GameBoardTag tag)
 {
     if (tag.Value > _gameBoardRoot)
     {
         throw new ArgumentException("Invalid value. " +
                                     "Min value is 1. " +
                                     $"Max value is {_gameBoardRoot}");
     }
 }
コード例 #5
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 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();
 }
コード例 #6
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 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();
 }
コード例 #7
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 public bool Remove(GameBoardTag tag)
 {
     return(_boardTags.Remove(tag));
 }
コード例 #8
0
ファイル: GameBoard.cs プロジェクト: ooleoole/SodukoNew
 private void ValidateTag(GameBoardTag tag)
 {
     ValidateCoordinates(tag.Coordinate);
     ValidateGameTagValue(tag);
 }