Exemple #1
0
 def __init__(self,
              data,
              fs=None,
              loop=False,
              api=None,
              name=None,
              fixed_delay=None,
              api_options=None):
     assert AudioFormat is not None
     if any(x is not None for x in (api, name, fixed_delay, api_options)):
         raise ValueError('The Pyglet backend does not support specifying '
                          'api, name, fixed_delay, or api_options')
     # We could maybe let Pyglet make this decision, but hopefully
     # people won't need to tweak the Pyglet backend anyway
     self.fs = 44100 if fs is None else fs
     super(SoundPlayer, self).__init__()
     _check_pyglet_audio()
     sms = _as_static(data, self.fs)
     if _new_pyglet():
         self.queue(sms)
         self.loop = bool(loop)
     else:
         group = SourceGroup(sms.audio_format, None)
         group.loop = bool(loop)
         group.queue(sms)
         self.queue(group)
     self._ec_duration = sms._duration
Exemple #2
0
 def __init__(self, data, fs, loop=False):
     assert AudioFormat is not None
     super(SoundPlayer, self).__init__()
     _check_pyglet_audio()
     sms = _as_static(data, fs)
     group = SourceGroup(sms.audio_format, None)
     group.loop = bool(loop)
     group.queue(sms)
     self.queue(group)
 def __init__(self, data, fs, loop=False):
     assert AudioFormat is not None
     super(SoundPlayer, self).__init__()
     _check_pyglet_audio()
     sms = _as_static(data, fs)
     group = SourceGroup(sms.audio_format, None)
     group.loop = bool(loop)
     group.queue(sms)
     self.queue(group)
 def play_sound_once(self,soundfile,volume):
     if self.config.sound_switch>0:
         play_sound = Player()
         play_sound_source = load(soundfile)
         play_sound_group = SourceGroup(play_sound_source.audio_format, None)
         play_sound_group.loop = False
         play_sound_group.queue(play_sound_source)
         play_sound.queue(play_sound_group)
         play_sound.volume=float(volume) * self.config.sound_switch
         play_sound.play()
Exemple #5
0
 def __init__(self, data, fs=None, loop=False, api=None, name=None):
     assert AudioFormat is not None
     if api is not None or name is not None:
         raise ValueError('The Pyglet backend does not support specifying '
                          'api or name')
     # We could maybe let Pyglet make this decision, but hopefully
     # people won't need to tweak the Pyglet backend anyway
     self.fs = 44100 if fs is None else fs
     super(SoundPlayer, self).__init__()
     _check_pyglet_audio()
     sms = _as_static(data, self.fs)
     group = SourceGroup(sms.audio_format, None)
     group.loop = bool(loop)
     group.queue(sms)
     self.queue(group)
     self._ec_duration = sms._duration
