public GameState MakeStep(int smallFieldNumber, int cellNumber) { if (!_lastStep.Equals(smallFieldNumber) && !_lastStep.Equals(-1) && !_model.BigField.SmallFields[_lastStep].Full) { // Если ходит в маленькое поле, в которое не должен ходить return(GameState.WrongSmallField); } if (_model.BigField.SmallFields[smallFieldNumber].Full) { // Если это маленькое поле полностью заполнено return(GameState.FullField); } if (_model.BigField.SmallFields[smallFieldNumber].Cells[cellNumber].CellState != CellState.None) { // Эта клетка занята return(GameState.BusyCell); } _lastStep = cellNumber; _model.BigField.SmallFields[smallFieldNumber].Cells[cellNumber].CellState = _xStep ? CellState.X : CellState.O; _model.BigField.SmallFields[smallFieldNumber].Full = _model.BigField.SmallFields[smallFieldNumber].IsFull(); // Если в этом поле уже выиграли, то не надо проверять условия на победу if (_model.BigField.SmallFields[smallFieldNumber].Winner.Equals(Winner.None)) { if (_model.BigField.SmallFields[smallFieldNumber].IsWin(cellNumber, _xStep)) { if (IsWin(smallFieldNumber)) { // Если выиграл всю игру. В поле _winner - победитель игры. _littlePoint = smallFieldNumber; _xStep = !_xStep; return(GameState.WinGame); } // Если выиграл маленькое поле, по smallFieldNumber можешь узнать, какие клетки нужно закрасить. // А по _xStep - чей ход был (для цвета). _littlePoint = smallFieldNumber; _xStep = !_xStep; return(GameState.WinSmallField); } } if (_model.Full()) { return(GameState.GameOver); } // Ход прошел успешно. Нет ни побед, ни ошибок _xStep = !_xStep; return(GameState.Ok); }