private int EvaluateDiagonalLines(Board board, int evaluation) { int diagonalEvaluation = evaluation; Player lineState = board.GetPiece(0, 0); if(lineState == board.CurrentPlayer) { diagonalEvaluation++; } else if(lineState != Player.None) { diagonalEvaluation--; } int continuationFactor = 1; for(int x = 1; x < Board.Dimension; x++) { Player currentPiece = board.GetPiece(x, x); if(currentPiece == board.CurrentPlayer) { diagonalEvaluation++; } else if(currentPiece != Player.None) { diagonalEvaluation--; } if(currentPiece == board.GetPiece(x - 1, x - 1)) { continuationFactor = this.UpdateContinuation(continuationFactor); if(currentPiece == board.CurrentPlayer) { diagonalEvaluation += continuationFactor; } else if(currentPiece != Player.None) { diagonalEvaluation -= continuationFactor; } } else { lineState = Player.None; continuationFactor = 1; } } if(lineState != Player.None && lineState != board.CurrentPlayer) { diagonalEvaluation = LosingLine; } else { if(lineState == board.CurrentPlayer) { diagonalEvaluation = WinningLine; } else { lineState = board.GetPiece(0, Board.Dimension - 1); if(lineState == board.CurrentPlayer) { diagonalEvaluation++; } else if(lineState != Player.None) { diagonalEvaluation--; } for(int x = 1; x < Board.Dimension; x++) { Player currentPiece = board.GetPiece(x, Board.Dimension - 1 - x); if(currentPiece == board.CurrentPlayer) { diagonalEvaluation++; } else if(currentPiece != Player.None) { diagonalEvaluation--; } if(currentPiece == board.GetPiece(x - 1, Board.Dimension - x)) { continuationFactor = this.UpdateContinuation(continuationFactor); if(currentPiece == board.CurrentPlayer) { diagonalEvaluation += continuationFactor; } else if(currentPiece != Player.None) { diagonalEvaluation -= continuationFactor; } } else { lineState = Player.None; continuationFactor = 1; } } if(lineState == board.CurrentPlayer) { diagonalEvaluation = WinningLine; } else if(lineState != Player.None) { diagonalEvaluation = LosingLine; } } } return diagonalEvaluation; }
private int EvaluateVerticalLines(Board board, int evaluation) { int verticalEvaluation = evaluation; bool hasWinningLine = false, hasLosingLine = false; for(int x = 0; x < Board.Dimension; x++) { Player lineState = board.GetPiece(x, 0); if(lineState == board.CurrentPlayer) { verticalEvaluation++; } else if(lineState != Player.None) { verticalEvaluation--; } int continuationFactor = 1; for(int y = 1; y < Board.Dimension; y++) { Player currentPiece = board.GetPiece(x, y); if(currentPiece == board.CurrentPlayer) { verticalEvaluation++; } else if(currentPiece != Player.None) { verticalEvaluation--; } if(currentPiece == board.GetPiece(x, y - 1)) { continuationFactor = this.UpdateContinuation(continuationFactor); if(currentPiece == board.CurrentPlayer) { verticalEvaluation += continuationFactor; } else if(currentPiece != Player.None) { verticalEvaluation -= continuationFactor; } } else { lineState = Player.None; continuationFactor = 1; } } if(lineState == board.CurrentPlayer) { hasWinningLine = true; break; } else if(lineState != Player.None) { hasLosingLine = true; break; } } if(hasWinningLine == true && hasLosingLine == false) { verticalEvaluation = WinningLine; } else if(hasLosingLine == true) { verticalEvaluation = LosingLine; } return verticalEvaluation; }