Skip to content

Commit 231593b

Browse files
committed
fix:快捷键重开后,部分操作引发异常
1 parent 7c25331 commit 231593b

5 files changed

Lines changed: 48 additions & 31 deletions

File tree

src/main.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
# 计时器快捷键切换
2929
# 可信的历史记录
3030
# 选择某些国家报错,布维岛(难复现)
31-
# self.label.ms_board.step('rr', (i, j))报错(难复现,需要跟踪)
32-
# self.label.ms_board.step('cc', (i, j))报错(难复现,需要跟踪)
3331
# OBR修改局面还会报错的情况(不确定,需要跟踪)
3432
# 筛选局面的条件设置错误时,不能显式报告
3533
# 回放、保存、另存为

src/mineSweeperGUI.py

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def __init__(self, MainWindow, args):
8787
# 'joking':正在游戏状态,游戏中看过概率计算结果,游戏结果不是official的。
8888
# 'fail':游戏失败,踩雷了。
8989
# 'win':游戏成功。
90-
90+
9191

9292

9393
# 相对路径
@@ -103,6 +103,15 @@ def __init__(self, MainWindow, args):
103103

104104
self.mainWindow.closeEvent_.connect(self.closeEvent_)
105105

106+
@property
107+
def gameMode(self):
108+
return self._game_mode
109+
110+
@gameMode.setter
111+
def gameMode(self, game_mode):
112+
self.label.ms_board.mode = game_mode
113+
self._game_mode = game_mode
114+
106115
def layMine(self, i, j):
107116
xx = self.row
108117
yy = self.column
@@ -178,6 +187,7 @@ def ai(self, i, j):
178187
# 可猜调整的核心逻辑
179188
board, flag = mm.enumerateChangeBoard(self.label.ms_board.board,
180189
self.label.ms_board.game_board, [(i, j)])
190+
181191
self.label.ms_board.board = board
182192
return
183193

