You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化硬编码的四子棋落子函数 支持灵活扩展玩家数量

优化方案

核心思路是将玩家的可变属性抽离为独立配置表,完全消除分支判断和重复代码,新增玩家仅需修改配置无需调整核心函数逻辑。

步骤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:06:06