Compare commits

..

2 Commits

Author SHA1 Message Date
k
94b501fd17 knightMove runtime should be working
All checks were successful
Verify build / verify_build (push) Successful in 1m15s
2025-10-21 19:52:16 -04:00
k
ded1566f53 fixed fenGame loading backwords 2025-10-21 19:50:33 -04:00
2 changed files with 28 additions and 2 deletions

View File

@ -60,7 +60,7 @@ fn uciPos(str: []const u8, alloc: std.mem.Allocator) *types.game {
}
fn fenGame(str: []const u8, alloc: std.mem.Allocator) *types.game {
var pos: u8 = 0;
var pos: u8 = 63;
var space: u8 = 0;
var g = alloc.create(types.game) catch unreachable;
g.* = std.mem.zeroes(types.game);
@ -84,7 +84,7 @@ fn fenGame(str: []const u8, alloc: std.mem.Allocator) *types.game {
const set: *u64 = mov.charToSet(g, chr);
const bit: u64 = @as(u64, 1) << @truncate(pos);
set.* |= bit;
pos += 1;
pos -= 1;
}
return g;
}

View File

@ -59,6 +59,32 @@ pub fn charToSet(g: *types.game, chr: u8) *u64 {
// pub fn pawnMove(arr: std.ArrayList(c.move)) void {
// const move = c.move{ .From = 8, .To = 16, .Promo = 0 };
// }
pub fn knightMove(g: *types.game, arr: *std.ArrayList(types.move)) void {
const moveLut: [64]u64 = comptime blk: {
var value: [64]u64 = undefined;
for (0..64) |i| {
value[i] = knightCalc(@truncate(i));
}
break :blk value;
};
const set = if (g.whiteToMove) &g.white.knights else &g.black.knights;
const fset: u64 = if (g.whiteToMove) @as(u64, c.fullSet(@ptrCast(&g.white))) else @as(u64, c.fullSet(@ptrCast(&g.black)));
var val = set.*; //local copy
const n = @popCount(val);
for (0..n) |_| {
const pos = @ctz(val);
const moves = moveLut[pos] & ~fset;
val = val ^ (@as(u64, 1) << @truncate(pos));
bitboardToMoves(pos, moves, arr);
}
}
fn knightCalc(index: u8) u64 {
_ = index;
return @as(u64,1)<<32;
}
fn bitboardToMoves(start: u8, moves: u64, arr: *std.ArrayList(types.move)) void {
var lmoves = moves;
while (lmoves != 0) {