国际象棋程序开发:如何引用二维数组索引并赋值给变量
解决国际象棋坐标转数组索引的方案
核心思路
不用写大量elif,直接通过字符映射+简单计算把棋盘坐标(比如a1、h8)转成二维数组的索引:
- 列部分(a-h):用字典或ASCII码计算转成0-7的索引
- 行部分(1-8):因为你的数组第一行对应棋盘第8行、最后一行对应棋盘第1行,所以行索引用
8 - 数字值计算即可
修正原代码的小错误
你的self.coor最后一行里d1和e1之间少了逗号,修正后:
self.coor = [['a8','b8','c8','d8','e8','f8','g8','h8'], ['a7','b7','c7','d7','e7','f7','g7','h7'], ['a6','b6','c6','d6','e6','f6','g6','h6'], ['a5','b5','c5','d5','e5','f5','g5','h5'], ['a4','b4','c4','d4','e4','f4','g4','h4'], ['a3','b3','c3','d3','e3','f3','g3','h3'], ['a2','b2','c2','d2','e2','f2','g2','h2'], ['a1','b1','c1','d1','e1','f1','g1','h1']]
实现坐标转索引的代码
修改movePiece函数,加入坐标解析逻辑(如果是类方法记得加self参数):
def movePiece(self): moveFrom = input("From:").strip() # 拆分坐标的列(字母)和行(数字) col_char = moveFrom[0].lower() row_num = int(moveFrom[1]) # 方案1:用字典映射列索引 col_map = {'a':0, 'b':1, 'c':2, 'd':3, 'e':4, 'f':5, 'g':6, 'h':7} y = col_map[col_char] # 方案2:用ASCII码计算列索引(更简洁,无需维护字典) # y = ord(col_char) - ord('a') # 计算数组的行索引 x = 8 - row_num # 现在可以用x、y访问数组元素,用于棋子移动逻辑 print(f"坐标{moveFrom}对应数组索引:x={x}, y={y}") print(f"数组中对应的值:{self.coor[x][y]}")
内容的提问来源于stack exchange,提问作者wildflower
相关产品推荐
相关产品推荐

