Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void GenerateAllMoves(const S_BOARD *pos, S_MOVELIST *list) {
- ASSERT(CheckBoard(pos));
- list->count = 0;
- int pce = EMPTY;
- int side = pos->side;
- int sq = 0; int t_sq = 0;
- int pceNum = 0;
- int dir = 0;
- int index = 0;
- int pceIndex = 0;
- if(side == WHITE) {
- for(pceNum = 0; pceNum < pos->pceNum[wP]; ++pceNum) {
- sq = pos->pList[wP][pceNum];
- ASSERT(SqOnBoard(sq));
- if(pos->pieces[sq + 10] == EMPTY) {
- AddWhitePawnMove(pos, sq, sq+10, list);
- if(RanksBrd[sq] == RANK_2 && pos->pieces[sq + 20] == EMPTY) {
- AddQuietMove(pos, MOVE(sq,(sq+20),EMPTY,EMPTY,MFLAGPS),list);
- }
- }
- if(!SQOFFBOARD(sq + 9) && PieceCol[pos->pieces[sq + 9]] == BLACK) {
- AddWhitePawnCapMove(pos, sq, sq+9, pos->pieces[sq + 9], list);
- }
- if(!SQOFFBOARD(sq + 11) && PieceCol[pos->pieces[sq + 11]] == BLACK) {
- AddWhitePawnCapMove(pos, sq, sq+11, pos->pieces[sq + 11], list);
- }
- if(sq + 9 == pos->enPas) {
- AddCaptureMove(pos, MOVE(sq,sq + 9,EMPTY,EMPTY,MFLAGEP), list);
- }
- if(sq + 11 == pos->enPas) {
- AddCaptureMove(pos, MOVE(sq,sq + 11,EMPTY,EMPTY,MFLAGEP), list);
- }
- }
- if(pos->castlePerm & WKCA) {
- if(pos->pieces[F1] == EMPTY && pos->pieces[G1] == EMPTY) {
- if(!SqAttacked(E1,BLACK,pos) && !SqAttacked(F1,BLACK,pos) ) {
- AddQuietMove(pos, MOVE(E1, G1, EMPTY, EMPTY, MFLAGCA), list);
- }
- }
- }
- if(pos->castlePerm & WQCA) {
- if(pos->pieces[D1] == EMPTY && pos->pieces[C1] == EMPTY && pos->pieces[B1] == EMPTY) {
- if(!SqAttacked(E1,BLACK,pos) && !SqAttacked(D1,BLACK,pos) ) {
- AddQuietMove(pos, MOVE(E1, C1, EMPTY, EMPTY, MFLAGCA), list);
- }
- }
- }
- } else {
- for(pceNum = 0; pceNum < pos->pceNum[bP]; ++pceNum) {
- sq = pos->pList[bP][pceNum];
- ASSERT(SqOnBoard(sq));
- if(pos->pieces[sq - 10] == EMPTY) {
- AddBlackPawnMove(pos, sq, sq-10, list);
- if(RanksBrd[sq] == RANK_7 && pos->pieces[sq - 20] == EMPTY) {
- AddQuietMove(pos, MOVE(sq,(sq-20),EMPTY,EMPTY,MFLAGPS),list);
- }
- }
- if(!SQOFFBOARD(sq - 9) && PieceCol[pos->pieces[sq - 9]] == WHITE) {
- AddBlackPawnCapMove(pos, sq, sq-9, pos->pieces[sq - 9], list);
- }
- if(!SQOFFBOARD(sq - 11) && PieceCol[pos->pieces[sq - 11]] == WHITE) {
- AddBlackPawnCapMove(pos, sq, sq-11, pos->pieces[sq - 11], list);
- }
- if(sq - 9 == pos->enPas) {
- AddCaptureMove(pos, MOVE(sq,sq - 9,EMPTY,EMPTY,MFLAGEP), list);
- }
- if(sq - 11 == pos->enPas) {
- AddCaptureMove(pos, MOVE(sq,sq - 11,EMPTY,EMPTY,MFLAGEP), list);
- }
- }
- // castling
- if(pos->castlePerm & BKCA) {
- if(pos->pieces[F8] == EMPTY && pos->pieces[G8] == EMPTY) {
- if(!SqAttacked(E8,WHITE,pos) && !SqAttacked(F8,WHITE,pos) ) {
- AddQuietMove(pos, MOVE(E8, G8, EMPTY, EMPTY, MFLAGCA), list);
- }
- }
- }
- if(pos->castlePerm & BQCA) {
- if(pos->pieces[D8] == EMPTY && pos->pieces[C8] == EMPTY && pos->pieces[B8] == EMPTY) {
- if(!SqAttacked(E8,WHITE,pos) && !SqAttacked(D8,WHITE,pos) ) {
- AddQuietMove(pos, MOVE(E8, C8, EMPTY, EMPTY, MFLAGCA), list);
- }
- }
- }
- }
- /* Loop for slide pieces */
- pceIndex = LoopSlideIndex[side];
- pce = LoopSlidePce[pceIndex++];
- while( pce != 0) {
- ASSERT(PieceValid(pce));
- for(pceNum = 0; pceNum < pos->pceNum[pce]; ++pceNum) {
- sq = pos->pList[pce][pceNum];
- ASSERT(SqOnBoard(sq));
- for(index = 0; index < NumDir[pce]; ++index) {
- dir = PceDir[pce][index];
- t_sq = sq + dir;
- while(!SQOFFBOARD(t_sq)) {
- // BLACK ^ 1 == WHITE WHITE ^ 1 == BLACK
- if(pos->pieces[t_sq] != EMPTY) {
- if( PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
- AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
- }
- break;
- }
- AddQuietMove(pos, MOVE(sq, t_sq, EMPTY, EMPTY, 0), list);
- t_sq += dir;
- }
- }
- }
- pce = LoopSlidePce[pceIndex++];
- }
- /* Loop for non slide */
- pceIndex = LoopNonSlideIndex[side];
- pce = LoopNonSlidePce[pceIndex++];
- while( pce != 0) {
- ASSERT(PieceValid(pce));
- for(pceNum = 0; pceNum < pos->pceNum[pce]; ++pceNum) {
- sq = pos->pList[pce][pceNum];
- ASSERT(SqOnBoard(sq));
- for(index = 0; index < NumDir[pce]; ++index) {
- dir = PceDir[pce][index];
- t_sq = sq + dir;
- if(SQOFFBOARD(t_sq)) {
- continue;
- }
- // BLACK ^ 1 == WHITE WHITE ^ 1 == BLACK
- if(pos->pieces[t_sq] != EMPTY) {
- if( PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
- AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
- }
- continue;
- }
- AddQuietMove(pos, MOVE(sq, t_sq, EMPTY, EMPTY, 0), list);
- }
- }
- pce = LoopNonSlidePce[pceIndex++];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment