Java中的棋盘实现

我期待创造一个基本的国际象棋(或失败者,跳棋/草稿)引擎。 在研究了这个话题之后,我相当确信我想要使用一系列的位面板。 我理解基本级别的概念,但在Java中表示它们时遇到问题。

我试图把棋子的白色棋子表示为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类中(使实际数据结构保持私有状态)。 如果,在以后,发现ChessPiece[8][8]原来是一个瓶颈,你可以玩,并更改为一个long毫不费力。


你不是存储二进制数字,而是一个十进制数字。 要使用二进制表示法创建一个数字,您需要用0b作为前缀。 请参阅关于二进制文字的Oracle文档。

此外,一块棋盘或一块棋盘根本无法用一点点代表,因此您可能希望重新考虑一般的解决方案。

链接地址: http://www.djcxy.com/p/84663.html

上一篇: Chess bitboard implementation in Java

下一篇: How do I correctly check for castling in chess AI?