【问题标题】:Creating a Board Presentation for Chess Game为国际象棋游戏创建棋盘演示
【发布时间】:2011-12-09 08:10:58
【问题描述】:

我开始为国际象棋作业制作一个 8 x 8 的方格板。但是,我想知道是否有任何提示可以在 Java 中创建正方形而不是 2D 数组。

其中一项限制是不允许使用二维数组或任何类似的。没有人工智能,只有用户控制。

【问题讨论】:

  • 如果不太相似,您可以使用一维数组。

标签: java arrays chess


【解决方案1】:

您可以使用一维数组,例如Figure [] board = new Figure[64],并创建一个简单的 getter/setter 方法来模拟二维:

Figure get(int hor, int vert) {
  return board[hor*8+ver];
}

void set(int hor, int vert, Figure f) {
  board[hor*8+ver] = f;
}

【讨论】:

    【解决方案2】:

    您可以使用一维数组或ArrayList,然后除以 8 并使用结果和余数来知道您需要去哪一列和哪一行。

    然后您可以反过来获取数组中对应棋盘部分的位置。

    【讨论】:

      【解决方案3】:

      你也可以使用地图:

      private Map<String, Figure> board = new HashMap<String, Figure>();
      
      private String positionToString(int hor, int vert) {
          return hor + " " + vert;
      }
      
      public Figure get(int hor, int vert) {
          return board.get(positionToString(hor, vert));
      }
      
      public void set(int hor, int vert, Figure fig) {
          board.put(positionToString(hor, vert), fig);
      }
      

      【讨论】:

      • 这里的映射和字符串int 转换是不必要的。它只会导致性能损失。
      • @NikitaBeloglazov:所以?试试std::pair&lt;int,int&gt;?
      • 如果我们使用地图,可以轻松切换到任何尺寸的板而不更改代码:)
      • 不知道问题的背景,但如果例如我们将计算国际象棋树中所有可能的位置(可能是解决国际象棋问题或编写 AI),我可以向您保证,您的代码的运行速度至少比简单的二维数组棋盘表示慢 3 倍。
      • @sehe java 没有 std::pair
      【解决方案4】:

      我没有 Java 的工作知识,我下棋和做一些 Delphi 编程。我不知道 Java 的位操作能力。

      但是,我建议你研究Bitboard数据结构并在网上搜索基于它的开源国际象棋引擎。

      这在 c++ 世界中是司空见惯的。

      【讨论】:

        【解决方案5】:

        也许你一开始甚至不创建一个正方形就可以侥幸逃脱?

        表示棋盘的另一种方法是列出棋子及其各自的坐标。

        【讨论】:

          猜你喜欢
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 2016-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多