每当我的玩家进门时,我如何杀死/重新生成我的敌人?

时间:2016-02-01 10:17:00

标签: python pygame kill

import pygame
import os,sys
import random
import math
img_path = os.path.join("punch.png")
img_blob = os.path.join("blob.png")
img_bullet = os.path.join("bullet.png")
img_heart = os.path.join("heart.png")
score = 0
class Actor(pygame.sprite.Sprite):

def __init__(self, x, y):
    super(Actor,self).__init__()
    self.image = pygame.Surface([116,116])
    self.image.set_colorkey(black)
    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y
    self.speed = 2

class Enemy(Actor):

def __init__(self, x, y):
     super(Enemy, self).__init__(x, y)
     self.target = None
     self.image.blit(pygame.image.load(img_blob),(0,0))
def update(self, enemies):
    if self.target:
        dx,dy =  self.target.rect.x - self.rect.x,  self.target.rect.y - self.rect.y
        dist = math.hypot(dx,dy)
        dx,dy = dx / dist,dy / dist
        self.rect.x += dx * self.speed
        self.rect.y += dy * self.speed


class Character(Actor):
def __init__(self, x = 275, y = 250):
    super(Character, self).__init__(x, y)
    self.speed = 10
    self.image.blit(pygame.image.load(img_path),(0,0))
    self.score = 0
    self.heart = 5
def update(self, enemies):
    if pygame.sprite.spritecollide(self, enemies, False):
        self.heart -= 1
        pygame.sprite.spritecollide(self, enemies, True)

    key = pygame.key.get_pressed()

    if key[pygame.K_w]:
        self.rect.y -= self.speed
    elif key[pygame.K_s]:
        self.rect.y += self.speed
    if key[pygame.K_a]:
        self.rect.x -= self.speed
    elif key[pygame.K_d]:
        self.rect.x += self.speed

    if self.rect.x > 1110:
        self.rect.x = 1110

    if self.rect.y < 20:
        self.rect.y = 20

    elif self.rect.y > 710:
        self.rect.y = 710
    if self.rect.x <20:
        self.rect.x = 20
    elif self.rect.x == 1110 and self.rect.y > 300 and self.rect.y < 400:
        self.rect.x = 25
    if self.rect.y == 20 and self.rect.x >500 and self.rect.x < 600:
        self.rect.y = 715
    elif self.rect.x == 20 and self.rect.y > 300 and self.rect.y < 400:
        self.rect.x = 1090
    if self.rect.y == 710 and self.rect.x >500 and self.rect.x < 600:
        self.rect.y = 25

class Bullet(pygame.sprite.Sprite):
def __init__(self,mouse,bird):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load(img_bullet)
    self.mouse_x,self.mouse_y = mouse[0], mouse[1]
    self.bird = bird
    self.rect = self.image.get_rect()
def update(self,enemies):
    if pygame.sprite.spritecollide(self, enemies, False):
        bird.score += 10
        pygame.sprite.spritecollide(self, enemies, True)
    speed = -10.
    range = 50
    distance = [self.mouse_x - self.bird[0],self.mouse_y - self.bird[1]]
    norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
    direction = [distance[0] / norm, distance[1] / norm]
    bullet_vector = [direction[0] * speed,direction[1] * speed]

    self.rect.x -=bullet_vector[0]
    self.rect.y -= bullet_vector[1]






pygame.init()                               # Pygame is initialised (starts running)

players = pygame.sprite.Group()
screen = pygame.display.set_mode([1250,850]) # Set the width and height of the screen [width,height]
pygame.display.set_caption("My Game")       # Name your window
background_image = pygame.image.load("untilted.png")

done = False                                # Loop until the user clicks the close button.

clock = pygame.time.Clock()                 # Used to manage how fast the screen updates
black    = (   0,   0,   0)                 # Define some colors using rgb values.  These can be
white    = ( 255, 255, 255)                 # used throughout the game instead of using rgb values.
font = pygame.font.Font(None,36)
# Define additional Functions and Procedures here
score = 0
bird = Character()
bullet = Bullet(pygame.mouse.get_pos(),[bird.rect.x,bird.rect.y])
blob = Enemy(random.randint(200,1000),random.randint(200,300))
blob.target=bird
all_sprites = pygame.sprite.Group([blob, bird])
enemies = pygame.sprite.Group([blob])

# -------- Main Program Loop -----------
while done == False:

for event in pygame.event.get():        # Check for an event (mouse click, key press)
    key = pygame.key.get_pressed()
    if event.type == pygame.QUIT:       # If user clicked close window
        done = True                     # Flag that we are done so we exit this loop
    elif key[pygame.K_e]:
        bullet = Bullet(pygame.mouse.get_pos(),[bird.rect.x,bird.rect.y])
        bullet.rect.x = bird.rect.x
        bullet.rect.y = bird.rect.y
        all_sprites.add(bullet)
screen.blit(background_image, (0, 0))

all_sprites.update(enemies)
all_sprites.draw(screen)
textImg = font.render("Score: " + str(bird.score),1,white)
textImg2 = font.render("Lives: " + str(bird.heart),1,white)
screen.blit(textImg,(10,10))
screen.blit(textImg2,(150,10))
pygame.display.update()                   # Go ahead and update the screen with what we've drawn.

clock.tick(20)                              # Limit to 20 frames per second
if bird.heart == 0:
    pygame.quit()

pygame.quit()

所以在Character类中,在更新部分,它的底部是它通过门的地方,但当它通过门时,我想要杀死敌人,然后重新产生它,所以它看起来好像玩家正在进入另一个房间。

2 个答案:

答案 0 :(得分:0)

某处,您的Enemy(Actor)应该有HP值。在你的角色类中,玩家通过门,你可以将所有敌人HP设置为0并且它们全部死亡,这样你就可以重生它们。

如果你想让它们瞬间消失(如果你有死亡动画可能就是这种情况),你可以使用一个常见的技巧,只需将它们的Y坐标设置在地下并在那里杀死它们。

答案 1 :(得分:0)

在班级respawn()Enemy中创建方法Actor,并在需要时使用它。

在此方法中使用random来更改位置。

即使您创建新的Enemy

,也可以调用它