Skip to content

Commit 035ff81

Browse files
committed
perf:ai优化
1 parent e180654 commit 035ff81

File tree

2 files changed

+81
-144
lines changed

2 files changed

+81
-144
lines changed

src/main.py

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -52,33 +52,24 @@ def on_ready_read(socket: QLocalSocket):
5252

5353

5454
def cli_check_file(file_path: str) -> int:
55-
# python main.py -c C:\Users\jia32\Downloads\Metaminesweeper-snapshot\metaminesweeper\replay
56-
result = {
57-
"error": "",
58-
"data": []
59-
}
60-
55+
result = {"error": "", "data": []}
56+
6157
if not os.path.exists(file_path):
6258
result["error"] = "file not found"
6359
else:
64-
# 搜集目录或文件下的所有evf和evfs文件
6560
evf_evfs_files = []
66-
if os.path.isfile(file_path) and (
67-
file_path.endswith(".evf") or file_path.endswith(".evfs")
68-
):
69-
evf_evfs_files = [os.path.abspath(file_path)]
61+
if os.path.isfile(file_path):
62+
if file_path.endswith((".evf", ".evfs")):
63+
evf_evfs_files = [os.path.abspath(file_path)]
7064
elif os.path.isdir(file_path):
71-
evf_evfs_files = [
72-
os.path.abspath(os.path.join(root, file))
73-
for root, dirs, files in os.walk(file_path)
74-
for file in files
75-
if file.endswith(".evf") or file.endswith(".evfs")
76-
]
65+
for root, _, files in os.walk(file_path):
66+
for file in files:
67+
if file.endswith((".evf", ".evfs")):
68+
evf_evfs_files.append(os.path.abspath(os.path.join(root, file)))
7769

7870
if not evf_evfs_files:
7971
result["error"] = "must be evf or evfs files or directory"
8072
else:
81-
# 实例化一个MineSweeperGUI出来
8273
app = QtWidgets.QApplication(sys.argv)
8374
mainWindow = mainWindowGUI.MainWindow()
8475
ui = mineSweeperGUI.MineSweeperGUI(mainWindow, sys.argv)
@@ -87,8 +78,8 @@ def cli_check_file(file_path: str) -> int:
8778
if not ui.checksum_module_ok():
8879
result["error"] = "checksum module error"
8980
break
81+
9082
if e.endswith(".evf"):
91-
# 检验evf文件是否合法
9283
video = ms.EvfVideo(e)
9384
try:
9485
video.parse()
@@ -98,12 +89,8 @@ def cli_check_file(file_path: str) -> int:
9889
checksum = ui.checksum_guard.get_checksum(
9990
video.raw_data[: -(len(video.checksum) + 2)]
10091
)
101-
if list(video.checksum) == list(checksum):
102-
evf_evfs_files[ide] = (e, 0)
103-
else:
104-
evf_evfs_files[ide] = (e, 1)
92+
evf_evfs_files[ide] = (e, 0 if list(video.checksum) == list(checksum) else 1)
10593
elif e.endswith(".evfs"):
106-
# 检验evfs文件是否合法
10794
videos = ms.Evfs(e)
10895
try:
10996
videos.parse()
@@ -112,34 +99,34 @@ def cli_check_file(file_path: str) -> int:
11299
else:
113100
if videos.len() <= 0:
114101
evf_evfs_files[ide] = (e, 2)
115-
checksum = ui.checksum_guard.get_checksum(
116-
videos[0].evf_video.raw_data)
102+
continue
103+
104+
checksum = ui.checksum_guard.get_checksum(videos[0].evf_video.raw_data)
117105
if list(videos[0].checksum) != list(checksum):
118106
evf_evfs_files[ide] = (e, 1)
119107
continue
108+
120109
for idcell, cell in enumerate(videos[1:]):
121110
checksum = ui.checksum_guard.get_checksum(
122111
cell.evf_video.raw_data + videos[idcell - 1].checksum
123112
)
124113
if list(cell.evf_video.checksum) != list(checksum):
125114
evf_evfs_files[ide] = (e, 1)
126-
continue
127-
evf_evfs_files[ide] = (e, 0)
128-
129-
# 将结果转换为列表格式
130-
if not result["error"]: # 只有在没有错误的情况下才添加数据
131-
data_list = []
132-
for item in evf_evfs_files:
133-
if isinstance(item, tuple) and len(item) == 2:
134-
file_path_item, status = item
135-
data_list.append({"file": file_path_item, "status": status})
136-
result["data"] = data_list
137-
138-
# 写入out.json
115+
break
116+
else:
117+
evf_evfs_files[ide] = (e, 0)
118+
119+
if not result["error"]:
120+
result["data"] = [
121+
{"file": item[0], "status": item[1]}
122+
for item in evf_evfs_files
123+
if isinstance(item, tuple) and len(item) == 2
124+
]
125+
139126
output_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "out.json")
140127
with open(output_file, "w", encoding="utf-8") as f:
141128
json.dump(result, f, ensure_ascii=False, indent=2)
142-
129+
143130
return 0
144131

