如何在自定义棋盘的指定坐标位置打印'X'
如何在自定义棋盘的指定坐标位置打印'X'
嘿,我来帮你搞定这个问题!你现在的困境在于,当前的棋盘是用固定的字符串columna = "| | | |"来打印的,每次输出都是空格子,没法动态修改某个位置的内容。咱们换个思路,用二维列表来存储棋盘的状态,这样就能轻松修改指定位置的内容,再根据这个列表生成要打印的棋盘啦。
下面是修改后的完整代码,我会一步步给你解释:
# 先定义棋盘大小,这里假设是3x3,你可以根据需求调整 BSIZ = 3 PLAYER_1 = "Player 1" def set_board_up(stones_per_player=4): # 初始化棋盘:用二维列表存储每个格子的状态,初始都是空格 board = [[" " for _ in range(BSIZ)] for _ in range(BSIZ)] curr_player = PLAYER_1 # 定义棋盘的分隔线 fila = "+---+" * BSIZ # 打印初始空棋盘 print(fila) for row in board: # 根据当前行的内容动态生成列字符串 columna = "| " + " | ".join(row) + " |" print(columna) print(fila) end = False # 获取玩家输入的坐标 i,j=input(f"{curr_player}, select valid coords ( i j ) for your stone: ").split() i = int(i) j = int(j) valid_coords = False while not valid_coords: # 验证坐标是否在1~BSIZ范围内(玩家输入的是1-based的坐标) if i < 1 or i > BSIZ or j < 1 or j > BSIZ: print("The coords you have selected are not valid, please select valid coords:") i, j = input().split() i = int(i) j = int(j) else: valid_coords = True # 把1-based坐标转换成列表的0-based索引,修改对应位置为'X' board[i-1][j-1] = 'X' # 重新打印更新后的棋盘 print("\nUpdated board:") print(fila) for row in board: columna = "| " + " | ".join(row) + " |" print(columna) print(fila) # 调用函数测试效果 set_board_up()
关键改进点说明:
- 用二维列表存储棋盘:
board = [[" " for _ in range(BSIZ)] for _ in range(BSIZ)],每个元素代表一个格子的状态,初始都是空格,这样我们可以直接修改任意位置的内容。 - 动态生成每行内容:不再用固定的
columna,而是用"| " + " | ".join(row) + " |"把每行的元素拼接成带分隔符的字符串,格子里的内容(空格或X)会自动显示出来。 - 坐标转换:玩家输入的是1-based的坐标(比如1,1对应第一个格子),而列表索引是0-based的,所以要减1才能对应到正确的位置:
board[i-1][j-1] = 'X'。 - 重新打印棋盘:修改完棋盘状态后,重新打印一次,就能看到X出现在指定位置啦!
这样你就能轻松控制棋盘上每个位置的显示内容了,后续如果要加更多功能(比如玩家交替下棋、判断胜负)也会更方便~
备注:内容来源于stack exchange,提问作者AGG
相关产品推荐
相关产品推荐

