ref: 527f09ac73905355e10152d3833ef2ba1ddd5269
parent: 940e775979c51e7f7deba1eeed31643ec6755c2b
author: zamfofex <zamfofex@twdb.moe>
date: Wed Feb 7 15:42:50 EST 2024
fix and slightly refactor move generation
--- a/chess.c
+++ b/chess.c
@@ -90,8 +90,12 @@
}
}
-static void moonfish_jump(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from, signed char to)
+static void moonfish_jump(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from, signed char delta)
{+ unsigned char to;
+ to = from + delta;
+ if (chess->board[to] == moonfish_outside) return;
+ if (chess->board[to] / 16 == chess->board[from] / 16) return;
moonfish_create_move(chess, (*moves)++, from, to);
}
@@ -105,7 +109,7 @@
to += delta;
if (chess->board[to] == moonfish_outside) break;
if (chess->board[to] / 16 == chess->board[from] / 16) break;
- moonfish_jump(chess, moves, from, to);
+ moonfish_create_move(chess, (*moves)++, from, to);
if (chess->board[to] != moonfish_empty) break;
}
}
@@ -112,14 +116,14 @@
static void moonfish_move_knight(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from)
{- moonfish_jump(chess, moves, from, from + 21);
- moonfish_jump(chess, moves, from, from + 19);
- moonfish_jump(chess, moves, from, from - 19);
- moonfish_jump(chess, moves, from, from - 21);
- moonfish_jump(chess, moves, from, from + 12);
- moonfish_jump(chess, moves, from, from + 8);
- moonfish_jump(chess, moves, from, from - 8);
- moonfish_jump(chess, moves, from, from - 12);
+ moonfish_jump(chess, moves, from, 21);
+ moonfish_jump(chess, moves, from, 19);
+ moonfish_jump(chess, moves, from, -19);
+ moonfish_jump(chess, moves, from, -21);
+ moonfish_jump(chess, moves, from, 12);
+ moonfish_jump(chess, moves, from, 8);
+ moonfish_jump(chess, moves, from, -8);
+ moonfish_jump(chess, moves, from, -12);
}
static void moonfish_move_bishop(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from)
@@ -173,7 +177,7 @@
if (moonfish_attacked(chess, from, from - 1)) return;
if (moonfish_attacked(chess, from, from - 2)) return;
- moonfish_jump(chess, moves, from, from - 2);
+ moonfish_jump(chess, moves, from, -2);
}
static void moonfish_castle_high(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from)
@@ -189,19 +193,19 @@
if (moonfish_attacked(chess, from, from + 1)) return;
if (moonfish_attacked(chess, from, from + 2)) return;
- moonfish_jump(chess, moves, from, from + 2);
+ moonfish_jump(chess, moves, from, 2);
}
static void moonfish_move_king(struct moonfish_chess *chess, struct moonfish_move **moves, unsigned char from)
{- moonfish_jump(chess, moves, from, from + 11);
- moonfish_jump(chess, moves, from, from + 9);
- moonfish_jump(chess, moves, from, from - 9);
- moonfish_jump(chess, moves, from, from - 11);
- moonfish_jump(chess, moves, from, from + 10);
- moonfish_jump(chess, moves, from, from - 10);
- moonfish_jump(chess, moves, from, from + 1);
- moonfish_jump(chess, moves, from, from - 1);
+ moonfish_jump(chess, moves, from, 11);
+ moonfish_jump(chess, moves, from, 9);
+ moonfish_jump(chess, moves, from, -9);
+ moonfish_jump(chess, moves, from, -11);
+ moonfish_jump(chess, moves, from, 10);
+ moonfish_jump(chess, moves, from, -10);
+ moonfish_jump(chess, moves, from, 1);
+ moonfish_jump(chess, moves, from, -1);
if (chess->white)
{@@ -219,7 +223,7 @@
{if (to == chess->passing)
{- moonfish_jump(chess, moves, from, to);
+ moonfish_create_move(chess, (*moves)++, from, to);
return;
}
--
⑨