Ejemplo n.º 1
0
    def update(self, screen, timer, player, enemy_sprites, item_sprites, interface):
        #move peon toward player
        if self.tracker:
            dx = player.rect.centerx - self.rect.centerx
            dy = player.rect.centery - self.rect.centery

            toPlayer = get_u(dx, dy)
                        
            self.rect.centerx += toPlayer[0]*self.speed
            self.rect.centery += toPlayer[1]*self.speed
        #move linear
        elif self.direction == 'left':
            if self.rect.centerx > 20:
                self.rect.centerx -= self.speed
            else:
                self.grabGold(timer, item_sprites, interface)
        
        #return with gold
        elif self.direction == 'right':
            self.rect.centerx += self.speed+4
            self.gold.rect.center = self.rect.center

        self.hitBox.center = self.rect.center    
        #kill minion if dead
        if self.hitPoints <= 0:
            player.totalPoints += self.points
            self.kill()
        #or offscreen
        if self.rect.centerx > screen.get_width()+30:
            self.kill()
Ejemplo n.º 2
0
    def update(self, screen, timer, player, enemy_sprites, item_sprites, interface):

        # hp bar
        pygame.draw.rect(screen, (0, 0, 0), (5, 459, 506, 18))
        pygame.draw.rect(screen, (255, 0, 0), (8, 462, 500, 12))
        if self.hitPoints > 0:
            pygame.draw.rect(screen, (0, 255, 0), (8, 462, self.hitPoints * 5, 12))
        else:
            # boss died, drop powerup
            if player.largeFireball == False:
                item_sprites.add(minions.LargeFireball(self.rect.center))
            player.totalPoints += self.points
            enemy_sprites.remove(self)
        # make kingknight flash red when hit
        if timer - self.hit_timer > 0.05:
            self.image = king_knight

        # move kingknight toward player
        dx = player.rect.centerx - self.rect.centerx
        dy = player.rect.centery - self.rect.centery

        toPlayer = get_u(dx, dy)

        self.rect.centerx += toPlayer[0] * self.speed
        self.rect.centery += toPlayer[1] * self.speed

        self.head = self.getHead()
        self.chest = self.getChest()
        self.legs = self.getLegs()
        self.hitBoxes = [self.head, self.chest, self.legs]
Ejemplo n.º 3
0
    def update(self, player, dragon, enemy_sprites, projectile_sprites, item_sprites, screen, interface):
        # Change player angle
        mousePos = pygame.mouse.get_pos()
        playerRect = player.rect.center

        dx1 = mousePos[0] - playerRect[0]
        dy1 = mousePos[1] - playerRect[1]
        angle = math.atan2(-dy1, dx1)/math.pi*180

        playerRot = pygame.transform.rotozoom(dragon,angle, 1)
        player.image = playerRot
        player.rect = player.image.get_rect(center = player.rect.center)
        # 3 - Event processing
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            # create fireball on left mouse event
            elif event.type == pygame.MOUSEBUTTONDOWN:
                
                mouse = pygame.mouse.get_pos()
                dx = mouse[0] - player.rect.centerx
                dy = mouse[1] - player.rect.centery

                angle = math.atan2(dy, dx)
                u = get_u(dx, dy)
                #small fireball
                if event.button == LEFT:
                    self.shoot.play()
                    fireball = SmallFireball(angle, u, player)
                    img = fireball.image
                    angle = angle / math.pi * 180
                    fireball.image = pygame.transform.rotate(img, -angle)
                    projectile_sprites.add(fireball)
                #large fireball
                if event.button == 3 and self.largeFireball == True and self.rightclick_cd <= 0:
                    self.rightclick_cd = 3
                    self.shootbig.play()
                    fireball = projectiles.BigFireball(angle, u, player)
                    self.largeFireballId += 1
                    img = fireball.image
                    angle = angle / math.pi * 180
                    fireball.image = pygame.transform.rotate(img, -angle)
                    projectile_sprites.add(fireball)
            # fly toward mouse on spacebar
            if (event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE and 
                self.flycd <= 0):
                mouse = pygame.mouse.get_pos()
                dx = mouse[0] - self.rect.centerx
                dy = mouse[1] - self.rect.centery

                angle = math.atan2(-dy, dx)
                angle = angle / math.pi * 180

                self.flyAngle = angle
                self.flycd = 1
                self.flyDuration = .2
            # player movement
            if event.type == pygame.KEYDOWN:
                if event.key==K_w:
                    keys[0]=True
                elif event.key==K_a:
                    keys[1]=True
                elif event.key==K_s:
                    keys[2]=True
                elif event.key==K_d:
                    keys[3]=True
            if event.type == pygame.KEYUP:                
                if event.key==pygame.K_w:
                    keys[0]=False
                elif event.key==pygame.K_a:
                    keys[1]=False
                elif event.key==pygame.K_s:
                    keys[2]=False
                elif event.key==pygame.K_d:
                    keys[3]=False
        # make player fly for duration
        if self.flyDuration <= .2 and self.flyDuration > 0:
            #self.rect.centerx += math.cos(self.flyAngle)*10
            #self.rect.centery += math.sin(self.flyAngle)*10
            u = get_u(dx1, dy1)
            self.rect.centerx += u[0]*18
            self.rect.centery += u[1]*18
        # move player
        if keys[0]:
            self.rect.centery -= 5
        elif keys[2]:
            self.rect.centery += 5
        if keys[1]:
            self.rect.centerx -= 5
        elif keys[3]:
            self.rect.centerx += 5

        self.hitBox.center = self.rect.center
        # Check for player vs enemy collisions
        for enemy in enemy_sprites:
            for box in enemy.hitBoxes:
                while self.hitBox.colliderect(box):
                    self.hitPoints -= 20
                    #push dragon away from enemy collision
                    if self.rect.centerx < box.centerx:
                        self.rect.centerx -= 50          
                    elif self.rect.centerx > box.centerx:
                        self.rect.centerx += 50
                    if self.rect.centery < box.centery:
                        self.rect.centery -= 50
                    elif self.rect.centery > box.centery:
                        self.rect.centery += 50
                    self.hitBox.center = self.rect.center 

        #check for item collisions
        for item in item_sprites:
            if self.hitBox.colliderect(item.rect):
                if hasattr(item, 'value'):
                    interface.goldTotal += item.value
                if type(item) == minions.LargeFireball:
                    self.largeFireball = True
                item.kill()