Exemplo n.º 1
0
class Game(QWidget):
    def __init__(self, m):
        QWidget.__init__(self)

        self.gameVar = GameVar()  # Contient tout les variables du jeu
        self.MW = m
        self.on_click
        try:
            self.initSerial()
        except serial.SerialException as e:
            print("Erreur connexion Arduino")
            self.gameVar.error += str(e)
            print(e)

        self.ws = WebServer(self.gameVar, self)
        self.ws.start()

    def checkSensor(self):
        gv = self.gameVar
        try:
            self.ser.write(gv.sendArduino().encode())
            line = self.ser.readline()
            gv.interprete(line.decode('utf-8').rstrip())
        except Exception as e:
            self.gameVar.error = str(e)

        if not gv.defaite and not gv.pause and not gv.stressMode:
            Simon.checkSimon(self)
            Fils.checkFils(self)
            Symbole.checkSymbole(self)
            checkBouton(self)
        if gv.stressMode and gv.stressModeStarted:
            StressMode.checkStressMode(self)

    def erreurGlobal(self, module):
        self.gameVar.moduleErr[module] += 1
        self.gameVar.nbErreur = sum(self.gameVar.moduleErr)
        self.gameVar.sounds["error"].play()

        if self.gameVar.nbErreur > self.gameVar.nbErreurMax:
            self.defaite()
        else:
            for i in range(4):
                if i < self.gameVar.nbErreur:
                    self.gameVar.chronoLedErr[i] = 1
                else:
                    self.gameVar.chronoLedErr[i] = 0

            if self.gameVar.moduleErr[module] == 1 and module != 5:
                Chrono.removeXmMin(self, 3)
            elif self.gameVar.moduleErr[module] > 1 and module != 5:
                Chrono.removeXmMin(self, 1)

    def bip(self):
        if self.gameVar.pause:
            return
        if self.gameVar.stressMode:
            self.gameVar.sounds["bip2"].play()
        elif self.gameVar.chronoBoutonSon:
            self.gameVar.sounds["bip"].play()

        Chrono.chrono(self)

    def initSerial(self):
        self.ser = ""
        try:
            self.ser = serial.Serial('/dev/ttyUSB0', 19200, timeout=1)
        except:
            try:
                self.ser = serial.Serial('/dev/ttyUSB1', 19200, timeout=1)
            except Exception as e:
                raise e

        print(self.ser.write("initialisation\n".encode()))
        line = self.ser.readline()
        self.gameVar.serialOK = 1

    def start(self):

        Fils.initFils(self.gameVar)
        Symbole.initSymbole(self.gameVar)
        Simon.initSimon(self.gameVar)
        ScreenGame.paintButton(self)

        self.timerBip = QtCore.QTimer()
        self.timerBip.timeout.connect(self.bip)
        self.timerBip.start(1000)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.checkSensor)
        self.timer.start(50)

        self.timerLumiere = QtCore.QTimer()
        self.timerLumiere.timeout.connect(
            lambda: Simon.lumiereSimon(self.gameVar))
        self.timerLumiere.start(500)

    @pyqtSlot()
    def on_click(self):
        print("lala")
        btn = self.sender()
        guess(self, btn)

    def victoire(self):
        self.gameVar.pause = 1

        self.gameVar.sounds["victoire"].play()
        self.timerBip.stop()
        self.gameVar.moduleWin = [1, 1, 1, 1, 1]
        self.gameVar.lumSimon = [0, 0, 0, 0]
        self.gameVar.symboleLum = [0, 0, 0, 0]
        self.gameVar.boutonBande = [0, 1, 0]
        self.gameVar.chronoLum = 1
        self.gameVar.chronoBlink = 0
        if self.gameVar.escapeGame:
            self.timerStress.stop()
            self.gameVar.stressModeStarted = 0

        self.MW.stackSetup.setCurrentIndex(4)
        self.MW.win.reloadChrono()

    def defaite(self):
        if self.gameVar.defaite:  # defaite() déjà appelé
            return
        print("defaite")
        if self.gameVar.stressModeStarted == 1:
            try:
                self.gameVar.sounds["stress"].stop()
            except:
                pass

        self.gameVar.chronoBlink = 1
        self.gameVar.chronoLum = 2
        self.gameVar.defaite = True
        self.timerLumiere.stop()
        self.timerBip.stop()
        self.gameVar.sounds["defaite"].play()
        QTimer().singleShot(14000, self.retourMenu)
        QTimer().singleShot(3200, self.callbackDefaite)
        self.gameVar.moduleWin = [0, 0, 0, 0, 0]

        self.blink = 30

    def callbackDefaite(self):
        self.gameVar.chronoLum = 0
        self.gameVar.chronoBlink = 0
        self.gameVar.chronoLedErr = [1, 1, 1, 1]
        self.gameVar.simonErreur = 1
        self.gameVar.calcErreur = 1
        self.gameVar.symboleErreur = 1
        self.gameVar.boutonErreur = 1
        self.gameVar.filErreur = 1
        self.gameVar.lumSimon = [1, 1, 1, 1]
        self.gameVar.symboleLum = [1, 1, 1, 1]
        self.gameVar.boutonBande = [1, 1, 1]
        QTimer().singleShot(50, self.callbackDefaiteBlink)

    def callbackDefaiteBlink(self):
        self.gameVar.chronoLedErr = [0, 0, 0, 0]
        self.gameVar.simonErreur = 0
        self.gameVar.calcErreur = 0
        self.gameVar.symboleErreur = 0
        self.gameVar.boutonErreur = 0
        self.gameVar.filErreur = 0
        self.gameVar.moduleErr = [1, 1, 1, 1, 1]
        self.gameVar.lumSimon = [0, 0, 0, 0]
        self.gameVar.symboleLum = [0, 0, 0, 0]
        self.gameVar.boutonBande = [0, 0, 0]
        self.blink -= 1
        if self.blink > 0:
            QTimer().singleShot(50, self.callbackDefaite)

    def retourMenu(self):
        self.gameVar.reset()

        self.MW.stackSetup.setCurrentIndex(0)
        self.MW.setup.mPrincipal()

    def slot_repaint(self):
        eraseAll(self)
        paintButton(self)

    def slot_win_screenGame(self):
        win(self)

    def exit(self):
        self.ws.exit()