asd
This commit is contained in:
56
src/board.h
Normal file
56
src/board.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
typedef uint64_t bitmap_t;
|
||||||
|
typedef uint_fast8_t index_t;
|
||||||
|
typedef int_fast8_t piece_t;
|
||||||
|
|
||||||
|
enum tile_info {
|
||||||
|
EMPTY = 0b0000,
|
||||||
|
KING = 0b0001,
|
||||||
|
QUEEN = 0b0010,
|
||||||
|
ROOK = 0b0011,
|
||||||
|
BISHOP = 0b0100,
|
||||||
|
KNIGHT = 0b0101,
|
||||||
|
PAWN = 0b0110,
|
||||||
|
COLOR_BIT = 0b1000,
|
||||||
|
|
||||||
|
PIECE_UNKNOWN=-1
|
||||||
|
};
|
||||||
|
|
||||||
|
struct board {
|
||||||
|
static_assert(sizeof(bitmap_t) == 64/8, "bitmap_t must be 64 bits long");
|
||||||
|
bitmap_t pieces[4]; // 4 bits correspond to 1 tile
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bitmap_t bit(index_t i)
|
||||||
|
{
|
||||||
|
return 0b111UL << 3*i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool is_white(piece_t piece)
|
||||||
|
{
|
||||||
|
return piece % 2 == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool is_black(piece_t piece)
|
||||||
|
{
|
||||||
|
return piece % 2 == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static piece_t piece_at(struct board* board, index_t tile)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < sizeof board->pieces / board->pieces[0]; i++) {
|
||||||
|
if (bit(tile) & board->pieces[i]) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PIECE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user