6

我正在使用 HTML/CSS/PHP 开发一个基于国际象棋的爱好项目。我事先对国际象棋并不熟悉,所以我决定制作一个工具,可以根据给定棋子的类型和方格显示允许的移动。

我有一个带有两个文本字段的 HTML 表单:一个用于块的类型,另一个用于所述块的当前方块。一切正常,但我想包括使用正则表达式的验证。

棋子类型的有效、不区分大小写的输入是p、pawn、r、rook、b、bishop、n、knight、q、queen、k、king

正方形的有效、不区分大小写的输入是LetterNumber,其中Letter可以是AH并且Number可以是1-8

所以我想知道使用正则表达式是否可能/实用,如果是这样,有人可以让我知道它们是什么吗?我在想我应该只使用带有逻辑或的条件语句作为片段类型,但我很想知道是否还有其他解决方案。

4

3 回答 3

8

编程国际象棋运动验证

您始终可以使用正则表达式至少设置要调查的图块(无需调查块根本无法移动的图块),例如,捡起一个苦工时最多应检查四个图块(两个打击位置,一个移动,也可能是最初的双重移动)。

我相信它可以用这样的东西来完成:

1 算法获取要检查的字段数组。字段检测阻塞件的路径(好的和坏的)。(Knight 不需要,因为他很疯狂 ;] )字段检测敌人的攻击(在路径上,除了棋子。)

记住: - 如果移动会让你受到控制,你就不能执行它。- 如果你被检查,你只能避免检查或 - 只有“特殊规则”是易位和升级。晋升并不会真正影响您的运动计算。Castling 可以用两个布尔值来完成,“女王侧完整”和“国王侧完整”,如果有任何移动,则开始为真并打破为假(不要像某些国际象棋模拟那样只检测它们是否站在正确的位置...... . 令人尴尬。将你的王后移回她的起始位置不会为王后易位开放。)


更多像样的PHP国际象棋资源

这里有一些基于 php 的国际象棋游戏,我没有时间浏览它们,但应该有大量的移动验证可以学习:

http://www.bebogame.com/download/php/multiplayer_chess/multiplayer_chess.zip

http://sourceforge.net/projects/some-chess/files/Some%20Chess%202.0/Some%20Chess%202.0%20beta%203/SomeChess_2.0b3.tbz/download

http://www.redlionwebdesign.com/phpchess.htm

于 2011-06-01T15:21:38.037 回答
5

输入的正则表达式:

  • 片段:^[p|r|b|n|q|k|P|R|B|N|Q|K]$
  • 位置:^[AH|ah][1-8]$

您可以评估表单的 onblur、onchange 和 onsubmit。

我确实同意验证客户端和服务器端的移动也很有意义。

于 2011-06-01T16:03:09.553 回答
2

对于这样的任务,我强烈建议不要使用正则表达式。任何给定棋子的有效移动都与其当前位置和颜色有关,并且可以通过验证功能更好地验证。

于 2011-06-01T15:24:01.183 回答