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