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

开发扫雷游戏时Tile类已定义bomb属性却触发AttributeError求助

AttributeError: 'Tile' object has no attribute 'bomb' 扫雷游戏代码修复

你的核心问题是Tile类的构造函数名写错了——你写的是_init__,少了一个开头的下划线,正确的Python构造函数应该是__init__(前后各两个下划线)。这个错误导致Tile实例被创建时,初始化方法根本没被执行,所以你的Tile对象并没有bomb、revealed、value这些实例属性,访问时自然触发AttributeError。

除了构造函数的问题,你的代码还有几个其他bug需要修正,否则运行后还会出现索引越界、逻辑错误等问题:

  • Minesweeper的board是类属性,会被所有实例共享,应该改为实例属性
  • 随机生成炸弹坐标时,random.randint(0,10)会超出10x10棋盘的索引范围(棋盘索引是0-9)
  • 遍历炸弹周围格子时,循环范围错误且未做边界检查,会导致索引越界
  • 内层循环变量名用bomb容易混淆,建议改为col

修正后的完整代码

import random

class Tile:
    bomb: bool
    value: int
    revealed: bool

    def __init__(self):  # 修复构造函数名
        self.bomb = False
        self.revealed = False
        self.value = 0

class Minesweeper:
    def __init__(self):
        self.board = []  # 改为实例属性
        self.create_board()

    def add_bombs_and_values(self) -> None:
        # 生成10个不重复的炸弹位置
        for _ in range(10):
            # 修正坐标范围为0-9
            x, y = random.randint(0, 9), random.randint(0, 9)
            while self.board[x][y].bomb:
                x, y = random.randint(0, 9), random.randint(0, 9)
            self.board[x][y].bomb = True
            
            # 遍历炸弹周围3x3区域,修正循环范围并做边界检查
            for row in range(max(0, x-1), min(10, x+2)):
                for col in range(max(0, y-1), min(10, y+2)):
                    # 跳过炸弹本身
                    if row == x and col == y:
                        continue
                    self.board[row][col].value += 1

    def create_board(self) -> None:
        for i in range(10):
            self.board.append([])
            for j in range(10):
                self.board[i].append(Tile())
        self.add_bombs_and_values()

game1 = Minesweeper()

关键修复点说明

  • 构造函数修复:把_init__改为__init__,确保Tile实例创建时自动初始化bomb等属性。
  • 实例属性修正:将board从类属性移到__init__中作为实例属性,避免多个Minesweeper实例共享同一个棋盘。
  • 坐标范围修正:random.randint(0,9)保证生成的坐标在棋盘索引范围内(0到9)。
  • 边界检查:使用max(0, x-1)和min(10, x+2)确保遍历周围格子时不会超出棋盘边界,避免索引越界错误。
  • 循环变量名优化:将内层循环变量bomb改为col,提升代码可读性,避免语义混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:55:15