/*verifica che la valutazione del bianco e del nero sia simmetrica*/ void test_eval() { /* Materiale:equal KS:equal OK PS:black (White isolated and hang)*/ char p[] = "2rq1rk1/pb2bppp/1pn1p3/2p5/3P4/P1PBPN2/1B2QPPP/3R1RK1 w - - 0 1"; /*char fp[]="3r1rk1/1b2qppp/p1pbpn2/3p4/2P5/1PN1P3/PB2BPPP/2RQ1RK1 w - - 0 1";*/ /*char p[] = "8/PPP4k/8/8/8/8/4Kppp/8 w - - ";*/ /* Materiale:black (bishop pair) KS:equal PS:black (white weak white squares)*/ /*char p[]="rnbqkb1r/pppp1ppp/8/4P3/3P4/3Q4/PP3PPP/RNB1K1NR b KQkq - 0 1";*/ /* Materiale:black (bishop pair) KS:equal PS:black (white weak white squares isol back)*/ /*char p[]="r2qkb1r/1p1b3p/p3ppp1/2p5/2P5/4P2Q/PB1P1PPP/RN3RK1 b k - 0 1";*/ /* Materiale:equal KS:equal PS:equal*/ /*char p[]="r2q1rk1/pb1nbppp/1p2pn2/8/1P6/P4NP1/1B1NPPBP/R2Q1RK1 w - - 0 0";*/ /* Materiale: KS:black PS:black--->sbagliato*/ /*char p[]="2br1rk1/pp2bppp/3p2n1/3P4/4P1n1/1B3NN1/PP1B2PP/R3R1K1 w - - 0 0";*/ /* Materiale: KS:white PS:*/ /*char p[]="R1n5/5rkp/3p2p1/2rNpq2/1NP4b/7P/4QPP1/5RK1 b - - 0 1";*/ int score; set_position(p); init_data(); print_board(); print_bitboard(); /*Precalcoliamo*/ Phase(WHITE) = eval_phase(WHITE); Phase(BLACK) = eval_phase(BLACK); score = eval(0); printf("eval %d\n", score); /*set_position(fp); init_data(); print_board(); print_bitboard(); Phase(WHITE)=eval_phase(WHITE); Phase(BLACK)=eval_phase(BLACK); score=eval(0); printf("eval %d",score);*/ }
static void check_hashkey_bit_not_set(Hash_Key key, s32bit index) { if( (key.key[index/32] & NTH_BIT(index%32)) ){ printf("%d", index); print_bitboard(HORIZONTAL); print_hashkey(key); fatal_error(1, "HashKey Incorrect.\n"); } }
void perft(char dep) { int start_time, end_time; char num[65]; float time; /*char p0[]="r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1"; char p0[]="8/PPP4k/8/8/8/8/4Kppp/8 w - - ";*/ /*8/2p5/3p4/KP5r/1R3p1k/6P1/4P3/8 b - - 0 1*/ /*char p0[]="8/2p5/3p4/KP5r/1R3p1k/6P1/4P3/8 b - - 0 1";*/ /*8/5kpp/2K5/p5q1/6P1/5P2/8/2q5 w - - 0 53*/ /*char p0[]="8/5kpp/2K5/p5q1/6P1/5P2/8/2q5 w - - 0 53"; char p0[]="8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -"; char p0[]="8/2p5/K2p4/1P5r/1R3p1k/8/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/1P5r/KR3p1k/8/4P1P1/8 b - - 0 1";//15----30 char p0[]="8/2p5/3p4/KP5r/R4p1k/8/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/5p1k/1R6/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/5p1k/8/1R2P1P1/8 b - - 0 1";//16 char p0[]="8/2p5/3p4/KP5r/5p1k/8/4P1P1/1R6 b - - 0 1";//16 char p0[]="8/2p5/3p4/KP5r/2R2p1k/8/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/3R1p1k/8/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/4Rp1k/8/4P1P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/5R1k/8/4P1P1/8 b - - 0 1";//2-----109 char p0[]="8/2p5/3p4/KP5r/1R3p1k/4P3/6P1/8 b - - 0 1";//15 char p0[]="8/2p5/3p4/KP5r/1R2Pp1k/8/6P1/8 b - e3 0 1";//17----32 ERROR??? char p0[]="8/2p5/3p4/KP5r/1R3p1k/6P1/4P3/8 b - - 0 1";//4 char p0[]="8/2p5/3p4/KP5r/1R3pPk/8/4P3/8 b - g3 0 1";//18-----22 */ init_board(); /*set_position(p0);*/ init_data(); print_board(); print_bitboard(); start_time = time_elapsed(); perf_t(dep); end_time = time_elapsed(); _ui64toa(Nodes,num,10); time = ((end_time - start_time) / (float)1000); printf("\nmoves %s in %.3f sec.\n", num, time); }
int main(void) { struct ai_state ai_state; struct bitboard board; enum color cur_player; struct move move; enum result result; int gameover = 1; static char buf[4096]; char *p; seed_ai(&ai_state); while (1) { if (gameover) { init_bitboard(&board); cur_player = WHITE; gameover = 0; } print_bitboard(&board, cur_player); printf("%s>%s ", cur_player == WHITE ? "\033[1;36m" : "\033[0;35m", "\033[0m"); fflush(stdout); fread_until((unsigned char *)buf, '\n', sizeof(buf), stdin); if ((p = strchr(buf, '\n')) != NULL) *p = '\0'; else continue; if (strcmp(buf, "quit") == 0) break; if (parse_san(&board, cur_player, buf, &move) != 0 || (result = make_move(&board, &move)) == ERROR) { printf("INVALID MOVE!\n"); continue; } #ifdef PATCHED_1 printf("\n%s\n%x\n", buf, calculate_csum(result)); #else printf("\n"); printf(buf); printf("\n%x\n", calculate_csum(result)); #endif switch (result) { case CHECK: printf("CHECK!\n"); break; case CHECKMATE: printf("CHECKMATE!\n"); gameover = 1; break; case STALEMATE: printf("STALEMATE!\n"); gameover = 1; break; case CONTINUE: default: break; } cur_player = (cur_player == WHITE ? BLACK : WHITE); } return 0; }