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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:45:02