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

如何缩短3D井字棋C++代码中冗长的switch语句

代码优化方案

优化思路

  • 第一步:替换零散的square成员变量为数组
    你当前把27个棋盘格子分别定义成了独立的成员变量(square1square9、squareA1A9、squareB1~B9),这是导致switch语句冗长的核心原因。你可以把这些格子统一存为一个数组成员,比如在D3Board类的定义里把原来的27个独立变量替换成:
// 假设你的格子类是Square,这里定义长度为28的数组,下标1~27对应你的selection取值,不用做偏移换算
Square squares[28];

初始化的时候原来给square1赋值的逻辑改成给squares[1]赋值,squareA1对应squares[10],squareB1对应squares[19]即可,原有逻辑不需要额外调整。

  • 第二步:重构square_choose方法,删除冗余switch
    替换成数组之后,你只需要先做参数合法性校验,再根据player_Choice调用对应方法即可,整段代码可以压缩到10行以内:
bool D3Board::square_choose(bool player_Choice, int selection){
    // 先校验selection取值合法性
    if (selection < 1 || selection > 27) {
        return false;
    }
    // 直接取对应下标格子,判断调用玩家还是电脑落子方法
    if (player_Choice) {
        return squares[selection].player_Choice();
    } else {
        return squares[selection].comp_Choice();
    }
}

可选进阶优化

如果你想进一步消除if分支判断,也可以用C++成员函数指针实现:

bool D3Board::square_choose(bool player_Choice, int selection){
    if (selection < 1 || selection > 27) return false;
    // 定义成员函数指针类型
    using ChooseFunc = bool (Square::*)();
    ChooseFunc func = player_Choice ? &Square::player_Choice : &Square::comp_Choice;
    return (squares[selection].*func)();
}

这种优化方案不仅代码量压缩了90%以上,后续如果要调整格子逻辑也只需要修改数组相关逻辑,不用逐个修改case分支,可维护性提升非常明显。

内容的提问来源于stack exchange,提问作者galapagos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:00