java - Java中的国际象棋位板实现

标签 java bitboard

我正在寻求创建一个基本的国际象棋(或失败,西洋跳棋/国际象棋)引擎。在研究了这个主题之后,我非常有信心我想使用一系列的位板。我基本了解这个概念,但在用 Java 表示它们时遇到问题。

我尝试使用 long 将棋盘的白色部分表示为 1,将其他所有部分表示为 0:

long whitePieces = 0000000000000000000000000000000000000000000000001111111111111111L;

但是当我打印出来时,我得到以下 46 位:

System.out.println(Long.toBinaryString(whitePieces));
1001001001001001001001001001001001001001001001

是什么导致了这个结果?我确定我在这里根本上误解了一些东西;如果有人能指出我正确的方向,我将不胜感激。

最佳答案

在你的long前面加上0b表示它是一个二进制数。

long whitePieces = 0b0000000000000000000000000000000000000000000000001111111111111111L;
                   ^^

(0b 前缀是在 Java 7 中引入的。如果你使用的是旧版本,你可以执行 Long.parseLong("000...111", 2))


另一种方法:如何创建一个枚举:

enum ChessPiece { Pawn, Knight, ... };

并将棋盘存储在 ChessPiece[8][8] 中。与一堆 long 相比,这应该为您提供一个更清晰的界面来读取和修改状态。

如果您关心性能,只需将实际表示适本地封装在 Board 类中(将实际数据结构设为私有(private))。如果您稍后发现 ChessPiece[8][8] 是一个瓶颈,您可以尝试将其更改为 long 而无需太多努力。

关于java - Java中的国际象棋位板实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322531/

相关文章:

c - 测试位板是否只有一位设置为 1

hex - 国际象棋棋盘人口

move - 生成用于 move 的位板掩码

java - Spring Data MongoDB 聚合与日期和平均值匹配

java - Java 中类型层次结构的效率

java - 二叉树无法打印长分支

Java 连接四个按位函数和位板错误

java - ArrayList 无法正确输出

java 字符串删除空格并添加字母

python - 如何在Python中正确打印位板