请教:国际象棋骑士移动代码中[x-1],[y-2]的计算逻辑
理解国际象棋骑士在二维数组中的移动计算逻辑
嗨,这问题问得特别实在——我当初刚开始写国际象棋游戏逻辑的时候,也对着这一串位移表达式懵了好一会儿!咱们一步步拆解清楚:
首先得锚定骑士的核心移动规则:国际象棋里骑士走的是「日」字形,说白了就是两种基础模式,每种模式还有正反方向:
- 模式1:横向走2格 + 纵向走1格(左右2格,上下1格)
- 模式2:纵向走2格 + 横向走1格(上下2格,左右1格)
而[x-1], [y-2]这类表达式,就是把这个规则翻译成了二维数组的坐标相对位移——咱们先假设你的数组是board[x][y],其中x代表行号、y代表列号(数组索引一般从0开始,对应棋盘的8行8列):
x-1:表示从当前行向上移动1格(如果x是从上到下递增的话,减1就是往更靠上的行移动)y-2:表示从当前列向左移动2格(同理,y从左到右递增的话,减2就是往左走)
举个具体例子:如果骑士现在在board[3][3](也就是第4行第4列,因为索引从0开始),那x-1, y-2就会把它带到board[2][1]——你可以在脑子里画个棋盘,这正好是骑士合法的「日」字移动位置。
把所有8种合法的位移组合列出来,就是这8组:
(x+1, y+2):向下1格,向右2格(x+1, y-2):向下1格,向左2格(x-1, y+2):向上1格,向右2格(x-1, y-2):向上1格,向左2格(x+2, y+1):向下2格,向右1格(x+2, y-1):向下2格,向左1格(x-2, y+1):向上2格,向右1格(x-2, y-1):向上2格,向左1格
最后要提醒一句:每次计算完新坐标后,一定要判断新的x和y是否在0 ≤ x ≤7、0 ≤ y ≤7范围内——超出这个区间的话,就代表骑士要走出棋盘了,属于非法移动,得过滤掉。
本质上,这些表达式就是用数学的方式,把骑士的「日」字走法转化成了数组坐标的变化量,很直观对吧?
内容的提问来源于stack exchange,提问作者sharjeel
相关产品推荐
相关产品推荐

