在国际象棋中获得敌人可能的移动到2D阵列

我有三个阵列,

chess = [["c","d","e","f","g","e","d","c"],
         ["b","b","b","b","b","b","b","b"],
         ["a","a","a","a","a","a","a","a"],
         ["a","a","a","a","a","a","a","a"],
         ["a","a","a","a","a","a","a","a"],
         ["a","a","a","a","a","a","a","a"],
         ["h","h","h","h","h","h","h","h"],
         ["i","j","k","l","m","k","j","i"]]

('a'是空的,'b'是一个黑色的棋子等)以及另外两个8x8阵列,它们都被称为whiteMoves和blackMoves的False。 我想要的是一个功能

def getEnemyMoves():
    global chess, whiteMoves, blackMoves
    doSomethingToWhiteMoves()
    doSomethingToBlackMoves()

例如这些:

  • 如果国际象棋[5] [0](或a3)中有敌方棋子,whiteMoves [5] [0]应该变为真,因为国际象棋[7] [1](b2)中的棋子可以吃掉棋子。
  • 如果一个黑女王将在国际象棋[7] [0](a1)和国王在国际象棋[7] [1](b1)中,blackMoves [7] [1]应该变为真。
  • 如果在国际象棋[0] [0](a8)中存在黑棋危险,则whiteMoves [0] [0]应该为True。
  • 我尝试了许多不同的方式来做到这一点,但它们非常复杂,没有一个完全奏效。 这是在我的国际象棋比赛结束之前唯一要做的事情。


    遍历棋盘上的棋子。 对于每件作品,根据该作品的移动规则缩小目标广场的范围:

  • 国王可以移动到相邻的8个方格或两边的方格
  • 棋子可以向前移动一个或两个方块,或者向前移动一个或两个方块。
  • 等等
  • 对于每个这样的候选人移动,测试是否有其他限制阻止候选人移动:

  • 国王只能将两个方格移动到一边,如果它是城堡的话。
  • 如果它捕捉到一个对手棋子(可能是很正常的),那么棋子只能向前对角前进。
  • Rook不能跳过其他部分
  • 等等
  • 如果将这两个通道合并为一个通道,则可以节省一些CPU周期:

  • 如果a1上的一辆车由于挡块而不能移动到a3,它肯定不能移动到a4,a5,a6,a7和a8。
  • 这些事情很复杂。 例如在最终决定采取行动之前,你必须测试国王是否在检查。

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

    上一篇: Get enemy's possible moves in chess to a 2D array

    下一篇: Persistent Socket for Chess Board Games logic (Android)