Beispiel #1
0
 /// <summary>
 /// Checks whether it is ok to perform move on Position <paramref name="pos"/> on SubBoard <paramref name="board"/>.
 /// </summary>
 /// <param name="board"></param>
 /// <param name="pos"></param>
 /// <returns></returns>
 public bool IsValidMove(SubBoard board, Position pos)
 {
     return(pos.X >= 0 &&
            pos.Y >= 0 &&
            pos.X <= 2 &&
            pos.Y <= 2 &&
            board.GetMarker(pos) == MarkerType.Empty &&
            board.IsActive);
 }
Beispiel #2
0
        public IEnumerable <BoardSquare> GetSubBoard(SubBoard subBoard)
        {
            var result = new List <BoardSquare>(9);

            for (var row = 0; row < _board.GetLength(0); row++)
            {
                for (var col = 0; col < _board.GetLength(1); col++)
                {
                    if (_board[row, col].GetSubBoard(col, row) != subBoard)
                    {
                        continue;
                    }

                    if (!_board[row, col].IsEmpty())
                    {
                        result.Add(_board[row, col]);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Loads a board from a persisted state into <paramref name="boardDto"/>.
        /// </summary>
        /// <param name="rules">The rules to use with the loaded board.</param>
        /// <param name="boardDto">The object to store the state in.</param>
        /// <returns></returns>
        public bool LoadBoard(IRules rules, out BoardDto boardDto)
        {
            try
            {
                boardDto = new BoardDto();
                if (!_fileHandler.FileExists())
                {
                    return(false);
                }
                List <bool>               activeSubboards;
                List <MarkerType>         subboardWinners;
                List <List <MarkerType> > subboardsAsMarkerTypeArrays;
                try
                {
                    var jsonDataString = _fileHandler.Read();
                    var jsonObject     = JObject.Parse(jsonDataString);

                    boardDto.IsPlayerOneTurn = (bool)jsonObject["game"]["isPlayerOneTurn"];
                    boardDto.Winner          = (MarkerType)(int)jsonObject["game"]["winner"];
                    boardDto.PlayerOne       = (MarkerType)(int)jsonObject["game"]["playerOne"];
                    boardDto.PlayerTwo       = (MarkerType)(int)jsonObject["game"]["playerTwo"];

                    activeSubboards = jsonObject["game"]["activeSubboards"].Select(isActive => (bool)isActive)
                                      .ToList();
                    subboardWinners = jsonObject["game"]["subboardWinners"].Select(winner => (MarkerType)(int)winner)
                                      .ToList();
                    var subboards = from sb in jsonObject["game"]["board"] select(JArray) sb;
                    subboardsAsMarkerTypeArrays = subboards.Select(b => b.ToObject <List <MarkerType> >()).ToList();
                }
                catch (Exception e)
                {
                    throw new SerializationException("Failed to deserialize from file, see inner exception for details",
                                                     e);
                }

                var subboardArray    = new SubBoard[3, 3];
                var tempSubboardList = new List <SubBoard>();
                int counter;
                for (var i = 0; i < 9; i++)
                {
                    counter = 0;
                    var subboardAsArray = subboardsAsMarkerTypeArrays[i];
                    var markerTypeArray = new MarkerType[3, 3];

                    for (var j = 0; j < 3; j++)
                    {
                        for (var k = 0; k < 3; k++)
                        {
                            markerTypeArray[j, k] = subboardAsArray[counter];
                            counter++;
                        }
                    }
                    tempSubboardList.Add(new SubBoard(rules, markerTypeArray, activeSubboards[i], subboardWinners[i]));
                }

                counter = 0;
                for (var i = 0; i < 3; i++)
                {
                    for (var j = 0; j < 3; j++)
                    {
                        subboardArray[i, j] = tempSubboardList[counter];
                        counter++;
                    }
                }
                boardDto.Subboards = subboardArray;
                return(true);
            }
            catch (Exception e)
            {
                throw new LoadStateFailException("Failed to LoadBoard, see inner exception for details", e);
            }
        }