145132

src/mineSweeperGUI.py

Lines changed: 54 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -167,26 +167,22 @@ def pixSize(self, pixSize):
167167
return
168168
self.label.set_rcp(self.row, self.column, pixSize)
169169
self.label.reloadCellPic(pixSize)
170-
if (self.row, self.column, self.minenum) == (8, 8, 10):
171-
self.predefinedBoardPara[1]['pixsize'] = pixSize
172-
elif (self.row, self.column, self.minenum) == (16, 16, 40):
173-
self.predefinedBoardPara[2]['pixsize'] = pixSize
174-
elif (self.row, self.column, self.minenum) == (16, 30, 99):
175-
self.predefinedBoardPara[3]['pixsize'] = pixSize
176-
elif (self.row, self.column, self.minenum) == (self.predefinedBoardPara[4]['row'],
177-
self.predefinedBoardPara[4]['column'],
178-
self.predefinedBoardPara[4]['mine_num']):
179-
self.predefinedBoardPara[4]['pixsize'] = pixSize
180-
elif (self.row, self.column, self.minenum) == (self.predefinedBoardPara[5]['row'],
181-
self.predefinedBoardPara[5]['column'],
182-
self.predefinedBoardPara[5]['mine_num']):
183-
self.predefinedBoardPara[5]['pixsize'] = pixSize
184-
elif (self.row, self.column, self.minenum) == (self.predefinedBoardPara[6]['row'],
185-
self.predefinedBoardPara[6]['column'],
186-
self.predefinedBoardPara[6]['mine_num']):
187-
self.predefinedBoardPara[6]['pixsize'] = pixSize
170+
171+
board_key = (self.row, self.column, self.minenum)
172+
if board_key == (8, 8, 10):
173+
idx = 1
174+
elif board_key == (16, 16, 40):
175+
idx = 2
176+
elif board_key == (16, 30, 99):
177+
idx = 3
188178
else:
189-
self.predefinedBoardPara[0]['pixsize'] = pixSize
179+
idx = 0
180+
for i in range(4, 7):
181+
p = self.predefinedBoardPara[i]
182+
if board_key == (p.get('row'), p.get('column'), p.get('mine_num')):
183+
idx = i
184+
break
185+
self.predefinedBoardPara[idx]['pixsize'] = pixSize
190186

191187
# self.label.setMinimumSize(QtCore.QSize(
192188
# pixSize * self.column + 8, pixSize * self.row + 8))
@@ -1044,52 +1040,22 @@ def action_CEvent(self):
10441040
# })
10451041

