void PrintRecord(Gamerec *g) { int i, len, count; unsigned char xside; Position temp; if(g->moves[0].mtype == EMPTY) { printf("\nGame record is empty.\n"); return; } StartPosition(&temp); printf("\n***** GAME RECORD *****\n"); for(len = 1; len < MAXGAMESIZE; len++) { if(g->moves[(len*(len-1)/2)].mtype != EMPTY) printf("\n %2d. ", len); count = 0; if(temp.side == WHITE) xside = BLACK; else xside = WHITE; while(count < len && !IsCheck(&temp, xside)) { i = len * (len - 1) / 2 + count; if(g->moves[i].mtype != EMPTY) { PrintMove(&temp, &(g->moves[i])); MakeMove(&temp, &(g->moves[i])); } else { printf("\n"); return; } count++; } if(temp.side == WHITE) temp.side = BLACK; else temp.side = WHITE; } }
BOOL CALLBACK SettingsProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: SetWindowText(GetDlgItem(hWnd, IDC_EMUPATH), set.emupath); SendMessage(GetDlgItem(hWnd, IDC_LOADROMSTARTUP), BM_SETCHECK, set.romAtStartup, NULL); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_ERASEEMUPATH: set.emupath[0] = '\0'; SetWindowText(GetDlgItem(hWnd, IDC_EMUPATH), ""); break; case IDC_LOADROMSTARTUP: set.romAtStartup = IsCheck(IDC_LOADROMSTARTUP); set.romAtStartup = set.romAtStartup; break; } break; case WM_CLOSE: EndDialog(hWnd, 0); break; } return 0; }
void Shogi::SetGenInfoPin( GEN_INFO& info ){ /************************************************ GEN_INFOの初期化(王手とピン) ************************************************/ // 既に調べた事がある場合はそれを使う。 if( kifu[know].chdir == NOJUDGE_CHECK ){ kifu[know].chdir = info.check = IsCheck( &info.cnt, &info.pin ); kifu[know].cnt = info.cnt; kifu[know].pin = info.pin; } else{ info.check = kifu[know].chdir; info.cnt = kifu[know].cnt; info.pin = kifu[know].pin; } }
void PrintDebugAI(PokerAI *ai, VarTran_t h, int flag, int type) { #if DEBUG_AI h = VarTran(ai); char *CARDS[] = {"XX", \ "2S", "2C", "2D", "2H", "3S", "3C", "3D", "3H", "4S", "4C", "4D", "4H", \ "5S", "5C", "5D", "5H", "6S", "6C", "6D", "6H", "7S", "7C", "7D", "7H", \ "8S", "8C", "8D", "8H", "9S", "9C", "9D", "9H", "TS", "TC", "TD", "TH", \ "JS", "JC", "JD", "JH", "QS", "QC", "QD", "QH", "KS", "KC", "KD", "KH", \ "AS", "AC", "AD", "AH" \ }; char action[20] = ""; int actionamount= ai->action.amount; int mynewpot = 0; sprintf(action, "%s", ActionGetStringNoHuanHang(&(ai->action))); //if (h.grp <= 7.0) { if (flag || h.round == 600 || h.stack+h.money<=3*h.BB) { printf("{%dof%d|%d|%3dr}", h.my_pos, h.noPlayers, h.noPlaying, h.round); if (type == 0) { //preflop printf("{ pv:%2d }", h.pv); } else { //flop printf("{ wp:%4.2f|eg:%4.1f}", h.wp, h.eg); } printf("{pos%d-%d|act:%dc,%dr,%drc}", h.pos, h.pos_type, h.call_no, h.raise_no, h.raise_no_c); printf("{%.15s:", action); if (IsFold()) { mynewpot = h.current_bet; printf("|%4dcXX>%4d", h.call_amount, mynewpot); } if (IsCall()) { mynewpot = h.call_amount+h.current_bet; printf("|%4dc-->%4d", h.call_amount, mynewpot); } if (IsCheck()){ mynewpot = h.current_bet; printf("|%4db==>%4d", 0, mynewpot); } if (IsBet()){ mynewpot = actionamount+h.call_amount+h.current_bet; printf("|%4db++>%4d", h.raise_amount, mynewpot); } if (IsAllin()) { mynewpot = h.stack+h.current_bet; printf("|%4db!!>%4d", h.raise_amount, mynewpot); } printf("}"); printf("-[pot:%4d|sk%5d|c_m%4d|r_m%4d]", h.pot, h.stack, h.call_amount, h.raise_amount); printf("-[%2s %2s ", CARDS[ai->game.hand[0]], CARDS[ai->game.hand[1]]); if (type == 0) { //preflop } else { //flop //printf("| "); for (int i = 0; i < ai->game.communitysize; i++) { printf("%2s ", CARDS[ai->game.community[i]]); } } printf("\b]\n"); } #endif }
int AnyLegalMoves(Position *pos) { int i, j, x, y, direc; unsigned char side = pos->side, xside; SQUARE board[12][12]; Listnode l, *ml = &l; ClearMoves(ml); for(i = 0; i < MAXLEGAL; i++) { ml->moves[i].oldep = pos->epstatus; ml->moves[i].oldcastle = pos->castle; } if(side == WHITE) { xside = BLACK; direc = 1; } else { xside = WHITE; direc = -1; } memcpy(&(board[0][0]), &(pos->board[0][0]), sizeof(SQUARE) * 144); for(i = 2; i < 10; i++) for(j = 2; j < 10; j++) { if(board[i][j] != 0 && (board[i][j] & side)) { if(board[i][j] & KNIGHT) { x = -1; y = -2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -1; y = 2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 1; y = -2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 1; y = 2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -2; y = -1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -2; y = 1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 2; y = -1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 2; y = 1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } } if((board[i][j] & BISHOP) || (board[i][j] & QUEEN)) { for(x = 1; (board[i-x][j-x] != OFFBOARD) && (!(board[i-x][j-x] & side)); x++) if(board[i-x][j-x] & xside) { AddMove(ml, i, j, i-x, j-x, CAPTURE); break; } else AddMove(ml, i, j, i-x, j-x, NORMAL); for(x = 1; (board[i-x][j+x] != OFFBOARD) && (!(board[i-x][j+x] & side)); x++) if(board[i-x][j+x] & xside) { AddMove(ml, i, j, i-x, j+x, CAPTURE); break; } else AddMove(ml, i, j, i-x, j+x, NORMAL); for(x = 1; (board[i+x][j-x] != OFFBOARD) && (!(board[i+x][j-x] & side)); x++) if(board[i+x][j-x] & xside) { AddMove(ml, i, j, i+x, j-x, CAPTURE); break; } else AddMove(ml, i, j, i+x, j-x, NORMAL); for(x = 1; (board[i+x][j+x] != OFFBOARD) && (!(board[i+x][j+x] & side)); x++) if(board[i+x][j+x] & xside) { AddMove(ml, i, j, i+x, j+x, CAPTURE); break; } else AddMove(ml, i, j, i+x, j+x, NORMAL); } if((board[i][j] & ROOK) || (board[i][j] & QUEEN)) { for(x = 1; (board[i-x][j] != OFFBOARD) && (!(board[i-x][j] & side)); x++) if(board[i-x][j] & xside) { AddMove(ml, i, j, i-x, j, CAPTURE); break; } else AddMove(ml, i, j, i-x, j, NORMAL); for(x = 1; (board[i+x][j] != OFFBOARD) && (!(board[i+x][j] & side)); x++) if(board[i+x][j] & xside) { AddMove(ml, i, j, i+x, j, CAPTURE); break; } else AddMove(ml, i, j, i+x, j, NORMAL); for(x = 1; (board[i][j-x] != OFFBOARD) && (!(board[i][j-x] & side)); x++) if(board[i][j-x] & xside) { AddMove(ml, i, j, i, j-x, CAPTURE); break; } else AddMove(ml, i, j, i, j-x, NORMAL); for(x = 1; (board[i][j+x] != OFFBOARD) && (!(board[i][j+x] & side)); x++) if(board[i][j+x] & xside) { AddMove(ml, i, j, i, j+x, CAPTURE); break; } else AddMove(ml, i, j, i, j+x, NORMAL); } if(board[i][j] & KING) { for(x = -1; x <= 1; x++) for(y = -1; y <= 1; y++) { if(x == 0 && y == 0) continue; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } } } if(board[i][j] & PAWN) { if(board[i][j+direc] == 0) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i, j+direc, PROMOTE); else AddMove(ml, i, j, i, j+direc, NORMAL); } if((direc == -1 && j == 8) || (direc == 1 && j == 3)) if(board[i][j+direc+direc] == 0 && board[i][j+direc] == 0) AddMove(ml, i, j, i, j+direc+direc, TWOMOVE); if((board[i-1][j+direc] != OFFBOARD) && (board[i-1][j+direc] & xside)) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i-1, j+direc, PROMCAP); else AddMove(ml, i, j, i-1, j+direc, CAPTURE); } if((board[i+1][j+direc] != OFFBOARD) && (board[i+1][j+direc] & xside)) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i+1, j+direc, PROMCAP); else AddMove(ml, i, j, i+1, j+direc, CAPTURE); } if(pos->epstatus > 0 && direc == 1) /* there is at least one ep square */ { if(j == 6 && IsEpSquare(i-1, 6, pos->epstatus) == 1 && board[i-1][j+direc] == 0) AddMove(ml, i, j, i-1, j+direc, ENPASSANT); if(j == 6 && IsEpSquare(i+1, 6, pos->epstatus) == 1 && board[i+1][j+direc] == 0) AddMove(ml, i, j, i+1, j+direc, ENPASSANT); } if(pos->epstatus > 0 && direc == -1) { if(j == 5 && IsEpSquare(i-1, 5, pos->epstatus) == 1 && board[i-1][j+direc] == 0) AddMove(ml, i, j, i-1, j+direc, ENPASSANT); if(j == 5 && IsEpSquare(i+1, 5, pos->epstatus) == 1 && board[i+1][j+direc] == 0) AddMove(ml, i, j, i+1, j+direc, ENPASSANT); } } for(x = 0; ml->moves[x].mtype != EMPTY; x++) { MakeMove(pos, &(ml->moves[x])); if(IsCheck(pos, side) == 1) { UnmakeMove(pos, &(ml->moves[x])); ml->moves[x].mtype = EMPTY; ml->num--; } else UnmakeMove(pos, &(ml->moves[x])); } if(ml->num > 0) { return 1; } } } return 0; }
void GenerateMoves(Listnode *ml, Position *pos) { int i, j, x, y, direc, cancastle; unsigned char side = pos->side, xside; SQUARE board[12][12]; if(side == WHITE) { xside = BLACK; direc = 1; } else { xside = WHITE; direc = -1; } ClearMoves(ml); for(i = 0; i < MAXLEGAL; i++) { ml->moves[i].oldep = pos->epstatus; ml->moves[i].oldcastle = pos->castle; } memcpy(&(board[0][0]), &(pos->board[0][0]), sizeof(SQUARE) * 144); for(i = 2; i < 10; i++) { for(j = 2; j < 10; j++) { if(board[i][j] != 0 && (board[i][j] & side)) { if(board[i][j] & KNIGHT) { x = -1; y = -2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -1; y = 2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 1; y = -2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 1; y = 2; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -2; y = -1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = -2; y = 1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 2; y = -1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } x = 2; y = 1; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } } if((board[i][j] & BISHOP) || (board[i][j] & QUEEN)) { for(x = 1; (board[i-x][j-x] != OFFBOARD) && (!(board[i-x][j-x] & side)); x++) if(board[i-x][j-x] & xside) { AddMove(ml, i, j, i-x, j-x, CAPTURE); break; } else AddMove(ml, i, j, i-x, j-x, NORMAL); for(x = 1; (board[i-x][j+x] != OFFBOARD) && (!(board[i-x][j+x] & side)); x++) if(board[i-x][j+x] & xside) { AddMove(ml, i, j, i-x, j+x, CAPTURE); break; } else AddMove(ml, i, j, i-x, j+x, NORMAL); for(x = 1; (board[i+x][j-x] != OFFBOARD) && (!(board[i+x][j-x] & side)); x++) if(board[i+x][j-x] & xside) { AddMove(ml, i, j, i+x, j-x, CAPTURE); break; } else AddMove(ml, i, j, i+x, j-x, NORMAL); for(x = 1; (board[i+x][j+x] != OFFBOARD) && (!(board[i+x][j+x] & side)); x++) if(board[i+x][j+x] & xside) { AddMove(ml, i, j, i+x, j+x, CAPTURE); break; } else AddMove(ml, i, j, i+x, j+x, NORMAL); } if((board[i][j] & ROOK) || (board[i][j] & QUEEN)) { for(x = 1; (board[i-x][j] != OFFBOARD) && (!(board[i-x][j] & side)); x++) if(board[i-x][j] & xside) { AddMove(ml, i, j, i-x, j, CAPTURE); break; } else AddMove(ml, i, j, i-x, j, NORMAL); for(x = 1; (board[i+x][j] != OFFBOARD) && (!(board[i+x][j] & side)); x++) if(board[i+x][j] & xside) { AddMove(ml, i, j, i+x, j, CAPTURE); break; } else AddMove(ml, i, j, i+x, j, NORMAL); for(x = 1; (board[i][j-x] != OFFBOARD) && (!(board[i][j-x] & side)); x++) if(board[i][j-x] & xside) { AddMove(ml, i, j, i, j-x, CAPTURE); break; } else AddMove(ml, i, j, i, j-x, NORMAL); for(x = 1; (board[i][j+x] != OFFBOARD) && (!(board[i][j+x] & side)); x++) if(board[i][j+x] & xside) { AddMove(ml, i, j, i, j+x, CAPTURE); break; } else AddMove(ml, i, j, i, j+x, NORMAL); } if(board[i][j] & KING) { for(x = -1; x <= 1; x++) for(y = -1; y <= 1; y++) { if(x == 0 && y == 0) continue; if((board[i+x][j+y] != OFFBOARD) && (!(board[i+x][j+y] & side))) { if(board[i+x][j+y] & xside) AddMove(ml, i, j, i+x, j+y, CAPTURE); else AddMove(ml, i, j, i+x, j+y, NORMAL); } } } if(board[i][j] & PAWN) { if(board[i][j+direc] == 0) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i, j+direc, PROMOTE); else AddMove(ml, i, j, i, j+direc, NORMAL); } if((direc == -1 && j == 8) || (direc == 1 && j == 3)) if(board[i][j+direc+direc] == 0 && board[i][j+direc] == 0) AddMove(ml, i, j, i, j+direc+direc, TWOMOVE); if((board[i-1][j+direc] != OFFBOARD) && (board[i-1][j+direc] & xside)) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i-1, j+direc, PROMCAP); else AddMove(ml, i, j, i-1, j+direc, CAPTURE); } if((board[i+1][j+direc] != OFFBOARD) && (board[i+1][j+direc] & xside)) { if((direc == -1 && j == 3) || (direc == 1 && j == 8)) AddMove(ml, i, j, i+1, j+direc, PROMCAP); else AddMove(ml, i, j, i+1, j+direc, CAPTURE); } /* there is at least one ep square */ if(pos->epstatus > 0 && direc == 1) { if(j == 6 && IsEpSquare(i-1, 6, pos->epstatus) == 1 && board[i-1][j+direc] == 0) AddMove(ml, i, j, i-1, j+direc, ENPASSANT); if(j == 6 && IsEpSquare(i+1, 6, pos->epstatus) == 1 && board[i+1][j+direc] == 0) AddMove(ml, i, j, i+1, j+direc, ENPASSANT); } if(pos->epstatus > 0 && direc == -1) { if(j == 5 && IsEpSquare(i-1, 5, pos->epstatus) == 1 && board[i-1][j+direc] == 0) AddMove(ml, i, j, i-1, j+direc, ENPASSANT); if(j == 5 && IsEpSquare(i+1, 5, pos->epstatus) == 1 && board[i+1][j+direc] == 0) AddMove(ml, i, j, i+1, j+direc, ENPASSANT); } } } } } if((pos->castle & WKC) && side == WHITE) { cancastle = 1; for(i = KFILE; i <= 8; i++) if(Attacked(pos, i, 2, xside) == 1) cancastle = 0; for(i = Minval(7, KFILE); i <= 8; i++) if(i != KFILE && i != KRFILE && board[i][2] != 0) cancastle = 0; if(cancastle == 1) AddMove(ml, KFILE, 2, 8, 2, KSCASTLE); } if((pos->castle & BKC) && side == BLACK) { cancastle = 1; for(i = KFILE; i <= 8; i++) if(Attacked(pos, i, 9, xside) == 1) cancastle = 0; for(i = Minval(7, KFILE); i <= 8; i++) if(i != KFILE && i != KRFILE && board[i][9] != 0) cancastle = 0; if(cancastle == 1) AddMove(ml, KFILE, 9, 8, 9, KSCASTLE); } if((pos->castle & WQC) && side == WHITE) { cancastle = 1; for(i = Minval(4, KFILE); i <= Maxval(4, KFILE); i++) if(Attacked(pos, i, 2, xside) == 1) cancastle = 0; for(i = Minval(QRFILE + 1, 4); i <= Maxval(5, KFILE); i++) if(i != KFILE && i != QRFILE && board[i][2] != 0) cancastle = 0; if(cancastle == 1) AddMove(ml, KFILE, 2, 4, 2, QSCASTLE); } if((pos->castle & BQC) && side == BLACK) { cancastle = 1; for(i = Minval(4, KFILE); i <= Maxval(4, KFILE); i++) if(Attacked(pos, i, 9, xside) == 1) cancastle = 0; for(i = Minval(QRFILE + 1, 4); i <= Maxval(5, KFILE); i++) if(i != KFILE && i != QRFILE && board[i][9] != 0) cancastle = 0; if(cancastle == 1) AddMove(ml, KFILE, 9, 4, 9, QSCASTLE); } for(i = 0; ml->moves[i].mtype != EMPTY; i++) { MakeMove(pos, &(ml->moves[i])); if(IsCheck(pos, side) == 1) { UnmakeMove(pos, &(ml->moves[i])); ml->moves[i].mtype = EMPTY; ml->num--; } else UnmakeMove(pos, &(ml->moves[i])); } }