diff options
author | eug-vs <eug-vs@keemail.me> | 2021-06-14 16:01:19 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2021-06-14 16:02:31 +0300 |
commit | 78c966ef9c0a3451aecb4abcc48f9e0944757990 (patch) | |
tree | 32766c7c32067dff6c29afddedfd008410c2f9f9 /src/main.c | |
parent | ee434da2fcd7873633d076790dd4689e81524fe5 (diff) | |
download | c-chess-78c966ef9c0a3451aecb4abcc48f9e0944757990.tar.gz |
fix: generate moves for black correctly
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -114,7 +114,7 @@ int generate_legal_moves(int origin, int* board) { int piece = board[origin]; int* move; - switch (piece) { + switch (piece & NO_COLOR) { case KNIGHT: move = knightMoves; break; @@ -131,21 +131,20 @@ int generate_legal_moves(int origin, int* board) { move = kingMoves; break; case PAWN: - move = pawnMoves; + if (piece & BLACK) move = blackPawnMoves; + else move = pawnMoves; break; default: + puts("No piece found!"); move = NULL; } while(*move) { - for (int square = origin; !(square & 0x88); square += *move) { - if (square != origin) { - if (board[square] != EMPTY) break; - board[square] = VISUAL; - if (piece == PAWN || piece == KNIGHT || piece == KING) break; - } + for (int square = origin + *move; !(square & 0x88); square += *move) { + if (board[square] != EMPTY) break; + board[square] = VISUAL; + if ((piece & NO_COLOR) == PAWN || piece == KNIGHT || piece == KING) break; } - move++; } } |