Exemple #1
0
    def timerFired(self, dt):
        while (self.serverMsg.qsize() > 0):
            msg = self.serverMsg.get(False)
            try:
                #print('received: ',msg,'\n')
                msg = msg.split()
                command = msg[0]

                if command == 'myIDis':
                    myPID = msg[1]
                    self.user.changePID(myPID)

                elif command == 'newPlayer':
                    newPID = msg[1]
                    otherPlayer = User(self.width // 2, self.height // 2,
                                       newPID)
                    self.otherPlayerGroup = pygame.sprite.GroupSingle(
                        otherPlayer)
                    self.otherPlayer = self.otherPlayerGroup.sprite
                    self.otherPlayer.baseImage = pygame.transform.rotate(
                        pygame.transform.scale(
                            pygame.image.load(
                                'Images/otherPlayerLeft.png').convert_alpha(),
                            (30, 50)), 0)
                    self.otherPlayer.image = pygame.transform.rotate(
                        pygame.transform.scale(
                            pygame.image.load(
                                'Images/otherPlayerLeft.png').convert_alpha(),
                            (30, 50)), 0)
                    for pokeball in self.pokeballGroup:
                        pokeball.startTime = time.time()
                        pokeball.timeLeft = pokeball.timeDuration - (
                            time.time() - pokeball.startTime)

                elif command == 'obstacles':
                    obstacleX = int(msg[1])
                    obstacleY = int(msg[2])
                    imageKey = int(msg[3])
                    obstacle = Obstacle(obstacleX, obstacleY)
                    obstacle.image = Obstacle.image_list[imageKey]
                    self.obstacleGroup.add(obstacle)

                elif command == 'pokemon':
                    pokemonX = int(msg[1])
                    pokemonY = int(msg[2])
                    key = int(msg[3])
                    vX = float(msg[4])
                    vY = float(msg[5])
                    angleSpeed = int(msg[6])
                    poke = Pokemon(pokemonX, pokemonY)
                    poke.key = key
                    poke.image_loc = Pokemon.checkImageCache(poke.key)
                    poke.image = pygame.transform.scale(
                        pygame.image.load(poke.image_loc).convert_alpha(),
                        (60, 60))
                    poke.name = Pokemon.pokemon_dict[poke.key]['name']
                    poke.speed = (
                        Pokemon.pokemon_dict[poke.key]['avg_stats']) // 8.
                    poke.vX = vX
                    poke.vY = vY
                    poke.angleSpeed = angleSpeed
                    poke.velocity = poke.vX, poke.vY
                    if poke.vX > 0:
                        poke.image = pygame.transform.flip(
                            poke.image, True, False)
                    poke.updateRect()
                    self.pokemonGroup.add(poke)

                elif command == 'enemy':
                    enemyX = int(msg[1])
                    enemyY = int(msg[2])
                    vX = float(msg[3])
                    vY = float(msg[4])
                    angleSpeed = int(msg[5])
                    enemy = Enemy(enemyX, enemyY)
                    enemy.vX = vX
                    enemy.vY = vY
                    enemy.angleSpeed = angleSpeed
                    enemy.velocity = vX, vY
                    enemy.canSteal = True
                    if enemy.vX > 0:
                        enemy.image = enemy.rightImage
                    self.enemyGroup.add(enemy)

                elif command == 'pokeballs':
                    pokeballX = int(msg[1])
                    pokeballY = int(msg[2])
                    timeDuration = int(msg[3])
                    ball = Pokeball(pokeballX, pokeballY)
                    ball.timeDuration = timeDuration
                    self.pokeballGroup.add(ball)

                elif command == 'bulletFired':
                    x = int(msg[2])
                    y = int(msg[3])
                    player = self.otherPlayerGroup.sprites()[0]
                    self.otherPokeballBullets.add(
                        PokeballBullet(player.x, player.y, x, y))

                elif command == 'playerUpdate':
                    x = int(msg[2])
                    y = int(msg[3])
                    ogX = self.otherPlayer.x
                    ogY = self.otherPlayer.y
                    if x < ogX:
                        self.otherPlayer.baseImage = pygame.transform.rotate(
                            pygame.transform.scale(
                                pygame.image.load('Images/otherPlayerLeft.png'
                                                  ).convert_alpha(), (30, 50)),
                            0)
                    if x > ogX:
                        self.otherPlayer.baseImage = pygame.transform.rotate(
                            pygame.transform.scale(
                                pygame.image.load('Images/otherPlayerRight.png'
                                                  ).convert_alpha(), (30, 50)),
                            0)
                    self.otherPlayer.movePos(x, y)
                    self.otherPlayerGroup.update(self.isKeyPressed, self.width,
                                                 self.height)

                elif command == 'userCaught':
                    self.otherPlayer.numPokemon += 1

                elif command == 'userStolenFrom':
                    self.otherPlayer.numPokemon -= 1

                elif command == 'bulletUpdate':
                    self.otherPokeballBullets.update(self.width, self.height)

                elif command == 'openInstruct':
                    self.startScreen = False
                    self.instructions = True

                elif command == 'startGame':
                    self.instructions = False
                    self.stageOne = True
                    self.stageOneCounterTimer = time.time()

            except:
                #print('failed')
                serverMsg.task_done()

        msg = ""
        self.userGroup.update(self.isKeyPressed, self.width, self.height)
        msg = "playerUpdate %d %d\n" % (self.user.x, self.user.y)
        # if (msg != ""):
        #     print ("sending: ", msg,)
        self.server.send(msg.encode())

        self.enemyGroup.update(self.width, self.height)
        self.pokemonGroup.update(self.width, self.height)

        msg = ""
        self.pokeballBullets.update(self.width, self.height)
        msg = "bulletUpdate noDetails\n"
        # if (msg != ""):
        #     print ("sending: ", msg,)
        self.server.send(msg.encode())

        #STAGE ONE
        if self.stageOne == True:
            self.pokeballGroup.update()  #timer on pokeball decreased
            for ball in self.pokeballGroup:  #once their time runs out, get rid of them
                if ball.timeLeft <= 0:
                    self.pokeballGroup.remove(ball)

            # msg=""
            prob = random.choice(self.pokeballProb)
            if (prob == 1):  #will randomly add pokeballs during the stageOne
                x = random.randint(0, self.width)
                y = random.randint(0, self.height -
                                   150)  #don't spawn under score rect
                self.pokeballGroup.add(Pokeball(x, y))
                for pokeball in self.pokeballGroup:  #don't let obstacle overlap
                    self.pokeballGroup.remove(pokeball)
                    if len(
                            pygame.sprite.spritecollide(
                                pokeball, self.obstacleGroup, False)) > 0:
                        self.pokeballGroup.remove(pokeball)
                    else:
                        self.pokeballGroup.add(pokeball)

            if (self.stageOneCounter -
                    int(time.time() - self.stageOneCounterTimer)
                ) == 0:  #when timer runs out, move on to next stage
                self.stageOne = False
                self.stageTwo = True

            if pygame.sprite.groupcollide(self.userGroup, self.pokeballGroup,
                                          False, True):
                pokeballSound = pygame.mixer.Sound('Music/pokeball.wav')
                pokeballSound.play()
                self.pokeballs += 1

        #STAGE TWO
        if self.stageTwo == True:
            for pokemon in self.pokemonGroup:
                if len(
                        pygame.sprite.spritecollide(
                            pokemon, self.obstacleGroup, False)) > 0:
                    vX, vY = pokemon.velocity
                    vX *= -1
                    vY *= -1
                    pokemon.velocity = vX, vY
            msg = ""
            collisions = pygame.sprite.groupcollide(self.pokemonGroup,
                                                    self.pokeballBullets, True,
                                                    True)
            for pokemon in collisions:
                if len(collisions[pokemon]) > 0:
                    if pokemon.added == False:
                        self.pokemonList.append(pokemon.name)
                        self.user.numPokemon += 1
                        pokemonSound = pygame.mixer.Sound('Music/pokemon.wav')
                        pokemonSound.play()
                        msg = "userCaught noDetails\n"
            # if (msg != ""):
            #     print ("sending: ", msg,)
            self.server.send(msg.encode())

            if self.pokeballs < 1 and len(self.pokeballBullets) < 1 or len(
                    self.pokemonList) == 6:
                if len(self.pokemonList) == 0:
                    self.stageTwo = False
                    self.fail = True
                    lostSound = pygame.mixer.Sound('Music/lost.wav')
                    lostSound.play()
                else:
                    self.stageTwo = False
                    self.stageThree = True
                    self.stageThreeCounterTimer = time.time()

        #STAGE THREE
        if self.stageThree == True:
            self.enemyGroup.update(self.width, self.height)
            for enemy in self.enemyGroup:
                if len(
                        pygame.sprite.spritecollide(enemy, self.obstacleGroup,
                                                    False)) > 0:
                    vX, vY = enemy.velocity
                    enemy.vX *= -1
                    enemy.vY *= -1
                    enemy.velocity = enemy.vX, enemy.vY
            if len(self.pokemonList) < 3:
                self.stageThree = False
                self.lost = True
                lostSound = pygame.mixer.Sound('Music/lost.wav')
                lostSound.play()
            msg = ""
            for collision in pygame.sprite.spritecollide(
                    self.user, self.enemyGroup, False):
                if collision.canSteal == True:
                    self.score += 1
                    self.pokemonList.pop(
                        random.randint(0,
                                       len(self.pokemonList) -
                                       1))  #randomly remove
                    self.user.numPokemon -= 1
                    collision.canSteal = False  #can only take one pokemon from you
                    stolenSound = pygame.mixer.Sound('Music/stolen.wav')
                    stolenSound.play()
                    msg = "userStolenFrom noDetails\n"
            # if (msg != ""):
            #     print ("sending: ", msg,)
            self.server.send(msg.encode())

            if (self.stageThreeCounter -
                    int(time.time() - self.stageThreeCounterTimer)
                ) == 0:  #when timer runs out, move on to next stage
                self.stageThree = False
                self.won = True

        #COLLISION
        ogX = self.user.x
        ogY = self.user.y
        self.user.move(self.isKeyPressed)
        if self.user.dx == -1:
            if pygame.sprite.groupcollide(
                    self.userGroup, self.obstacleGroup, False,
                    False):  #stop user from moving, carries through all stages
                self.user.x = ogX + 20
                self.user.dx = 1
        elif self.user.dx == 1:
            if pygame.sprite.groupcollide(
                    self.userGroup, self.obstacleGroup, False,
                    False):  #stop user from moving, carries through all stages
                self.user.x = ogX - 20
                self.user.dx = -1
        if self.user.dy == 1:
            if pygame.sprite.groupcollide(
                    self.userGroup, self.obstacleGroup, False,
                    False):  #stop user from moving, carries through all stages
                self.user.y = ogY + 20
                self.user.dy = -1
        elif self.user.dy == -1:
            if pygame.sprite.groupcollide(
                    self.userGroup, self.obstacleGroup, False,
                    False):  #stop user from moving, carries through all stages
                self.user.y = ogY + 20
                self.user.dy = 1