草庐IT

java - 我应该如何在 clojure 中表示国际象棋位板?

在Clojure(/Java)中表示国际象棋位板的一些可能方法是什么?http://pages.cs.wisc.edu/~psilord/blog/data/chess-pages/rep.html我需要能够访问各个位并执行按位运算。我想过使用java.lang.Long但这会导致1x10^63出现问题,因为标牌。我也不确定如何访问特定索引处的位?我也查看了BitSet,但理想情况下我需要固定长度。 最佳答案 没有理由不能使用直长。正如您所指出的,问题是java的(因此是clojure的)long是有符号的,只允许63位用于正数默认

用于国际象棋中合法移动生成的java库

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我正在寻找一个API来生成国际象棋中的合法移动验证,最好是使用Java语言。我可以自己编写,但这将是一个幼稚的实现,而且速度会很慢。所以我需要一个可以或多或少允许以下操作的工作库:Boardboard=newBoard();board.reset();board.isMoveLegal(playerNum,fromSquare,toSquare);board.inpu

java - Java 有类似微软的 CHESS 的工具吗?

是否有类似于Microsoft的CHESS的现有Java工具??或者CHESS源代码是否公开,以便我可以尝试将其转换为Java? 最佳答案 谷歌的ThreadWeaver为Java提供了某种类似的功能。来自ThreadWeaver项目页面:ThreadWeaverisaframeworkforwritingmulti-threadedunittestsinJava.Itprovidesmechanismsforcreatingbreakpointswithinyourcode,andforhaltingexecutionofathr

c++ - 陷入 n*n 棋盘上 q 个主教的算法

我正在使用C++,但我的问题更多是关于算法而不是实现。问题如下:Writeaprogramthatinputstwointegersnandk,wheren>=k.YourprogramshouldcalculatethenumberofdifferentwaysthatkbishopscouldbeplacedonannXnchessboard.我的基本想法是将每个主教表示为具有X值和Y值的结构。然后我将主教放在棋盘上以获得配置。我编写了一个名为moveToNextPlace的方法,它允许我将主教移动到下一个可用位置。我返回一个字符串以帮助调试。structbishop{inty=0

c++ - 无模板优化

我正在编写一个国际象棋引擎,我有一个如下所示的函数:U64find_moves(Piecetype,Teamside,uint8_tsquare,U64occupied){switch(type){casePAWN:{U64result=0;result|=occupied&bb_normal_moves::pawn_caps[side][square];if(!(occupied&bb_normal_moves::pawn_moves_x1[side][square])){result|=bb_normal_moves::pawn_moves_x1[side][square];if(

c++ - 与 XBoard(国际象棋引擎)通信(C++/C)

我只是在玩弄一个基本的国际象棋引擎。我从http://web.archive.org/web/20070704121716/http://www.brucemo.com/compchess/programming/alphabeta.htm得到了很多建议,但实际站点已关闭,并非所有页面都已存档。(有人知道在哪里可以找到Bruce网站的完整版本吗?)但现在真正的问题是:我如何与XBoard通信?我知道这是通过stdin和stdout,但我在代码中遇到了问题。基本上,要开始,我只想接收来自XBoard的输入并将其打印到控制台/屏幕将硬编码输入移动到XBoard并让它移动编写实用函数并制作随

c++ - 在 Windows 控制台中显示 unicode 棋子

我一直在用C++(使用MVS2010)开发一个控制台国际象棋游戏,我似乎遇到了一个我自己无法解决的问题。问题是我需要在控制台中显示以下棋子:http://en.wikipedia.org/wiki/Chess_symbols_in_Unicode我当然浏览了大量的论坛、文章和文档,但仍然没有完成任务。我知道某些字符(特别是我需要的字符)无法使用Windows控制台提供的字体显示。但是控制台只支持几种字体:consolas和lucidaconsole。最后一个足以显示大量字符,但不是全部。下面的片段是最接近我需要的片段之一:#include#includeintmain(){UINTol

c++ - 设置/清除位 : bitshift or bitmask lookup?

我正在研究基于位板的国际象棋引擎,其中一项大量执行的操作是设置/清除无符号64位整数中的位。由于我不太了解哪些代码可以在某些处理器上“更快”地运行,因此我无法完全理解这一点。设置和清除位是一个非常简单的操作,但我应该使用(设置):uint64_tbitboard|=1ULL或:uint64_tbitboard|=BITMASK[index];其中BITMASK[]是一些预先计算的整数数组,其中恰好设置了一位(在index处)。乍一看,位移位似乎是明显更快的选择,因为位移位总是比内存查找快。但在国际象棋引擎的上下文中,可能会大量执行此操作,因此将查找表存储在处理器的缓存中是有意义的,这可

c++ - 一个简单的国际象棋 Minimax

我自己的国际象棋引擎使用minimax算法搜索国际象棋走法有问题我使用5层深度搜索并且只有Material/奖励/移动性评估,但即使我给出它也会做出愚蠢的移动并牺牲有值(value)的棋子对他们无穷大(这肯定是一个搜索问题),我没有使用任何类型的修剪,并在几秒钟内给出了5深度搜索结果。我在这个问题上被困了一个星期,我确信问题出在回溯而不是国际象棋逻辑(所以没有国际象棋背景的人都会解决这个问题:))我搜索了很多这是我的第一个问题在StackOverflow中,我希望你们不会让我失望:)这是简单的搜索代码intGameControl::Evaluate(ChessBoard_B){intm

c++ - 换位表会不会导致搜索不稳定

我正在编写一个国际象棋引擎,最近添加了一个换位表。在运行一些测试时,我发现虽然搜索仍然返回相同的最佳着法,但着法的值(value)(对最大化玩家的好处)波动了。这是换位表的正常行为吗?我记得读过一个转置表会导致搜索不稳定。这是什么意思?那么这是我的代码中的正常现象还是严重错误? 最佳答案 是的,换位表引入了搜索不稳定性。幸运的是,这种情况很少发生,换位表的优势远远超过了它的复杂性。1。转置表的作用是什么?在您的程序中添加换位表(TT)后,您应该注意到两个主要区别:改善着法顺序:从TT开始的着法通常是可能的最佳着法Earlycutof