gpt4 book ai didi

c++ - 国际象棋游戏数学网格的二维索引

转载 作者:行者123 更新时间:2023-11-28 07:56:09 33 4
gpt4 key购买 nike

好吧,我的国际象棋比赛取得了长足的进步!不过我有一个大问题!如果我想在棋盘 [4][3] 上棋子,棋盘在内存中的索引如下:

y axis
0 1 2 3 4 5 6 7
1
x 2
a 3
x 4 X
i 5
s 6
7

我将 x 轴编号为内存索引的样子,以便用户在查看屏幕时看到这一点。正如我现在的代码一样,这是我必须输入的内容才能在 d,6 处获得棋子:用户输入 = wf4,它在程序中转换为 Board[5][3]。如您所见,我想输入 wd6 并转到 d 和最多 6 个。但程序先下降 5,然后下降到 3(d)。

  1 R N B Q K B N R
x 2 P P P P P P P P
a 3
x 4
i 5
s 6 P
7 P P P P P P P
8 R N B Q K B N R
a b c d e f g h
y-axis

我有从坐标中减去 1 的公式,所以如果用户输入 (e,8),它会在 chessBoard[4][7] 中寻找棋子,但是,当然这不会找到棋子,因为 [ 4][7] 4 比 7。我们想要 4 比 7。我真正想要的是 4 比 1!所以它看起来像这样:

  8 R N B Q K B N R
y 7 P P P P P P P P
a 6
x 5
i 4
s 3
2 P P P P P P P P
1 R N B Q K B N R
a b c d e f g h
x-axis

在这里,我应该键入 e, 1 并得到一个 King。为此,我需要找到某种方法使左下角变为 0,0 而不是左上角。所以基本上,我该怎么做?如何将 2D 数组索引转换为数学样式网格?!?!编辑***好的完美例子!我是我的播放器,输入 c, 6 将弹出输入值:source.x = 2 和 source.y = 6。我有执行此操作的代码。现在我需要的是告诉我的 board[source.x][source.y] 玩家的意思是 board[2][2]。看?我没有看到直接的公式,因为看看这个输入列表与董事会需要使用最后一张图看到的内容:

  • input = 1,4 array[4][1]得到相同的一 block
  • input = 5,7 array[1][5]得到相同的一 block
  • input = 2,6 array[2][2]得到相同的一 block
  • input = 3,7 array[1][3]得到相同的一 block

因此很明显,输入 x 需要交换到数组的 y 索引中。但是,x 值呢??啊,这太复杂了

最佳答案

试试 chessBoard[x-1][8-y]

那样:

  • x = 1 -> x-1 = 0
  • x = 8 -> x-1 = 7

和:

  • y = 1 -> 8-y = 7
  • y = 8 -> 8-y = 0

正是您所需要的。

更新:

这里似乎有些困惑...所以让我们重述一下:只有 8 种(最低限度合理的)排列二维矩阵的方法:2 x 符号乘以 2 y 标志时间切换 x/y 或不切换 = 2*2*2 = 8。您只需选择自己喜欢的。

首先,为了简单起见,我假设 xy 的范围都是从 07包括的。如果不是这种情况,则更正应该是微不足道的。

设数组名是b,那么你有:

  1. b[x][y]
  2. b[x][7-y]
  3. b[7-x][y]
  4. b[7-x][7-y]
  5. b[y][x]
  6. b[y][7-x]
  7. b[7-y][x]
  8. b[7-y][7-x]

现在,哪个?简单的。例如,您说当 x 增加时,您应该向右移动……那么,正确的位置在哪里?好吧,这取决于你如何绘制矩阵(我看到了你的 ASCII 艺术,但它很模糊),但是从 avobe 8 选项来看,只有 2 个应该像你说的那样移动。在这 2 个中,一个将 y 向上,另一个向下。尝试两者并重新选​​择。

关于c++ - 国际象棋游戏数学网格的二维索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680297/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com