1

我需要您的帮助以了解是否可以使用位板进行连接 5 游戏。因为我看到了很多连接 4 游戏的示例,但如果棋盘非常大,例如 15x15 或 19x19,则没有。我不明白如何用 64 位表示板。

谢谢你的帮助

4

2 回答 2

3

正如 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;

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

于 2013-11-05T11:39:50.117 回答
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)。

于 2013-11-05T11:27:28.317 回答