一、主程序和其他模块除了前面介绍的核心功能模块 (地图管理、窗口控制、图像识别、扫雷策略等)外,程序还包括:
主程序(main.py) - 系统调度中枢配置模块(conf.py) - 全局参数管理日志模块(mylogger.py) - 系统运行监控1 2 3 4 5 6 7 8 9 10 11 12 项目根目录 ├── conf.py # 配置文件,包含全局变量和常量定义 ├── CursorClick.py # 鼠标点击操作模块,用于模拟鼠标点击 ├── main.py # 主程序入口,负责程序的整体流程控制 ├── MineCleaner.py # 扫雷逻辑模块,负责扫雷过程中的清理操作 ├── MineGroup.py # 雷区分组模块,用于管理雷区的分组逻辑 ├── MineMap.py # 雷区地图模块,用于管理雷区地图的状态 ├── mylogger.py # 日志模块,用于记录程序运行过程中的日志信息 ├── WindowManager.py # 窗口管理模块,负责管理游戏窗口的定位和截图 ├── Classify.py # 图像分类模块,用于识别雷区格子的状态 ├── my_model.h5 # TensorFlow 模型文件,用于图像分类 └── my_ project.log # 日志文件,记录程序运行过程中的日志信息
MARKDOWN
收起代码 二、主程序解析 2.1 main.py - 系统主程序完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 from MineMap import MineMapfrom WindowManager import WindowManagerfrom Classify import OcrClassifierimport timefrom mylogger import loggerfrom MineCleaner import MineCleanerimport sys class_name = "TkTopLevel" title_name = "扫雷小游戏" def main (): try : map = MineMap(16 , 16 ) window = WindowManager(class_name, title_name) ocr = OcrClassifier(window, map ) op = MineCleaner(window, map ) start_time = time.time() classfiy_time = 0 clean_time = 0 ocr.classify_all() time1 = time.time() classfiy_time += time1 - start_time op.start_up() time2 = time.time() clean_time += time2 - time1 c = 0 while True : time3 = time.time() ocr.classify_all() time4 = time.time() classfiy_time += time4 - time3 op.clean_mine() time5 = time.time() clean_time += time5 - time4 if window.check_main_window(): break c += 1 except Exception as e: logger.error(e) finally : elapsed_time = time.time() - start_time logger.info("成功扫雷总用时:{}s, 识别用时:{}s, 扫雷用时:{}s" .format (round (elapsed_time,2 ), round (classfiy_time,2 ), round (clean_time,2 ))) sys.exit(0 )if __name__ == "__main__" : main()
PYTHON
收起代码 2.1.1 初始化流程1 2 3 4 5 def main (): map = MineMap(16 , 16 ) window = WindowManager(class_name, title_name) ocr = OcrClassifier(window, map ) op = MineCleaner(window, map )
PYTHON
2.1.2 主循环逻辑1 2 3 4 5 6 7 8 9 10 11 while True : ocr.classify_all() op.clean_mine() if window.check_main_window(): break c += 1
PYTHON
2.2 conf.py - 系统配置 2.2.1 显示配置1 2 zoomRate = 1.25 block_width, block_height = 20 , 20
PYTHON
2.2.2 游戏参数1 2 mineNumAll = 40 blocks_x = blocks_y = 0
PYTHON
2.2.3 路径配置1 2 3 ReferPath = "./Image/Reference/" ErrorPath = "./Image/Error/" LowAcPath = "./Image/Low_Accuracy/"
PYTHON
2.3 mylogger.py - 日志管理系统 2.3.1 日志配置1 2 3 4 5 6 7 8 9 10 11 12 13 14 def setup_logger (): logger = logging.getLogger('my_project' ) logger.setLevel(logging.DEBUG) file_handler = logging.FileHandler('my_project.log' ) console_handler = logging.StreamHandler() formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
PYTHON
收起代码 三、主程序关键点 3.1 性能监控体系1 2 3 4 5 6 7 8 9 10 11 12 13 start_time = time.time() classfiy_time = 0 clean_time = 0 while True : time3 = time.time() ocr.classify_all() time4 = time.time() classfiy_time += time4 - time3 op.clean_mine() time5 = time.time() clean_time += time5 - time4
PYTHON
收起代码 3.2 异常处理机制1 2 3 4 5 6 7 8 9 10 try : except Exception as e: logger.error(e) finally : logger.info(f"总用时:{round (elapsed_time,2 )} s, " f"识别用时:{round (classfiy_time,2 )} s, " f"扫雷用时:{round (clean_time,2 )} s" ) sys.exit(0 )
PYTHON
3.3 游戏流程控制1 2 3 4 5 6 7 op.start_up() while not window.check_main_window(): ocr.classify_all() op.clean_mine()
PYTHON
四、运行流程初始化阶段 :
创建游戏地图模型 连接游戏窗口 加载识别模型 初始化策略引擎 启动阶段 :
主循环阶段 :
结束阶段 :