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