Python 如何处理非常大的比特板
我正在开发一款两人棋盘游戏(如connect 4),棋盘大小为h,w。我想使用硬件大小的比特板检查获胜条件 在像国际象棋这样的游戏中,棋盘大小是固定的,位棋盘通常用某种64位整数表示。当h和w不是常数并且可能非常大(假设为30*30)时,比特板是个好主意吗?如果是这样的话,C/C++中处理大位板的任何数据类型都能保持其性能吗 由于我目前正在研究python,因此也非常感谢使用这种语言的解决方案!:)Python 如何处理非常大的比特板,python,c++,bitboard,Python,C++,Bitboard,我正在开发一款两人棋盘游戏(如connect 4),棋盘大小为h,w。我想使用硬件大小的比特板检查获胜条件 在像国际象棋这样的游戏中,棋盘大小是固定的,位棋盘通常用某种64位整数表示。当h和w不是常数并且可能非常大(假设为30*30)时,比特板是个好主意吗?如果是这样的话,C/C++中处理大位板的任何数据类型都能保持其性能吗 由于我目前正在研究python,因此也非常感谢使用这种语言的解决方案!:) 提前感谢我不久前写了这段代码,只是为了玩玩游戏的概念。不涉及智力行为。只是随机移动来演示游戏。我
提前感谢我不久前写了这段代码,只是为了玩玩游戏的概念。不涉及智力行为。只是随机移动来演示游戏。我想这对你来说并不重要,因为你只是想快速检查获胜的条件。这个实现很快,因为我尽了最大努力避免for循环,并且只使用内置python/numpy函数(使用了一些技巧) 如果你有任何问题,请告诉我 更新:说明: 每次移动时,查看穿过当前单元格的列、行、对角线和次对角线,并找到具有当前符号的连续单元格。避免扫描整个电路板 在每个方向提取单元格: 专栏:
current_col = S[:,current_col_idx]
行:
对角线:
找到所需对角线相对于基准面的偏移量
主对角线:
diag_offset = current_col_idx - current_row_idx
current_diag = S.diagonal(offset)
非对角:
diag_offset = current_col_idx - current_row_idx
current_diag = S.diagonal(offset)
反转矩阵的行:
S_reversed_rows = S[::-1,:]
在新矩阵中查找行索引
new_row_idx = row_size - 1 - current_row_idx
current_offdiag = S.diagonal(offset)
< C >还是C++中>他们是不同的语言。在C++中你可以使用。游戏中什么是获胜条件?我想这和解决这个问题有很大关系。C++安东森。Redings位集注释:如果位集的大小在编译时未知,则可以使用std::vector或boost::dynamic_位集。@RoddeyFrost k平铺一行。我发现Ammer的答案非常鼓舞人心,可以尝试实现一个通用算法
new_row_idx = row_size - 1 - current_row_idx
current_offdiag = S.diagonal(offset)