Untitled
unknown
c_cpp
3 years ago
2.5 kB
6
Indexable
int State::evaluate(){
// [TODO] design your own evaluation function
auto self_board = this->board.board[this->player];
auto oppn_board = this->board.board[1 - this->player];
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 = self_board[i][j])){
switch (now_piece){
case 1: //pawn
if(i == 4 && player == 0){
now_value += 4;
}
if(i == 1 && player == 1){
now_value += 4;
}
now_value += 1;
break;
case 2: //rook
now_value += 5;
break;
case 3: //knight
now_value += 3;
break;
case 4: //bishop
now_value += 3;
break;
case 5: //queen
now_value += 9;
break;
case 6: //king
now_value += 15;
break;
default:
break;
}
if(i == 0 || i == BOARD_H - 1 || j == 0 || j == BOARD_W - 1)
now_value -= 2;
if(i == 1 || i == BOARD_W - 2 || j == 0 || j == BOARD_W - 1)
now_value -= 1;
}
}
}
for(int i = 0; i < BOARD_H; i++){
for(int j = 0; j < BOARD_W; j++){
if((oppn_piece = oppn_board[i][j])){
// std::cout << this->player << "," << now_piece << ' ';
switch (oppn_piece){
case 1: //pawn
if(i == 4 && player == 0){
now_value += 4;
}
if(i == 1 && player == 1){
now_value += 4;
}
oppn_value += 1;
break;
case 2: //rook
oppn_value += 5;
break;
case 3: //knight
oppn_value += 3;
break;
case 4: //bishop
oppn_value += 3;
break;
case 5: //queen
oppn_value += 9;
break;
case 6: //king
oppn_value += 15;
break;
}
if(i == 0 || i == BOARD_H - 1 || j == 0 || j == BOARD_W - 1)
oppn_board -= 2;
if(i == 1 || i == BOARD_W - 2 || j == 0 || j == BOARD_W - 1)
oppn_board -= 1;
}
}
}
// std::cout << "value = " << now_value - oppn_value << "\n";
return now_value - oppn_value;
}Editor is loading...