【问题标题】:(Chess game)Function that returns possible moves of pawn(国际象棋游戏)返回可能的棋子移动的函数
【发布时间】:2013-07-09 15:59:47
【问题描述】:

我正在编写一个 C++ 国际象棋游戏。我有一个抽象类 Piece 和继承它的类。Class Piece 有纯虚方法,它返回所有可能的移动。但是我有一个棋子位置问题,因为对于每个玩家棋子只能向前移动,但在棋盘(即棋子矩阵)中,每个玩家的向前似乎都不同。如何为 pawn 实现 possibleMoves() ? 谢谢!

class Piece
{
    public:
        Piece(std::string, char verticalPosition, char horizontalPosition);

    virtual std::pair<char,char>* possibleMoves() const = 0;
    virtual ~Piece();
protected:
    std::string name;
    std::pair <char,char> initPosition;
    std::pair <char,char> currPosition;
};

【问题讨论】:

  • 我认为棋子会知道:1)它是什么颜色,2)它的当前位置是什么。然后白兵从低数字移动到高数字(它们从第 2 行开始),黑棋从高数字移动到低数字(它们从第 7 行开始)(我假设标准国际象棋中的 1 索引algebraic notation)。
  • 你为什么要返回一个指向一对chars的指针?
  • 返回std::vector&lt;std::pair&lt;char, char&gt;&gt;,而不是std::pair&lt;char, char&gt;*
  • 请喂喂喂,我的爪子累了。

标签: c++ matrix chess


【解决方案1】:

将 pawn 可以移动到其构造函数中的方向作为参数传递并存储为成员变量。在确定棋子可能的移动时使用它。

【讨论】:

    【解决方案2】:

    正如 BobTFish 在 cmets 中所说,pawn 对象应该知道它是 颜色。至于立场,我想我会把它作为论据传递 给possibleMoves;您可能还必须通过董事会,所以 possibleMoves 可以检测捕获的动作(和 en passant,这变得更加复杂,因为它只有效 第一次出现这种可能性)。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多