如何正确实现井字棋(Tic-Tac-Toe)游戏中的平局判定逻辑-Python教程

本文详解井字棋中平局(draw)逻辑失效的根本原因,并提供精准修复方案:将平局检测移至第5轮玩家1行动后,而非循环计数i==9处,同时给出结构优化与可维护性增强的完整实践指南。

在井字棋这类双人轮流落子的3×3游戏中,平局(draw)发生在全部9个格子填满且无人获胜时。但许多初学者误以为只需在主循环执行到第9次迭代(i == 9)时检查平局——这会导致逻辑失效,因为每轮for循环实际处理两名玩家各一次移动,共2步。因此,当第9个格子被填满时,循环仅执行了5轮(玩家1走第1、3、5、7、9步;玩家2走第2、4、6、8步),i的最大值为5,永远达不到9。

✅ 正确的平局判定位置与条件

应将平局检查放在玩家1完成第5次移动之后、玩家2开始第5次移动之前。此时若仍未分出胜负,说明9格已满,必为平局。修正后的代码片段如下:

for i in range(1, 6):  # 循环5次即可覆盖全部9步(P1:5步,P2:4步)
    # Player 1 move
    valid_move = False
    while not valid_move:
        move = input("Player1 your turn with X. Please choose a cell (1-9): ")
        if not move.isdigit() or not ('1' <= move <= '9'):
            print("Please insert a valid cell number from 1-9.")
        else:
            valid_move = make_move(player1, move)
            if valid_move:
                printBoard(theBoard)

    # ✅ 平局检查:玩家1完成第5步后(即第9格被填满)
    if i == 5:
        if not check_winner(theBoard, player1) and not check_winner(theBoard, player2):
            print("It's a draw!")
            reset_board()
            break

    # 检查玩家1是否获胜
    if check_winner(theBoard, player1):
        print("Player1 wins!")
        reset_board()
        break

    # Player 2 move(仅执行前4轮)
    if i < 5:
        valid_move = False
        while not valid_move:
            move = input("Player2 your turn with O. Please choose a cell (1-9): ")
            if not move.isdigit() or not ('1' <= move <= '9'):
                print("Please insert a valid cell number from 1-9.")
            else:
                valid_move = make_move(player2, move)
                if valid_move:
                    printBoard(theBoard)

        # 检查玩家2是否获胜
        if check_winner(theBoard, player2):
            print("Player2 wins!")
            reset_board()
            break

? 关键改进点:将 range(1, 10) 改为 range(1, 6),语义更清晰(共5轮决策周期);平局判断前置至 i == 5 且双重验证无胜者(避免因获胜检测遗漏导致误判);抽离重复逻辑为函数:check_winner(board, player) 和 reset_board(),提升可读性与复用性。

? 推荐重构:解耦逻辑与展示,消除重复

原始代码中胜负检测、输入处理、重置操作高度耦合且重复出现。专业写法应遵循单一职责原则:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何正确实现井字棋(Tic-Tac-Toe)游戏中的平局判定逻辑-Python教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4022992+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4022992+
  • 本周更新: 0+
  • 最后更新: 2026-03-16