public WinState GetWinState() { FieldState LastPiece = FieldState.EMPTY; int EqualPiecesInRow = 0; // Check columns for (int column = 0; column < Board.GetBoardSize(); column++) { for (int row = 0; row < Board.GetBoardSize(); row++) { if (LastPiece != Board.BoardState[column, row]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; // Check rows for (int row = 0; row < Board.GetBoardSize(); row++) { for (int column = 0; column < Board.GetBoardSize(); column++) { if (LastPiece != Board.BoardState[column, row]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; // Check diagonals for (int row = NumWinPieces - 1; row < Board.GetBoardSize(); row++) { for (int column = 0; column <= row; column++) { if (LastPiece != Board.BoardState[column, row - column]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row - column]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } if (row > 0) { LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; for (int column = Board.GetBoardSize() - 1; column >= row; column--) { if (LastPiece != Board.BoardState[column, row + (Board.GetBoardSize() - 1 - column)]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row + (Board.GetBoardSize() - 1 - column)]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; } // Check anti diagonals for (int row = Board.GetBoardSize() - 1 - (NumWinPieces - 1); row >= 0; row--) { for (int column = 0; column <= Board.GetBoardSize() - 1 - row; column++) { if (LastPiece != Board.BoardState[column, row + column]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row + column]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } if (row > 0) { LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; for (int column = Board.GetBoardSize() - 1; column >= row; column--) { if (LastPiece != Board.BoardState[column, row + (Board.GetBoardSize() - 1 - column)]) { EqualPiecesInRow = 0; } LastPiece = Board.BoardState[column, row + (Board.GetBoardSize() - 1 - column)]; EqualPiecesInRow++; if (EqualPiecesInRow == NumWinPieces && LastPiece != FieldState.EMPTY) { return(LastPiece == FieldState.X ? WinState.XWIN : WinState.OWIN); } } } LastPiece = FieldState.EMPTY; EqualPiecesInRow = 0; } return(Board.IsFull() ? WinState.DRAW : WinState.INGAME); }