From 8857dec6cdbd3cc93f46340aaae2f100c31133fa Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sun, 2 Jul 2023 12:15:22 +0200 Subject: [PATCH] cleanup --- src/brchess.c | 24 ++++++++++-------- src/move.c | 70 ++++++++++++++++++++++++++++++++++++++------------- src/move.h | 3 ++- 3 files changed, 67 insertions(+), 30 deletions(-) diff --git a/src/brchess.c b/src/brchess.c index 94b4681..64b1b0b 100644 --- a/src/brchess.c +++ b/src/brchess.c @@ -12,7 +12,6 @@ */ -#include #include #include #include @@ -23,13 +22,13 @@ #include #include +#include "brchess.h" #include "chessdefs.h" #include "board.h" #include "piece.h" #include "move.h" #include "fen.h" #include "eval.h" -#include "brchess.h" typedef struct { char *name; /* User printable name */ @@ -60,6 +59,7 @@ int do_prmovepos(pos_t *pos, char *arg); int do_prpieces(pos_t *pos, char *arg); int do_memstats(pos_t *, char*); int do_eval(pos_t *, char*); +int do_move(pos_t *, char*); int do_quit(pos_t *, char*); int do_debug(pos_t *, char*); @@ -76,6 +76,7 @@ COMMAND commands[] = { { "prpieces", do_prpieces, "Print Pieces (from pieces lists)" }, { "memstats", do_memstats, "Generate next move list" }, { "eval", do_eval, "Eval current position" }, + { "do_move", do_move, "execute nth move on current position" }, { "debug", do_debug, "Set log level to LEVEL" }, { NULL, (int(*)()) NULL, NULL } }; @@ -328,8 +329,7 @@ int do_prpieces(pos_t *pos, __unused char *arg) return 1; } -int do_memstats(__attribute__((unused)) pos_t *pos, - __attribute__((unused)) char *arg) +int do_memstats(__unused pos_t *pos,__unused char *arg) { moves_pool_stats(); piece_pool_stats(); @@ -337,14 +337,17 @@ int do_memstats(__attribute__((unused)) pos_t *pos, return 1; } -int do_quit(__attribute__((unused)) pos_t *pos, - __attribute__((unused)) char *arg) +int do_move(__unused pos_t *pos, __unused char *arg) +{ + return 1; +} + +int do_quit(__unused pos_t *pos, __unused char *arg) { return done = 1; } -int do_debug(__attribute__((unused)) pos_t *pos, - __attribute__((unused)) char *arg) +int do_debug(__unused pos_t *pos, __unused char *arg) { debug_level_set(atoi(arg)); return 1; @@ -352,8 +355,7 @@ int do_debug(__attribute__((unused)) pos_t *pos, /* Print out help for ARG, or for all of the commands if ARG is not present. */ -int do_help(__attribute__((unused)) pos_t *pos, - __attribute__((unused)) char *arg) +int do_help(__unused pos_t *pos, __unused char *arg) { register int i; int printed = 0; @@ -404,11 +406,11 @@ int main(int ac, char **av) pos_t *pos; int opt; - debug_init(1); piece_pool_init(); moves_pool_init(); pos_pool_init(); pos = pos_get(); + debug_init(1, stderr); while ((opt = getopt(ac, av, "d:f:")) != -1) { switch (opt) { diff --git a/src/move.c b/src/move.c index fb29641..ffe8da7 100644 --- a/src/move.c +++ b/src/move.c @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -138,8 +139,8 @@ void moves_print(pos_t *pos, move_flags_t flags) static move_t *move_add(pos_t *pos, piece_t piece, square_t from, square_t to) { + //pos_t *newpos; board_t *board = pos->board; - pos_t *newpos; move_t *move; int color = COLOR(piece); @@ -172,29 +173,29 @@ static move_t *move_add(pos_t *pos, piece_t piece, square_t from, move->taken = board[to].piece; move->flags = M_NORMAL; move->newpos = pos_dup(pos); - newpos = move->newpos; - SET_COLOR(newpos->turn, IS_BLACK(newpos->turn) ? WHITE : BLACK); - newpos->turn = OPPONENT(newpos->turn); + //newpos = move->newpos; + //SET_COLOR(newpos->turn, OPPONENT(move->piece)); + //newpos->turn = OPPONENT(newpos->turn); if (move->taken) { move->flags |= M_CAPTURE; /* remove taken piece from new position piece list * this does not apply for en passant */ - piece_del(&newpos->board[to].s_piece->list); + //piece_del(&newpos->board[to].s_piece->list); /* remove occupied bitboard */ - newpos->occupied[OPPONENT(COLOR(piece))] ^= SQ88_2_BB(to); + //newpos->occupied[OPPONENT(COLOR(piece))] ^= SQ88_2_BB(to); } /* always make "to" the piece square in new position */ - newpos->board[to] = newpos->board[from]; + //newpos->board[to] = newpos->board[from]; /* fix dest square */ - newpos->board[to].s_piece->square = to; + //newpos->board[to].s_piece->square = to; /* replace old occupied bitboard by new one */ - newpos->occupied[COLOR(piece)] ^= SQ88_2_BB(from); - newpos->occupied[COLOR(piece)] |= SQ88_2_BB(to); + //newpos->occupied[COLOR(piece)] ^= SQ88_2_BB(from); + //newpos->occupied[COLOR(piece)] |= SQ88_2_BB(to); /* always make "from" square empty */ - newpos->board[from].piece = 0; - newpos->board[from].s_piece = NULL; + //newpos->board[from].piece = 0; + //newpos->board[from].s_piece = NULL; # ifdef DEBUG_MOVE log_i(3, "added move from %c%c to %c%c\n", @@ -621,23 +622,56 @@ int moves_gen(pos_t *pos, bool color, bool doit) return count; } -int move_doit(pos_t *pos, move_t *move) +/* note: for now, a new pos is generated */ +struct pos *move_do(pos_t *pos, move_t *move) { -# ifdef DEBUG_MOVE_TOTO - log_f(2, "color:%s doit:%d\n", color? "Black": "White", doit); +# ifdef DEBUG_MOVE + log_f(3, "++++++++++"); + move_print(move, 0); # endif - if (pos && move) - return 1; + pos_t *newpos = pos_dup(pos); + piece_t piece = move->piece; + int color = COLOR(piece); + square_t from = move->from, to = move->to; + + /* todo: en passant + */ + SET_COLOR(pos->turn, OPPONENT(color)); /* pos color */ + + if (move->taken || PIECE(piece) == PAWN) /* 50 moves */ + newpos->clock_50 = 0; + else + newpos->clock_50++; + if (move->taken) { /* */ + piece_del(&newpos->board[to].s_piece->list); + newpos->occupied[OPPONENT(color)] ^= SQ88_2_BB(to); + } + newpos->board[to] = newpos->board[from]; + /* fix dest square */ + newpos->board[to].s_piece->square = to; + /* replace old occupied bitboard by new one */ + newpos->occupied[color] ^= SQ88_2_BB(from); + newpos->occupied[color] |= SQ88_2_BB(to); + + /* always make "from" square empty */ + newpos->board[from].piece = 0; + newpos->board[from].s_piece = NULL; + return 0; } +void move_undo(pos_t *pos, __unused move_t *move) +{ + pos_clear(pos); +} + #ifdef BIN_move #include "fen.h" int main(int ac, char**av) { pos_t *pos; - debug_level_set(5); + debug_init(5, stderr); piece_pool_init(); moves_pool_init(); pos_pool_init(); diff --git a/src/move.h b/src/move.h index 960321c..8cfe9f7 100644 --- a/src/move.h +++ b/src/move.h @@ -60,6 +60,7 @@ int pseudo_moves_gen(pos_t *pos, piece_list_t *piece, bool doit); int pseudo_moves_pawn(pos_t *pos, piece_list_t *piece, bool doit); int moves_gen(pos_t *pos, bool color, bool doit); -int move_doit(pos_t *pos, move_t *move); +struct pos *move_do(pos_t *pos, move_t *move); +void move_undo(pos_t *pos, move_t *move); #endif /* MODE_H */