コード例 #1
0
ファイル: evaluation.c プロジェクト: tompko/Patrician
int eval_full_eval(Board* board)
{
	int score = 0;
	score += evaluate_piece(board->pieces[WHITE_PAWN],
	                        pieceSquareValues[WHITE_PAWN],
	                        pieceValues[WHITE_PAWN]);
	score += evaluate_piece(board->pieces[WHITE_KNIGHT],
	                        pieceSquareValues[WHITE_KNIGHT],
	                        pieceValues[WHITE_KNIGHT]);
	score += evaluate_piece(board->pieces[WHITE_BISHOP],
	                        pieceSquareValues[WHITE_BISHOP],
	                        pieceValues[WHITE_BISHOP]);
	score += evaluate_piece(board->pieces[WHITE_ROOK],
	                        pieceSquareValues[WHITE_ROOK],
	                        pieceValues[WHITE_ROOK]);
	score += evaluate_piece(board->pieces[WHITE_QUEEN],
	                        pieceSquareValues[WHITE_QUEEN],
	                        pieceValues[WHITE_QUEEN]);
	score += evaluate_piece(board->pieces[WHITE_KING],
	                        pieceSquareValues[WHITE_KING],
	                        pieceValues[WHITE_KING]);

	score -= evaluate_piece(board->pieces[BLACK_KING],
	                        pieceSquareValues[BLACK_KING],
	                        pieceValues[BLACK_KING]);
	score -= evaluate_piece(board->pieces[BLACK_QUEEN],
	                        pieceSquareValues[BLACK_QUEEN],
	                        pieceValues[BLACK_QUEEN]);
	score -= evaluate_piece(board->pieces[BLACK_ROOK],
	                        pieceSquareValues[BLACK_ROOK],
	                        pieceValues[BLACK_ROOK]);
	score -= evaluate_piece(board->pieces[BLACK_BISHOP],
	                        pieceSquareValues[BLACK_BISHOP],
	                        pieceValues[BLACK_BISHOP]);
	score -= evaluate_piece(board->pieces[BLACK_KNIGHT],
	                        pieceSquareValues[BLACK_KNIGHT],
	                        pieceValues[BLACK_KNIGHT]);
	score -= evaluate_piece(board->pieces[BLACK_PAWN],
	                        pieceSquareValues[BLACK_PAWN],
	                        pieceValues[BLACK_PAWN]);

	if(board->sideToMove == BLACK)
	{
		return -score;
	}
	return score;
}
コード例 #2
0
ファイル: board.c プロジェクト: mewo2/corvax
void load_fen(char* fen) {
    clear_board();
    char* ptr = fen;
    uint8_t rank = 7;
    uint8_t file = 0;
    do {
        switch (*ptr) {
            case 'K':
                fill_square(WHITE, KING, SQUARE(rank, file));
                file++;
                break;
            case 'Q':
                fill_square(WHITE, QUEEN, SQUARE(rank, file));
                file++;
                break;
            case 'R':
                fill_square(WHITE, ROOK, SQUARE(rank, file));
                file++;
                break;
            case 'B':
                fill_square(WHITE, BISHOP, SQUARE(rank, file));
                file++;
                break;
            case 'N':
                fill_square(WHITE, KNIGHT, SQUARE(rank, file));
                file++;
                break;
            case 'P':
                fill_square(WHITE, PAWN, SQUARE(rank, file));
                file++;
                break;
            case 'k':
                fill_square(BLACK, KING, SQUARE(rank, file));
                file++;
                break;
            case 'q':
                fill_square(BLACK, QUEEN, SQUARE(rank, file));
                file++;
                break;
            case 'r':
                fill_square(BLACK, ROOK, SQUARE(rank, file));
                file++;
                break;
            case 'b':
                fill_square(BLACK, BISHOP, SQUARE(rank, file));
                file++;
                break;
            case 'n':
                fill_square(BLACK, KNIGHT, SQUARE(rank, file));
                file++;
                break;
            case 'p':
                fill_square(BLACK, PAWN, SQUARE(rank, file));
                file++;
                break;
            case '/':
                rank--;
                file = 0;
                break;
            case '1':
                file += 1;
                break;
            case '2':
                file += 2;
                break;
            case '3':
                file += 3;
                break;
            case '4':
                file += 4;
                break;
            case '5':
                file += 5;
                break;
            case '6':
                file += 6;
                break;
            case '7':
                file += 7;
                break;
            case '8':
                file += 8;
                break;
        };
        ptr++;
    } while (*ptr != ' ');
    
    ptr++;

    if (*ptr == 'w') {
        b.stm = WHITE;
    } else {
        b.stm = BLACK;
    }

    ptr += 2;
    
    b.flags = 0;
    do {
        switch (*ptr) {
            case 'K':
                b.flags |= CASTLE_WK;
                break;
            case 'Q':
                b.flags |= CASTLE_WQ;
                break;
            case 'k':
                b.flags |= CASTLE_BK;
                break;
            case 'q':
                b.flags |= CASTLE_BQ;
                break;
        }
        ptr++;
    } while (*ptr != ' ');
    
    ptr++;

    if (*ptr != '-') {
        uint8_t file = ptr[0] - 'a';
        uint8_t rank = ptr[1] - '1';
        b.ep = SQUARE(rank, file);
    }

    do {
        ptr++;
    } while (*ptr != ' ');

    ptr++;
    int ply = 0;
    sscanf(ptr, "%d", &ply);
    b.ply = ply;
    positions[b.ply] = b.hash;
    for (square_t sq = 0; sq < 128; sq++) {
        if (!IS_SQUARE(sq)) continue;
        if (b.pieces[sq] != PIECE_EMPTY) {
            b.material_score += evaluate_piece(b.colors[sq], b.pieces[sq], sq);
        }
    }
}