class MainWindow(QMainWindow): def __init__(self, _mode, parent=None): QWidget.__init__(self, parent) self.mode = _mode self.game = None self.isGameRunning = False self.InitUI() def InitUI(self): # initialize UI actions self.InitAction() # initialize window self.InitWindow() def InitAction(self): # Game Start self.gameStartAction = QAction("Start", self) self.gameStartAction.setShortcut('F3') self.gameStartAction.setStatusTip('Start Game') self.gameStartAction.triggered.connect(self.onGameStart) # Game Shutdown self.gameShutdownAction = QAction("Shut Down", self) self.gameShutdownAction.setShortcut('F4') self.gameShutdownAction.setStatusTip('Shutdown Game') self.gameShutdownAction.triggered.connect(self.onGameShutdown) # Game Reset self.gameResetAction = QAction("Reset", self) self.gameResetAction.setShortcut('F5') self.gameResetAction.setStatusTip('Restart Game') self.gameResetAction.triggered.connect(self.onGameReset) # Game proceed until the end self.gameRepeatAction = QAction("Run Until...", self) self.gameRepeatAction.setShortcut('F9') self.gameRepeatAction.setStatusTip('Run until the game ends') self.toolbar = self.addToolBar('ToolBar') self.toolbar.addActions( (self.gameStartAction, self.gameResetAction, self.gameShutdownAction, self.gameRepeatAction)) self.statusBar().showMessage('Hi!') def InitWindow(self): # initialize game window self.mainLayout = QHBoxLayout(self) self.memoryWindow = MemoryWindow(classic.ClassicMode().default_map, self) self.memoryWindow.setEnabled(False) self.memoryWindow.setVisible(False) self.inputWindow = QVBoxLayout(self) # initialize inputWindow self.inputText = QLineEdit() self.inputText.setPlaceholderText("<op> [addr1] [addr2]") self.displayText = QLineEdit() self.displayText.setReadOnly(True) self.inputButton = QPushButton("input") self.inputButton.setShortcut('Return') self.inputButton.clicked.connect(self.onInput) self.proceedButton = QPushButton("proceed") self.proceedButton.setShortcut('\\') self.proceedButton.clicked.connect(self.onProceed) bbox = QHBoxLayout() bbox.addStretch(1) bbox.addWidget(self.proceedButton) bbox.addWidget(self.inputButton) self.inputWindow.addWidget(self.displayText) self.inputWindow.addWidget(self.inputText) self.inputWindow.addLayout(bbox) self.inputWindow.setEnabled(False) self.inputWindow.addStretch(1) # assign layout self.mainLayout.addWidget(self.memoryWindow, stretch=2) self.mainLayout.addLayout(self.inputWindow) centralWidget = QWidget() centralWidget.setLayout(self.mainLayout) self.setCentralWidget(centralWidget) # set window geometry self.setGeometry(300, 150, 300, 150) self.setWindowTitle('Assem-Trix') self.show() def onGameStart(self): if self.isGameRunning: return self.game = game.AssemTrixGame(self.mode) self.memoryWindow.reset(self.game.game_map) self.memoryWindow.setEnabled(True) self.memoryWindow.setVisible(True) self.inputWindow.setEnabled(True) self.isGameRunning = True def onGameReset(self): if not self.isGameRunning: return self.onGameEnd() self.onGameStart() def onGameShutdown(self): if not self.isGameRunning: return self.memoryWindow.setEnabled(False) self.memoryWindow.setVisible(False) self.inputWindow.setEnabled(False) self.isGameRunning = False def onInputChanged(self): pass def onInput(self): if not self.isGameRunning: return text = self.inputText.text() try: result = self.game.inst_input(0, text) except Exception as e: print(type(e), e) return self.inputText.clear() self.displayText.setText(str(result)) self.memoryWindow.updateMemory() def onProceed(self): if not self.isGameRunning: return try: self.game.step() except Exception as e: print(type(e), str(e)) self.memoryWindow.updateMemory() def onRepetition(self): pass