Bitboard with connect 5游戏?

时间:2013-11-05 11:20:44

标签: c bits chess bitboard

我需要你的帮助才能知道是否可以使用位板进行连接5游戏。因为我看到很多关于连接4游戏的例子,但是如果电路板非常大,例如15x15或19x19则没有。我不明白如何用64位代表电路板。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

正如unwind的答案中所解释的那样,有可能通过这样做来否定位板的主要优点,即在一条CPU指令中对整个数据结构执行逻辑运算。最理想的是,位板的大小将是平台指令集的宽度。

可能的解决方法是将电路板表示为多个较小的“标准”位板(32位或64位,具体取决于您的平台),并分别在每个迷你位板上应用逻辑运算。例如,15x15的电路板可分为4个8x8电路板,例如:

typedef uint64_t miniboard_type; // 8x8 board

typedef struct
{
    miniboard_type miniboard[4]; // Larger 15x15 board comprising 4 8x8 boards
} bitboard_type;

bitboard_type bitboard;

相应地,我相信您可能还需要调整数学和逻辑来考虑迷你位板之间的边缘(这取决于您想要对主位板做​​什么)。

答案 1 :(得分:1)

咦?

当然有可能,如果通过“位板”你只是指“每个单元使用一位的2D阵列”。

如果您有时更容易舍入所以每行(或列)是一个整数字节,但你不必这样做。

做一些像:

#include <stdint.h>
#include <limits.h>

#define WIDTH 22
#define HEIGHT 17
uint8_t bits[(WIDTH * HEIGHT + CHAR_BIT - 1) / CHAR_BIT];

这将bits声明为一个字节数组,其中有足够的字节来保存WIDTHHEIGHT个单元格的矩阵。

使用示例的值,它将是(22 * 17 + 7)/ 8或47字节长(假设CHAR_BIT是8)。