我需要您的帮助以了解是否可以使用位板进行连接 5 游戏。因为我看到了很多连接 4 游戏的示例,但如果棋盘非常大,例如 15x15 或 19x19,则没有。我不明白如何用 64 位表示板。
谢谢你的帮助
正如 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;
相应地,我相信您可能还需要调整数学和逻辑以考虑迷你位板之间的边缘(这取决于您想对主位板做什么)。
嗯?
当然有可能,如果“位板”只是指“每个单元使用一位的 2D 数组”。
如果你例如四舍五入,有时会更容易,这样每一行(或每一列)都是一个整数字节,但你不必这样做。
只需执行以下操作:
#include <stdint.h>
#include <limits.h>
#define WIDTH 22
#define HEIGHT 17
uint8_t bits[(WIDTH * HEIGHT + CHAR_BIT - 1) / CHAR_BIT];
这声明bits
为一个字节数组,有足够的字节来保存一个WIDTH
由HEIGHT
单元格组成的矩阵。
使用示例的值,它将是 (22 * 17 + 7) / 8 或 47 字节长(假设CHAR_BIT
为 8)。