コード例 #1
0
ファイル: gui.py プロジェクト: yeosm0108/AssemTrix
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