当前位置: 首页 > 知识库问答 >
问题:

Python国际象棋验证动作

燕鸿波
2023-03-14

我是编程的新手,我正在尝试实现一个小的象棋游戏。

我目前正在为每件作品的验证移动而挣扎。

字典是:

board_array= {
    "a8": 0, "a7": 8, "a6": 16, "a5": 24, "a4": 32, "a3": 40, "a2": 48, "a1": 56,
    "b8": 1, "b7": 9, "b6": 17, "b5": 25, "b4": 33, "b3": 41, "b2": 49, "b1": 57,
    "c8": 2, "c7": 10, "c6": 18, "c5": 26, "c4": 34, "c3": 42, "c2": 50, "c1": 58,
    "d8": 3, "d7": 11, "d6": 19, "d5": 27, "d4": 35, "d3": 43, "d2": 51, "d1": 59,
    "e8": 4, "e7": 12, "e6": 20, "e5": 28, "e4": 36, "e3": 44, "e2": 52, "e1": 60,
    "f8": 5, "f7": 13, "f6": 21, "f5": 29, "f4": 37, "f3": 45, "f2": 53, "f1": 61,
    "g8": 6, "g7": 14, "g6": 22, "g5": 30, "g4": 38, "g3": 46, "g2": 54, "g1": 62,
    "h8": 7, "h7": 15, "h6": 23, "h5": 31, "h4": 39, "h3": 47, "h2": 55, "h1": 63,
}

我在每个子类中都创建了一个函数(Pawn,Rook,Queen...)这应该能证明这次行动是正确的。语法类似于:

def isvalid(self, final_position):
   #Check if the final_position is valid. If it is valid, return True and thus the program che update the instance position. Otherwise, return False and re-ask the user to input a valid final_position

目前,我可以移动任何白色树懒或树懒上有一个黑色的部分(但我不能吃我自己),反之亦然。

我想我使用的是dict而不是列表列表这一事实使事情变得更加困难。我真的迷路了。这将是惊人的,如果你可以帮助我显示一个验证,也许为一个更容易的件,如车。

共有1个答案

爱博达
2023-03-14

对于Rook:

 def invalid(pos, target):

       d0 = 1 if pos[0]>target[0] else -1
       d1 = 1 if pos[1]>target[1] else -1
       return any(board_array[i + j ] for i, j in zip(range(target[0], pos[0], d0 ), range(target[1], pos[1], d1 ))]
 类似资料:
  • 我正在下国际象棋,除了一件事,我几乎得到了所有的东西:我需要使棋手不可能将棋子移动到棋盘上。我很难解决这个问题。 我现在用伪代码生成的有效移动是:类getMoveLocations(我定义了一个位置为国际象棋中的一个方块):如果这个位置在边界内,这个位置的棋子是敌人的棋子,并且模拟的移动不会导致棋盘被检查,然后将该位置添加到工件可以移动到的可能位置。 问题是我如何检查棋盘是否“在检查中”。在我的代

  • DreamChess 是一款开放源码、跨平台(可在 Windows、Mac OS X 及 Linux 上运行)的 3D 国际象棋游戏。该游戏包含自身的引擎 Dreamer,提供各种国际象棋棋盘,并具有背景音乐及声效等其他附属功能。

  • 上面的代码显示了一个可以上下移动的部分的示例。这不是一个有效的棋步。所以,如果我要移动一个皇后,我该怎么做呢?我们只是假设我们已经有了一个矩阵(x,y)8×8的板。

  • 我已经有一个Board对象,包含一个碎片列表。Piece是一个抽象类,有一个位置(x,y)和一个颜色(黑色或白色)。然后是King、Queen、Knight这三个类,实现了Piece类。 谢谢

  • 我得到一个大小为16的字符串(棋子在微型棋盘上的位置)。此字符串只能包含符号: k(王) P(典当) n(骑士) R(rook) B(主教) Q(皇后) 和空白(自由字段)。 我如何验证这个字符串的正则表达式,以检查字符串大小是否真的是16,符号只有这些,而且它必须包含一个K符号(因为一个King应该是)