Pygame开发康威生命游戏点击单元格后整行Cell状态异常修改问题
问题排查与解决方案
问题根源
二维列表board初始化逻辑存在引用重复问题:
- 仅在每行的外层循环中创建了1个Cell实例,内层循环把同一个实例重复追加到当前行的所有列位置
- Python中自定义类的实例属于引用类型,同一行所有位置指向的都是同一个Cell对象,修改任意位置的
state属性,整行的状态都会同步变更
修复方案
修改board初始化代码,将Cell实例化逻辑移到内层列循环中,保证每个棋盘格对应独立的Cell实例:
block_size = 25 board = [] rows, cols = (int((window_height - 100)/ block_size), int(window_width / block_size)) for i in range(rows): col = [] for j in range(cols): cell = Cell() col.append(cell) board.append(col)
验证方法
执行以下代码确认修复效果,同一行不同位置的Cell实例ID输出为不同值即修复成功:
print(id(board[0][0]), id(board[0][1]))
内容的提问来源于stack exchange,提问作者Gemini
相关产品推荐
相关产品推荐

