如何优化硬编码的四子棋落子函数 支持灵活扩展玩家数量
优化方案
核心思路是将玩家的可变属性抽离为独立配置表,完全消除分支判断和重复代码,新增玩家仅需修改配置无需调整核心函数逻辑。
步骤1:定义全局玩家配置表
将所有玩家的差异化属性(棋子编号、胜利提示色)统一维护,示例代码如下:
# 玩家配置:新增玩家仅需在该列表追加对应配置即可 PLAYERS = [ {"piece_id": 1, "win_color": RED}, {"piece_id": 2, "win_color": YELLOW}, {"piece_id": 3, "win_color": GREEN} ]
步骤2:重构落子函数
将重复的公共逻辑(坐标计算、合法性校验、落子、胜利判断)统一实现,通过turn参数直接索引对应玩家的配置:
def draw_drop_piece(event, turn): game_over = False posx = event.pos[0] col = int(math.floor(posx / SQUARE_SIZE)) # 直接通过turn索引获取当前玩家配置 current_player = PLAYERS[turn] if is_valid(board, col): row = next_open_row(board, col) drop_piece(board, row, col, current_player["piece_id"]) if winning_move(board, current_player["piece_id"]): win_text = f"PLAYER {current_player['piece_id']} WINS!" label = FONT.render(win_text, 1, current_player["win_color"]) screen.blit(label, (40, 10)) game_over = True else: label = FONT.render("Enter Valid Spot", 1, BLUE) screen.blit(label, (40, 10)) game_over = None return game_over
扩展说明
如果需要新增第4/5/N名玩家,只需要在PLAYERS配置列表中追加对应配置即可,无需修改draw_drop_piece的任何逻辑,示例新增第4名玩家:
PLAYERS = [ {"piece_id": 1, "win_color": RED}, {"piece_id": 2, "win_color": YELLOW}, {"piece_id": 3, "win_color": GREEN}, # 新增紫色玩家 {"piece_id": 4, "win_color": PURPLE} ]
内容的提问来源于stack exchange,提问作者Ibrahim Bholat
相关产品推荐
相关产品推荐

