全部评论 4

  • 置顶

    有BUG私信发我,我会改的。

    5天前 来自 广东

    2
  • 10小时前 来自 广东

    1
  • @立春男明星(关必回)胜负判定逻辑错误 (最严重)‌

    ‌原代码问题‌:hj, sj, xj1, xj2函数中,数组 b 记录的是“该位置是否与当前落子颜色相同”。然后检查 b 中是否有连续5个 1。
    ‌Bug‌:如果中间有空位(0),b对应位置为0。但如果棋盘上已有其他颜色的棋子,b也为0。这本身逻辑看似可行,但‌边界处理极其脆弱‌。更致命的是,原代码在检查连续5个时,只要 b[i] 到 b[i+4] 相等且为1即可。然而,由于 b 初始化为随机值(局部变量未初始化),或者逻辑中 continue 导致某些位置未被赋值,可能产生误判。
    ‌修正‌:标准的五子棋判定应以落子点为中心,向四个方向延伸,统计连续相同颜色的棋子数量。
    ‌悔棋逻辑缺陷‌

    ‌原代码问题‌:只记录了 lx, ly(上一步的位置)。如果玩家A下错,悔棋;轮到玩家B,玩家B也下错,悔棋。此时 lx, ly 被覆盖为玩家B的位置。如果玩家A想再次悔棋(回退到玩家B下之前),原代码只能回退一步,无法连续悔棋或多步悔棋。
    ‌修正‌:虽然简单版只支持悔一步也可以,但原代码在 illegal() 后执行 i++ 试图补偿回合数,这与 while(i--) 循环配合得非常混乱,容易导致回合错乱。
    ‌输入缓冲与交互问题‌

    ‌原代码问题‌:getline 读取嘲讽语句后,如果没有正确处理换行符,后续的 cin >> x >> y 可能会读取到残留的换行符或导致跳过输入。
    ‌修正‌:在混合使用 getline 和 cin 时需要小心清理缓冲区。
    ‌棋盘显示与坐标系统‌

    ‌原代码问题‌:棋盘大小定义为 19*30?通常五子棋是 15x15 或 19x19。代码中 check 函数限制 x<=19, y<=30,这是一个非标准的长方形棋盘,视觉上会很奇怪。
    ‌修正‌:建议统一为标准 15x15 或 19x19 正方形棋盘。
    ‌全局变量滥用‌

    i 用作循环计数器又是全局变量,且在 mian 中被修改,极易出错。

    13小时前 来自 广东

    1
  • nb

    12小时前 来自 广东

    0

热门讨论