@@ -203,23 +213,21 @@ def mineAreaLeftRelease(self, i, j):
203213
self.label.ms_board.game_board[i// self.pixSize][j// self.pixSize] == 10:
204214
# 正式埋雷开始
205215
self.layMine(i // self.pixSize, j // self.pixSize)
206-
self.game_state = 'playing'
207216

217+
self.game_state = 'playing'
218+
208219
if self.player_designator[:6] != "[live]":
209220
self.disable_screenshot()
210221
else:
211222
self.enable_screenshot()
212-
223+
213224
# 核实用的时间,防变速齿轮
214225
self.start_time_unix_2 = QtCore.QDateTime.currentDateTime().\
215226
toMSecsSinceEpoch()
216227
self.timer_10ms.start()
217228
self.score_board_manager.editing_row = -2
218229
self.label.ms_board.step('lr', (i, j))
219-
# print(self.label.ms_board.game_board)
220-
# print(self.label.ms_board.game_board_state)
221-
# print(self.label.ms_board.mouse_state)
222-
230+
223231
if self.label.ms_board.game_board_state == 3:
224232
# 点一下可能获胜
225233
self.gameWin()
@@ -421,7 +429,7 @@ def gameStart(self):
421429
self.label_info.setText(self.player_designator)
422430
# elif self.game_state == 'show':
423431
# self.label.setMouseTracking(False)
424-
432+
425433
# 这里有点乱
426434
if self.game_state == 'display' or self.game_state == 'showdisplay':
427435
self.setBoard_and_start(self.row, self.column, self.mineNum)
@@ -489,11 +497,6 @@ def gameFinished(self): # 游戏结束画残局,改状态
489497
self.score_board_manager.show(self.label.ms_board, index_type = 2)
490498

491499
def gameWin(self): # 成功后改脸和状态变量,停时间
492-
# print(self.label.ms_board.game_board)
493-
# print(self.label.ms_board.game_board_state)
494-
# print(self.label.ms_board.mouse_state)
495-
# print(2256)
496-
497500
self.timer_10ms.stop()
498501
self.score_board_manager.editing_row = -1
499502

@@ -531,7 +534,7 @@ def save_evf_file(self):
531534
self.label.ms_board.is_offical = self.is_official()
532535
# if self.label.ms_board.is_fair and self.label.ms_board.is_offical:
533536
# self.label.ms_board.checksum = metaminesweeper_checksum.get_checksum()
534-
self.label.ms_board.mode = self.gameMode
537+
# self.label.ms_board.mode = self.gameMode
535538
self.label.ms_board.software = "元3.1.7".encode( "UTF-8" )
536539
self.label.ms_board.player_designator = self.player_designator.encode( "UTF-8" )
537540
self.label.ms_board.race_designator = self.race_designator.encode( "UTF-8" )
@@ -732,20 +735,22 @@ def actionChecked(self, k):
732735

733736
def predefined_Board(self, k):
734737
# 按快捷键123456时的回调
738+
row = self.predefinedBoardPara[k]['row']
739+
column = self.predefinedBoardPara[k]['column']
740+
self.pixSize = self.predefinedBoardPara[k]['pix_size']
741+
self.label.ms_board.reset(row, column, self.pixSize)
735742
self.gameMode = self.predefinedBoardPara[k]['game_mode']
736743
self.score_board_manager.with_namespace({
737744
"mode": mm.trans_game_mode(self.gameMode),
738745
})
739746
self.score_board_manager.show(self.label.ms_board, index_type=1)
740747
self.board_constraint = self.predefinedBoardPara[k]['board_constraint']
741748
self.attempt_times_limit = self.predefinedBoardPara[k]['attempt_times_limit']
742-
self.pixSize = self.predefinedBoardPara[k]['pix_size']
743749
self.importLEDPic(self.pixSize)
744750
self.label.importCellPic(self.pixSize)
745751
self.label_2.reloadFace(self.pixSize)
746-
self.label.ms_board.pix_size = self.pixSize
747-
self.setBoard_and_start(self.predefinedBoardPara[k]['row'],
748-
self.predefinedBoardPara[k]['column'],
752+
self.setBoard_and_start(row,
753+
column,
749754
self.predefinedBoardPara[k]['mine_num'])
750755
# self.refreshSettingsDefault()
751756

@@ -864,7 +869,7 @@ def screenShot(self):
864869
if self.game_state == "playing":
865870
self.game_state = "joking"
866871
self.enable_screenshot()
867-
872+
868873
ui = captureScreen.CaptureScreen()
869874
ui.show()
870875
ui.exec_()

src/minesweeper_master.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ def enumerateChangeBoard(board, game_board, poses: List[Tuple[int, int]]) -> (Li
166166
if all([board[x][y] != -1 for x,y in poses]):
167167
# 全不是雷
168168
return board, True
169+
for i in range(len(board)):
170+
for j in range(len(board[0])):
171+
if game_board[i][j] == 11:
172+
game_board[i][j] = 10
169173
game_board = ms.mark_board(game_board)
170174
if any([game_board[x][y] == 11 for x,y in poses]):
171175
# 有一个必然是雷,就直接返回

src/superGUI.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Ui_MainWindow(Ui_MainWindow):
1919
# windowSizeState = 'loose' # loose or tight
2020
def __init__(self, MainWindow, args):
2121
self.mainWindow = MainWindow
22+
self.setupUi(self.mainWindow)
2223
# 设置全局路径
2324
r_path = Path(args[0]).parent
2425
self.r_path = r_path
@@ -57,15 +58,13 @@ def __init__(self, MainWindow, args):
5758
# gameMode = 0,1,2,3,4,5,6,7代表:
5859
# 标准、win7、竞速无猜、强无猜、弱无猜、准无猜、强可猜、弱可猜
5960

60-
6161
self.read_or_create_record()
62+
self.label.setPath(r_path)
6263
_scoreBoardTop, _scoreBoardLeft = self.read_or_create_game_setting()
63-
64-
64+
self.initMineArea()
6565

6666

6767
self.readPredefinedBoardPara()
68-
self.setupUi(self.mainWindow)
6968
self.retranslateUi(MainWindow)
7069

7170
self.trans = QTranslator()
@@ -86,8 +85,7 @@ def __init__(self, MainWindow, args):
8685
})
8786

8887
self.importLEDPic(self.pixSize) # 导入图片
89-
self.label.setPath(r_path)
90-
self.initMineArea()
88+
# self.label.setPath(r_path)
9189

9290

9391
self.label_2.setPath(r_path)
@@ -121,7 +119,7 @@ def __init__(self, MainWindow, args):
121119

122120
def initMineArea(self):
123121

124-
self.label.set_rcp(self.row, self.column, self.pixSize)
122+
# self.label.set_rcp(self.row, self.column, self.pixSize)
125123
self.label.setMinimumSize(QSize(self.pixSize*self.column + 8, self.pixSize*self.row + 8))
126124
self.label.leftPressed.connect(self.mineAreaLeftPressed)
127125
self.label.leftRelease.connect(self.mineAreaLeftRelease)
@@ -296,7 +294,6 @@ def trans_language(self, language = ""):
296294
def read_or_create_game_setting(self):
297295
config = configparser.ConfigParser()
298296
if config.read(self.game_setting_path, encoding='utf-8'):
299-
self.gameMode = config.getint('DEFAULT', 'gameMode')
300297
self.mainWindow.setWindowOpacity((config.getint('DEFAULT', 'transparency') + 1) / 100)
301298
self.pixSize = config.getint('DEFAULT', 'pixSize')
302299
self.mainWindow.move(config.getint('DEFAULT', 'mainWinTop'), config.getint('DEFAULT', 'mainWinLeft'))
@@ -306,6 +303,10 @@ def read_or_create_game_setting(self):
306303
_scoreBoardLeft = config.getint('DEFAULT', 'scoreBoardLeft')
307304
self.row = config.getint("DEFAULT", "row")
308305
self.column = config.getint("DEFAULT", "column")
306+
307+
self.label.set_rcp(self.row, self.column, self.pixSize)
308+
self.gameMode = config.getint('DEFAULT', 'gameMode')
309+
309310
self.mineNum = config.getint("DEFAULT", "mineNum")
310311
# 完成度低于该百分比炸雷自动重开
311312
if config.getboolean("DEFAULT", "allow_auto_replay"):
@@ -339,14 +340,15 @@ def read_or_create_game_setting(self):
339340
# 找不到配置文件就初始化
340341
self.min3BV = 100
341342
self.max3BV = 381
342-
self.gameMode = 0
343343
self.mainWindow.setWindowOpacity(1)
344344
self.pixSize = 20
345345
self.mainWindow.move(100, 200)
346346
_scoreBoardTop = 100
347347
_scoreBoardLeft = 100
348348
self.row = 16
349349
self.column = 30
350+
self.label.set_rcp(self.row, self.column, self.pixSize)
351+
self.gameMode = 0
350352
self.mineNum = 99
351353
self.auto_replay = 30
352354
self.allow_auto_replay = False

src/ui/mineLabel.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,15 @@ def set_rcp(self, row, column, pixSize):
5353
if (self.row, self.column) != (row, column): # 如果不相等,重新实例化
5454
self.row = row
5555
self.column = column
56-
self.ms_board = ms.BaseVideo([[0] * self.column for _ in range(self.row)], self.pixSize)
56+
if not hasattr(self, "ms_board"):
57+
self.ms_board = ms.BaseVideo([[0] * self.column for _ in range(self.row)], self.pixSize)
58+
else:
59+
if isinstance(self.ms_board, ms.BaseVideo):
60+
self.ms_board.reset(row, column, pixSize)
61+
else:
62+
self.ms_board = ms.BaseVideo([[0] * self.column for _ in range(self.row)], self.pixSize)
63+
# print("new board")
64+
# print(self.ms_board.mode)
5765
# if not hasattr(self,'ms_board'):
5866
# self.ms_board = ms.BaseVideo([[0] * self.column for _ in range(self.row)], self.pixSize)
5967
self.boardPossibility = [[0.0] * self.ms_board.column for _ in range(self.ms_board.row)]

0 commit comments

Comments
 (0)