10461042
def set_board_params(self, row, column, minenum):
1047-
# 把局面设置成(row, column, minenum),同时提取配套参数
1048-
# 打开录像时、改级别、改设置时用
10491043
self.row = row
10501044
self.column = column
10511045
self.minenum = minenum
1052-
if (row, column, minenum) == (8, 8, 10):
1053-
self.pixSize = self.predefinedBoardPara[1]['pixsize']
1054-
self.gameMode = self.predefinedBoardPara[1]['gamemode']
1055-
self.board_constraint = self.predefinedBoardPara[1]['board_constraint']
1056-
self.attempt_times_limit = self.predefinedBoardPara[1]['attempt_times_limit']
1057-
elif (row, column, minenum) == (16, 16, 40):
1058-
self.pixSize = self.predefinedBoardPara[2]['pixsize']
1059-
self.gameMode = self.predefinedBoardPara[2]['gamemode']
1060-
self.board_constraint = self.predefinedBoardPara[2]['board_constraint']
1061-
self.attempt_times_limit = self.predefinedBoardPara[2]['attempt_times_limit']
1062-
elif (row, column, minenum) == (16, 30, 99):
1063-
self.pixSize = self.predefinedBoardPara[3]['pixsize']
1064-
self.gameMode = self.predefinedBoardPara[3]['gamemode']
1065-
self.board_constraint = self.predefinedBoardPara[3]['board_constraint']
1066-
self.attempt_times_limit = self.predefinedBoardPara[3]['attempt_times_limit']
1067-
elif (row, column, minenum) == (self.predefinedBoardPara[4]['row'],
1068-
self.predefinedBoardPara[4]['column'],
1069-
self.predefinedBoardPara[4]['mine_num']):
1070-
self.pixSize = self.predefinedBoardPara[4]['pixsize']
1071-
self.gameMode = self.predefinedBoardPara[4]['gamemode']
1072-
self.board_constraint = self.predefinedBoardPara[4]['board_constraint']
1073-
self.attempt_times_limit = self.predefinedBoardPara[4]['attempt_times_limit']
1074-
elif (row, column, minenum) == (self.predefinedBoardPara[5]['row'],
1075-
self.predefinedBoardPara[5]['column'],
1076-
self.predefinedBoardPara[5]['mine_num']):
1077-
self.pixSize = self.predefinedBoardPara[5]['pixsize']
1078-
self.gameMode = self.predefinedBoardPara[5]['gamemode']
1079-
self.board_constraint = self.predefinedBoardPara[5]['board_constraint']
1080-
self.attempt_times_limit = self.predefinedBoardPara[5]['attempt_times_limit']
1081-
elif (row, column, minenum) == (self.predefinedBoardPara[6]['row'],
1082-
self.predefinedBoardPara[6]['column'],
1083-
self.predefinedBoardPara[6]['mine_num']):
1084-
self.pixSize = self.predefinedBoardPara[6]['pixsize']
1085-
self.gameMode = self.predefinedBoardPara[6]['gamemode']
1086-
self.board_constraint = self.predefinedBoardPara[6]['board_constraint']
1087-
self.attempt_times_limit = self.predefinedBoardPara[6]['attempt_times_limit']
1088-
else:
1089-
self.pixSize = self.predefinedBoardPara[0]['pixsize']
1090-
self.gameMode = self.predefinedBoardPara[0]['gamemode']
1091-
self.board_constraint = self.predefinedBoardPara[0]['board_constraint']
1092-
self.attempt_times_limit = self.predefinedBoardPara[0]['attempt_times_limit']
1046+
1047+
board_key = (row, column, minenum)
1048+
for i in range(1, 7):
1049+
p = self.predefinedBoardPara[i]
1050+
if (row, column, minenum) == (p.get('row'), p.get('column'), p.get('mine_num')):
1051+
board_key = i
1052+
break
1053+
1054+
params = self.predefinedBoardPara[0] if isinstance(board_key, tuple) else self.predefinedBoardPara[board_key]
1055+
self.pixSize = params['pixsize']
1056+
self.gameMode = params['gamemode']
1057+
self.board_constraint = params['board_constraint']
1058+
self.attempt_times_limit = params['attempt_times_limit']
10931059

10941060
def setBoard_and_start(self, row, column, minenum):
10951061
# 把局面设置成(row, column, minenum),把3BV的限制设置成min3BV, max3BV
@@ -1130,29 +1096,22 @@ def action_NEvent(self):
11301096

11311097
self.board_constraint = ui.board_constraint
11321098
self.attempt_times_limit = ui.attempt_times_limit
1133-
if (self.row, self.column, self.minenum) == (8, 8, 10):
1134-
self.predefinedBoardPara[1]['attempt_times_limit'] = self.attempt_times_limit
1135-
self.predefinedBoardPara[1]['board_constraint'] = self.board_constraint
1136-
self.predefinedBoardPara[1]['gamemode'] = ui.gameMode
1137-
elif (self.row, self.column, self.minenum) == (16, 16, 40):
1138-
self.predefinedBoardPara[2]['attempt_times_limit'] = self.attempt_times_limit
1139-
self.predefinedBoardPara[2]['board_constraint'] = self.board_constraint
1140-
self.predefinedBoardPara[2]['gamemode'] = ui.gameMode
1141-
elif (self.row, self.column, self.minenum) == (16, 30, 99):
1142-
self.predefinedBoardPara[3]['attempt_times_limit'] = self.attempt_times_limit
1143-
self.predefinedBoardPara[3]['board_constraint'] = self.board_constraint
1144-
self.predefinedBoardPara[3]['gamemode'] = ui.gameMode
1099+
1100+
board_key = (self.row, self.column, self.minenum)
1101+
if board_key == (8, 8, 10):
1102+
idx = 1
1103+
elif board_key == (16, 16, 40):
1104+
idx = 2
1105+
elif board_key == (16, 30, 99):
1106+
idx = 3
11451107
else:
1146-
self.predefinedBoardPara[0]['attempt_times_limit'] = self.attempt_times_limit
1147-
self.predefinedBoardPara[0]['board_constraint'] = self.board_constraint
1148-
self.predefinedBoardPara[0]['gamemode'] = ui.gameMode
1108+
idx = 0
1109+
self.predefinedBoardPara[idx]['attempt_times_limit'] = self.attempt_times_limit
1110+
self.predefinedBoardPara[idx]['board_constraint'] = self.board_constraint
1111+
self.predefinedBoardPara[idx]['gamemode'] = ui.gameMode
11491112

