evaluate

 avatar
unknown
c_cpp
2 years ago
2.0 kB
6
Indexable
int State::evaluate(){
  // [TODO] design your own evaluation function
  auto first_board = this->board.board[0];
  auto second_board = this->board.board[1];
  int now_value = 0, oppn_value = 0;
  int now_piece, oppn_piece;
  for(int i = 0; i < BOARD_H; i++){
    for(int j = 0; j < BOARD_W; j++){
      if((now_piece = first_board[i][j])){
        int tmp_val = 0;
        switch (now_piece){
          case 1: //pawn
            now_value += 1;
            tmp_val = 1;
            break;
          case 2: //rook
            now_value += 5;
            tmp_val = 5;
            break;
          case 3: //knight
            now_value += 3;
            tmp_val = 3;
            break;
          case 4: //bishop
            now_value += 3;
            tmp_val = 3;
            break;
          case 5: //queen
            now_value += 9;
            tmp_val = 9;
            break;
          case 6: //king
            now_value += 1000;
            break;
          default:
            break;
        }
      }
    }
  }
  for(int i = 0; i < BOARD_H; i++){
    for(int j = 0; j < BOARD_W; j++){
      if((oppn_piece = second_board[i][j])){
        int tmp_val = 0;
        // std::cout << this->player << "," << now_piece << ' ';
        switch (oppn_piece){
          case 1: //pawn
            oppn_value -= 1;
            tmp_val = 1;
            break;
          case 2: //rook
            oppn_value -= 5;
            tmp_val = 5;
            break;
          case 3: //knight
            oppn_value -= 3;
            tmp_val = 3;
            break;
          case 4: //bishop
            oppn_value -= 3;
            tmp_val = 3;
            break;
          case 5: //queen 
            oppn_value -= 9;
            tmp_val = 9;
            break;
          case 6: //king
            oppn_value -= 1000;
            break;
        }
      }
    }
  }
  return now_value - oppn_value;
}
Editor is loading...