TheRapture87
TheRapture87

Reputation: 1423

Evaluation Function Not Working

I'm trying to evaluate a Gomoku Board (8x8) where I have to get 5 in a row. I can't seem to figure out why my evaluation function is not working. Is there an easier way to write this rather than have to write loads of if statements?

public int evaluateBoard(Color[][] board) {
    int score = 0;
    // Check all the rows
    for (int i = 0; i < 8; i++) {
        int blank = 0;
        int black = 0;
        int white = 0;
        for (int j = 0; j < 8 - 5; ++j) {
            if (board[i][j] == Color.black) {
                black++;
                if (board[i][j + 1] == Color.BLACK) {
                    black++;
                    if (board[i][j + 2] == Color.BLACK) {
                        if (board[i][j + 3] == Color.BLACK) {
                            black++;
                            if (board[i][j + 4] == Color.BLACK) {
                                black++;
                            }
                        }
                    }
                }
            } else if (board[i][j] == Color.WHITE) {
                white++;
                if (board[i][j + 1] == Color.WHITE) {
                    white++;
                    if (board[i][j + 2] == Color.WHITE) {
                        white++;
                        if (board[i][j + 3] == Color.WHITE) {
                            white++;
                            if (board[i][j + 4] == Color.WHITE) {
                                white++;
                            }
                        }
                    }
                }
            }
        }
        System.out.println(black);
        score += scoreChange(black, white);
    }

    // Check all the columns
    for (int j = 0; j < 8; ++j) {
        int blank = 0;
        int black = 0;
        int white = 0;
        for (int i = 0; i < 8 - 5; ++i) {
            if (board[i][j] == Color.black) {
                black++;
                if (board[i + 1][j] == Color.BLACK) {
                    black++;
                    if (board[i + 2][j] == Color.BLACK) {
                        black++;
                        if (board[i + 3][j] == Color.BLACK) {
                            black++;
                            if (board[i + 4][j] == Color.BLACK) {
                                black++;
                            }
                        }
                    }
                }
            } else if (board[i][j] == Color.WHITE) {
                white++;
                if (board[i + 1][j] == Color.WHITE) {
                    white++;
                    if (board[i + 2][j] == Color.WHITE) {
                        white++;
                        if (board[i + 3][j] == Color.WHITE) {
                            white++;
                            if (board[i + 4][j] == Color.WHITE) {
                                white++;
                            }
                        }
                    }
                }
            }
        }
        score += scoreChange(black, white);
    }

    int black = 0;
    int white = 0;
    // Check diagonal (Second)
    for (int i = 7, j = 0; i > 3; --i, ++j) {
        if (board[i][j] == Color.black) {
            black++;
            if (board[i - 1][j + 1] == Color.black) {
                black++;
                if (board[i - 2][j + 2] == Color.black) {
                    black++;
                    if (board[i - 3][j + 3] == Color.black) {
                        black++;
                        if (board[i - 4][j + 4] == Color.black) {
                            black++;
                        }
                    }
                }
            }
        } else if (board[i][j] == Color.white) {
            white++;
            if (board[i - 1][j + 1] == Color.white) {
                white++;
                if (board[i - 2][j + 2] == Color.white) {
                    white++;
                    if (board[i - 3][j + 3] == Color.white) {
                        white++;
                        if (board[i - 4][j + 4] == Color.white) {
                            white++;
                        }
                    }
                }
            }
        }
    }
    score += scoreChange(black, white);

    black = 0;
    white = 0;
    // Check Diagonal (First)
    for (int i = 0, j = 0; i < 4; ++i, ++j) {
        if (board[i][j] == Color.black) {
            black++;
            if (board[i + 1][j + 1] == Color.black) {
                black++;
                if (board[i + 2][j + 2] == Color.black) {
                    black++;
                    if (board[i + 3][j + 3] == Color.black) {
                        black++;
                        if (board[i + 4][j + 4] == Color.black) {
                            black++;
                        }
                    }
                }
            }
        } else if (board[i][j] == Color.white) {
            white++;
            if (board[i + 1][j + 1] == Color.white) {
                white++;
                if (board[i + 2][j + 2] == Color.white) {
                    white++;
                    if (board[i + 3][j + 3] == Color.white) {
                        white++;
                        if (board[i + 4][j + 4] == Color.white) {
                            white++;
                        }
                    }
                }
            }
        }
    }
    score += scoreChange(black, white);
    return score;
}

private int scoreChange(int black, int white) {
    int change;

    if (black == 5) {
        change = -10000;
    } else if (black == 4 && white == 0) {
        change = -1000;
    } else if (black == 3 && white == 0) {
        change = -100;
    } else if (black == 2 && white == 0) {
        change = -10;
    } else if (black == 1 && white == 0) {
        change = -1;
    } else if (white == 5) {
        change = 10000;
    } else if (white == 4 && black == 0) {
        change = 1000;
    } else if (white == 3 && black == 0) {
        change = 100;
    } else if (white == 2 && black == 0) {
        change = 10;
    } else if (white == 1 && black == 0) {
        change = 1;
    } else {
        change = 0;
    }
    return change;
}

Upvotes: 1

Views: 198

Answers (0)

Related Questions