我正在寻求创建一个基本的国际象棋(或失败,西洋跳棋/国际象棋)引擎。在研究了这个主题之后,我非常有信心我想使用一系列的位板。我基本了解这个概念,但在用 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/