Exemple #6
0
    def __init__(self):
        super(App, self).__init__(width=1920, height=1200, caption=G.APP_NAME + ' / ' + G.APP_VERSION, resizable=False, fullscreen=G.FULLSCREEN)

        # Initialisation des variables importantes
        self.music_player = pyglet.media.Player()
        self.batch = Batch()
        self.secondPatch = Batch()
        self.keyboard = key.KeyStateHandler()
        self.pad = PAD()

        # Initialisation des labels de scores
        self.player1_score = Label('0', x=(self.width // 2) // 2 + 200, y=1100, font_size=60, font_name='Roboto Mono')
        self.player2_score = Label('0', x=self.width // 2 + (self.width // 2) // 2 - 200, y=1100, font_size=60, font_name='Roboto Mono')

        # Initialisation des 4 joueurs, 2 pour la difficulté "Moyen" et "Difficile" et 2 pour la difficulté "Facile"
        self.P1 = Player(0, paddle, 0, self.height // 2 - paddle.height // 2, self.batch, self)
        self.P2 = Player(1, paddle, self.width - paddle.width, self.height // 2 - paddle.height // 2, self.batch, self)
        self.P3 = Player(0, paddleSimple, 0, self.height // 2 - paddleSimple.height // 2, self.secondPatch, self)
        self.P4 = Player(1, paddleSimple, self.width - paddleSimple.width, self.height // 2 - paddleSimple.height // 2, self.secondPatch, self)

        # Initilialisation de la balle et du menu de jeu
        self.ball = Ball(ball, self.width // 2 - (ball.width // 2), self.height // 2 - (ball.height // 2))
        self.level = Label('Choisissez le niveau', x=self.width // 2, y=self.height // 2 + 300, anchor_x='center', anchor_y='center', font_size=70)
        self.simple = Label('Facile', x=self.width // 2 - 400, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(0, 255, 0, 255))
        self.medium = Label('Moyen', x=self.width // 2, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(255, 191, 0, 255))
        self.hard = Label('Difficile', x=self.width // 2 + 400, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(255, 0, 0, 255))

        self.players = [self.P1, self.P2]

        self.push_handlers(self.keyboard)

        self.pad.midiIn.callback = self.callback

        # Initialise la musique et la lance
        self.looper = SourceGroup(music.audio_format, None)
        self.looper.loop = True
        self.looper.queue(music)
        self.music_player.volume = 1.0
        self.music_player.queue(self.looper)
        self.music_player.play()

        # Initialisation de variables importantes au jeu
        self.niveau = 2
        self.start = False
        self.freeze = True
        self.mysterious = False
        self.canClick = False
        self.ball.radius = 25

        self.init_led()

        # Lance la boucle du jeu
        pyglet.clock.schedule_interval(self.update, 1 / G.MAX_FPS)
Exemple #7
0
 def queue(self, source):
     source_group = SourceGroup(source.audio_format, source.video_format)
     source_group.queue(source)
     Player.queue(self, source_group)
     source_group.loop = self.loop
Exemple #8
0
class App(pyglet.window.Window):
    "Logique du jeu et classe principale"

    # Constructeur
    def __init__(self):
        super(App, self).__init__(width=1920, height=1200, caption=G.APP_NAME + ' / ' + G.APP_VERSION, resizable=False, fullscreen=G.FULLSCREEN)

        # Initialisation des variables importantes
        self.music_player = pyglet.media.Player()
        self.batch = Batch()
        self.secondPatch = Batch()
        self.keyboard = key.KeyStateHandler()
        self.pad = PAD()

        # Initialisation des labels de scores
        self.player1_score = Label('0', x=(self.width // 2) // 2 + 200, y=1100, font_size=60, font_name='Roboto Mono')
        self.player2_score = Label('0', x=self.width // 2 + (self.width // 2) // 2 - 200, y=1100, font_size=60, font_name='Roboto Mono')

        # Initialisation des 4 joueurs, 2 pour la difficulté "Moyen" et "Difficile" et 2 pour la difficulté "Facile"
        self.P1 = Player(0, paddle, 0, self.height // 2 - paddle.height // 2, self.batch, self)
        self.P2 = Player(1, paddle, self.width - paddle.width, self.height // 2 - paddle.height // 2, self.batch, self)
        self.P3 = Player(0, paddleSimple, 0, self.height // 2 - paddleSimple.height // 2, self.secondPatch, self)
        self.P4 = Player(1, paddleSimple, self.width - paddleSimple.width, self.height // 2 - paddleSimple.height // 2, self.secondPatch, self)

        # Initilialisation de la balle et du menu de jeu
        self.ball = Ball(ball, self.width // 2 - (ball.width // 2), self.height // 2 - (ball.height // 2))
        self.level = Label('Choisissez le niveau', x=self.width // 2, y=self.height // 2 + 300, anchor_x='center', anchor_y='center', font_size=70)
        self.simple = Label('Facile', x=self.width // 2 - 400, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(0, 255, 0, 255))
        self.medium = Label('Moyen', x=self.width // 2, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(255, 191, 0, 255))
        self.hard = Label('Difficile', x=self.width // 2 + 400, y=self.height // 2, anchor_x='center', anchor_y='center', font_size=50, color=(255, 0, 0, 255))

        self.players = [self.P1, self.P2]

        self.push_handlers(self.keyboard)

        self.pad.midiIn.callback = self.callback

        # Initialise la musique et la lance
        self.looper = SourceGroup(music.audio_format, None)
        self.looper.loop = True
        self.looper.queue(music)
        self.music_player.volume = 1.0
        self.music_player.queue(self.looper)
        self.music_player.play()

        # Initialisation de variables importantes au jeu
        self.niveau = 2
        self.start = False
        self.freeze = True
        self.mysterious = False
        self.canClick = False
        self.ball.radius = 25

        self.init_led()

        # Lance la boucle du jeu
        pyglet.clock.schedule_interval(self.update, 1 / G.MAX_FPS)

    # Reset du plateau du PAD
    def reset_pad_button(self):
        for i in range(0, 8):
            for j in range(0, 8):
                self.pad.send_message([128, i * 16 + j, 0])

    # Logique du niveau 1 pour déplacer les barres
    def level_1(self, message):
        nbrButton = 4
        if message[0] == 144:
            x = message[1] // 16
            y = message[1] - (16 * x)

            if y > 7:
                return 0

            if y < 1:
                self.players[0].x, self.players[0].y = self.players[0].positions[(x * nbrButton) + y]

            if y > 6:
                self.players[1].x, self.players[1].y = self.players[1].positions[(x * nbrButton) + nbrButton + (nbrButton - y) - 1]

    # Logique du niveau 2 pour déplacer les barres
    def level_2(self, message):
        nbrButton = 4
        if message[0] == 144:
            x = message[1] // 16
            y = message[1] - (16 * x)

            if y > 7:
                return 0

            if y < 1:
                self.players[0].x, self.players[0].y = self.players[0].positions[(x * nbrButton) + y]

            if y > 6:
                self.players[1].x, self.players[1].y = self.players[1].positions[(x * nbrButton) + nbrButton + (nbrButton - y) - 1]

    # Logique du niveau 3 pour déplacer les barres
    def level_3(self, message):
        nbrButton = 4
        if message[0] == 144:
            x = message[1] // 16
            y = message[1] - (16 * x)

            if y > 7:
                return 0

            if y < 3:
                self.players[0].x, self.players[0].y = self.players[0].positions[(x * nbrButton) + y]

            if y > 4:
                self.players[1].x, self.players[1].y = self.players[1].positions[(x * nbrButton) + nbrButton + (nbrButton - y) - 1]

    # Fonction qui est appelé lorsqu'un évenement est déclenché sur le PAD
    def callback(self, message, dt):
        if self.start:
            if self.freeze is not True:
                if self.niveau == 1:
                    self.level_1(message)
                if self.niveau == 2:
                    self.level_2(message)
                elif self.niveau == 3:
                    self.level_3(message)
                if message[1] == 111 and message[0] == 176:
                    self.reset_game()
        else:
            for b in self.pad.buttonLevel:
                if message[1] == b:
                    if b == 104:
                        self.niveau = 1
                        self.init_led_lvl()
                        self.players = [self.P3, self.P4]
                    elif b == 105:
                        self.niveau = 2
                        self.init_led_lvl()
                        self.players = [self.P1, self.P2]
                    else:
                        self.niveau = 3
                        self.init_led_lvl3()
                        self.players = [self.P1, self.P2]
                    self.start = True
                    self.freeze = False

    # Reset de la balle
    def reset_ball(self, winner=2):
        self.ball.x, self.ball.y = self.width / 2 - self.ball.width / 2, self.height / 2 - self.ball.height / 2
        if winner == 2:
            r = randint(0, 2)
            if r == 0:
                self.ball.dx = 800 / 1000
            elif r == 1:
                self.ball.dx = -800 / 1000
        elif winner == 1:
            self.ball.dx = 800 / 1000
        elif winner == 0:
            self.ball.dx = -800 / 1000

        self.ball.dy = 0 / 1000
        self.reset_paddle()

    # Reset des barres
    def reset_paddle(self):
        for p in self.players:
            if p.NUMBER == 0:
                p.x, p.y = 0, self.height // 2 - p.height // 2
            else:
                p.x, p.y = self.width - p.width, self.height // 2 - p.height // 2

    # Reset du plateau de jeu
    def reset_game(self):
        self.start = False
        self.players[0].score = 0
        self.players[1].score = 0
        self.reset_ball()
        self.pad.resetButton()
        self.init_led()
        self.freeze = True

    # Fonction qui met à jour le jeu, l'affichage
    def update(self, dt):
        if self.freeze:
            return 0

        # Calcul le nouveau X et Y par rapport au FPS
        dt *= 1000
        b = self.ball
        b.newX = b.x + b.dx * dt
        b.newY = b.y + b.dy * dt

        paddle1 = self.players[0]
        paddle2 = self.players[1]

        # Relance le jeu si le score est plus grand ou égale à 7
        if self.players[0].score >= 7:
            self.reset_game()

        if self.players[1].score >= 7:
            self.reset_game()

        # Teste les rebonds en Y et renvoie la balle
        if b.newY < 0:
            b.newY = -b.newY
            b.dy = -b.dy
        elif b.newY + b.width > self.height:
            b.newY -= 2 * ((b.newY + b.width) - self.height)
            b.dy = -b.dy

        # Collisions Balle - Barre gauche
        if b.newX < paddle1.x + paddle1.width <= b.x:
            intersectX = paddle1.x + paddle1.width
            intersectY = b.y - ((b.x - (paddle1.x + paddle1.width)) * (b.y - b.newY)) / (b.x - b.newX)
            if paddle1.y - 50 <= intersectY <= paddle1.y + paddle1.height:
                relativeIntersectY = (paddle1.y + (paddle1.height / 2)) - intersectY
                b.bounceAngle = (relativeIntersectY / (paddle1.height / 2)) * (math.pi / 2 - b.maxBounceAngle)
                ballSpeed = math.sqrt(b.dx * b.dx + b.dy * b.dy)
                if b.newY - b.y != 0:
                    ballTravelLeft = (b.newY - intersectY) / (b.newY - b.y)
                else:
                    ballTravelLeft = 0
                b.dx = ballSpeed * math.cos(b.bounceAngle)
                b.dy = ballSpeed * -math.sin(b.bounceAngle)
                b.newX = intersectX + ballTravelLeft * ballSpeed * math.cos(b.bounceAngle)
                b.newY = intersectY + ballTravelLeft * ballSpeed * math.sin(b.bounceAngle)

                # Augmente la vitesse à chaque fois que la barre touche la balle
                b.dx += 0.07

        # Collisions Balle - Barre droite
        if b.newX > paddle2.x - paddle2.width >= b.x:
            intersectX = paddle2.x - paddle2.width
            intersectY = b.y - ((b.x - (paddle2.x - paddle2.width)) * (b.y - b.newY)) / (b.x - b.newX)
            if paddle2.y - 50 <= intersectY <= paddle2.y + paddle2.height:
                relativeIntersectY = (paddle2.y + (paddle2.height / 2)) - intersectY
                b.bounceAngle = (relativeIntersectY / (paddle2.height / 2)) * (math.pi / 2 - b.maxBounceAngle)
                ballSpeed = math.sqrt(b.dx * b.dx + b.dy * b.dy)
                if b.newY - b.y != 0:
                    ballTravelLeft = (b.newY - intersectY) / (b.newY - b.y)
                else:
                    ballTravelLeft = 0
                b.dx = ballSpeed * math.cos(b.bounceAngle) * -1
                b.dy = ballSpeed * math.sin(b.bounceAngle) * -1
                b.newX = intersectX - ballTravelLeft * ballSpeed * math.cos(b.bounceAngle)
                b.newY = intersectY - ballTravelLeft * ballSpeed * math.sin(b.bounceAngle)

                # Augmente la vitesse à chaque fois que la barre touche la balle
                b.dx -= 0.07

        # Teste si la balle a dépassé la barre gauche et ajoute un point ou le contraire
        if b.newX < -100:
            paddle2.score += 1
            self.reset_ball(0)
            return
        elif b.newX + b.width > self.width + 100:
            paddle1.score += 1
            self.reset_ball(1)
            return

        self.player1_score.text = str(self.players[0].score)
        self.player2_score.text = str(self.players[1].score)

        b.x = b.newX
        b.y = b.newY

    # Méthode appelé pour faire un rendu sur la fenêtre
    def on_draw(self):
        window.clear()
        background.blit(0, 0)
        if self.start:
            self.player1_score.draw()
            self.player2_score.draw()
            self.ball.draw()
            if self.niveau == 1:
                self.secondPatch.draw()
            else:
                self.batch.draw()
        else:
            self.level.draw()
            self.simple.draw()
            self.medium.draw()
            self.hard.draw()

    #Méthode qui initialise le niveau 1 et 2 sur le PAD
    def init_led_lvl(self):
        for i in range(8):
            for j in range(1):
                note = i * 16 + j
                self.pad.send_message([self.pad.turnOnLed, note, self.pad.colorLedFlash['Green']])

        for i in range(8):
            for j in range(1):
                note = i * 16 + (7 - j)
                self.pad.send_message([self.pad.turnOnLed, note, self.pad.colorLedFlash['Red']])

    #Méthode qui initialise le niveau 3 sur le PAD
    def init_led_lvl3(self):
        for i in range(8):
            for j in range(3):
                note = i * 16 + j
                self.pad.send_message([self.pad.turnOnLed, note, self.pad.colorLedFlash['Green']])

        for i in range(8):
            for j in range(3):
                note = i * 16 + (7 - j)
                self.pad.send_message([self.pad.turnOnLed, note, self.pad.colorLedFlash['Red']])

    # Initialisation des lumières pour choisir le niveau
    def init_led(self):
        i = 0
        for b in self.pad.buttonLevel:
            if i == 0:
                color = self.pad.colorLed['Green']
            elif i == 1:
                color = self.pad.colorLed['Amber']
            else:
                color = self.pad.colorLed['Red']
            self.pad.send_message([self.pad.turnOnAutomap, b, color])
            i += 1
Exemple #9
0
 def queue(self, source):
     source_group = SourceGroup(source.audio_format, source.video_format)
     source_group.queue(source)
     Player.queue(self, source_group)
     source_group.loop = self.loop
Exemple #10
0
 def queue(self, source):
     source = self.engine[source]
     looper = SourceGroup(source.audio_format, None)
     looper.loop = True
     looper.queue(source)
     super(AmbientPlayer, self).queue(looper)