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