Python扫雷游戏开发:地雷周边数字生成重叠问题优化求助
扫雷数字重叠问题解决方案
核心问题原因
你当前代码的逻辑是每生成一个地雷,就遍历它周围8个格子直接写数字,同一个格子如果是多个地雷的相邻区域,就会多次写入数字,导致文字重叠。你的数值计数逻辑是正确的,只需要在写入新数字前清空对应位置的旧内容即可。
修复方法
1. 调整擦除函数
你之前定义的EraseTile函数擦除的是地雷所在位置,而非数字写入位置,且嵌套在循环里重复定义不合理,先把函数移到全局位置,调整为适配任意擦除坐标:
# 放在导入模块之后的全局位置即可 def EraseTile(erase_x, erase_y): t.goto(erase_x, erase_y) t.shape('square') t.color('white') t.shapesize(0.8) t.stamp() t.color('black') t.shape('assets/mine.gif') t.shapesize(0.9)
2. 写入数字前先擦除旧内容
找到你遍历周边格子写数字的部分,在write操作前添加擦除逻辑:
t.goto(newpos) # 该位置已经写过数字的话,先擦除旧内容 if poslogs.count(newpos) > 0: EraseTile(newpos[0], newpos[1]) # 原有写数字的逻辑不变 if poslogs.count(newpos) == 0: t.write('1', font=30) elif poslogs.count(newpos) == 1: t.write('2', font=30) elif poslogs.count(newpos) == 2: t.write('3', font=30) elif poslogs.count(newpos) == 3: t.write('4', font=30) elif poslogs.count(newpos) == 4: t.write('5', font=30) poslogs.append(newpos) index += 1
其他代码优化建议
- 现有布雷逻辑可能生成重复位置的地雷,建议把地雷坐标存为元组放在同一个列表中,每次生成新坐标后先判断是否已存在,比分开存储x、y坐标判断更准确
- 可以先初始化一个二维数组,提前计算所有非雷格子的周边地雷数,再统一绘制数字,逻辑更清晰,也能避免边布雷边写数字的重叠问题
- 避免使用
from xxx import *的通配符导入方式,容易出现命名冲突,建议改为import turtle、import tkinter as tk的显式导入 - 提前给每个格子绑定索引坐标,后续添加点击判定功能时会更方便
内容的提问来源于stack exchange,提问作者experiment01
相关产品推荐
相关产品推荐