11501113
self.score_board_manager.with_namespace({
1151-
# "race_identifier": ui.race_identifier,
11521114
"mode": self.gameMode,
1153-
# "row": self.row,
1154-
# "column": self.column,
1155-
# "minenum": self.minenum,
11561115
})
11571116
self.score_board_manager.show(self.label.ms_board, index_type=1)
11581117

@@ -1380,9 +1339,7 @@ def is_official(self) -> bool:
13801339
def is_fair(self) -> bool:
13811340
if self.board_constraint:
13821341
return False
1383-
# 因为记录evfs是绑定game_state的setter方法的,所以假如勾选记录evfs,
1384-
# 此处就是"playing";反之,此处就是"win"或"fail",总之都是fair的
1385-
return self.game_state == "win" or self.game_state == "fail" or self.game_state == "playing"
1342+
return self.game_state in ("win", "fail", "playing")
13861343

13871344
def cell_is_in_board(self, i, j):
13881345
# 点在局面内,单位是格不是像素
@@ -1444,32 +1401,25 @@ class RECT(ctypes.Structure):
14441401
ctypes.windll.user32.ClipCursor(ctypes.byref(r))
14451402

14461403
def closeEvent_(self):
1447-
# 主窗口关闭的回调
14481404
self.unlimit_cursor()
1449-
# self.score_board_manager.close()
1450-
self.game_setting.set_value(
1451-
"DEFAULT/mainWinTop", str(self.mainWindow.y()))
1452-
self.game_setting.set_value(
1453-
"DEFAULT/mainWinLeft", str(self.mainWindow.x()))
1405+
self.game_setting.set_value("DEFAULT/mainWinTop", str(self.mainWindow.y()))
1406+
self.game_setting.set_value("DEFAULT/mainWinLeft", str(self.mainWindow.x()))
14541407
self.game_setting.set_value("DEFAULT/row", str(self.row))
14551408
self.game_setting.set_value("DEFAULT/column", str(self.column))
14561409
self.game_setting.set_value("DEFAULT/minenum", str(self.minenum))
14571410

1458-
if (self.row, self.column, self.minenum) == (8, 8, 10):
1459-
self.game_setting.set_value(
1460-
"BEGINNER/gamemode", str(self.gameMode))
1461-
self.game_setting.set_value("BEGINNER/pixsize", str(self.pixSize))
1462-
elif (self.row, self.column, self.minenum) == (16, 16, 40):
1463-
self.game_setting.set_value(
1464-
"INTERMEDIATE/gamemode", str(self.gameMode))
1465-
self.game_setting.set_value(
1466-
"INTERMEDIATE/pixsize", str(self.pixSize))
1467-
elif (self.row, self.column, self.minenum) == (16, 30, 99):
1468-
self.game_setting.set_value("EXPERT/gamemode", str(self.gameMode))
1469-
self.game_setting.set_value("EXPERT/pixsize", str(self.pixSize))
1411+
board_key = (self.row, self.column, self.minenum)
1412+
if board_key == (8, 8, 10):
1413+
section = "BEGINNER"
1414+
elif board_key == (16, 16, 40):
1415+
section = "INTERMEDIATE"
1416+
elif board_key == (16, 30, 99):
1417+
section = "EXPERT"
14701418
else:
1471-
self.game_setting.set_value("CUSTOM/gamemode", str(self.gameMode))
1472-
self.game_setting.set_value("CUSTOM/pixsize", str(self.pixSize))
1419+
section = "CUSTOM"
1420+
1421+
self.game_setting.set_value(f"{section}/gamemode", str(self.gameMode))
1422+
self.game_setting.set_value(f"{section}/pixsize", str(self.pixSize))
14731423

14741424
self.game_setting.sync()
14751425
self.record_setting.sync()

0 commit comments

Comments
 (0)