首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用python做一个飞机大战,敌机能发射子弹,做出来了,但是敌机发射不了子弹,不知道哪错了?

用python做一个飞机大战,敌机能发射子弹,做出来了,但是敌机发射不了子弹,不知道哪错了?

提问于 2020-07-05 01:16:49
回答 0关注 1查看 547
代码语言:js
复制
import pygame
import random
CREATE_ENEMY_EVENT = pygame.USEREVENT
HERO_FIRE_EVENT = pygame.USEREVENT + 1
ENEMY_FIRE_EVENT = pygame.USEREVENT + 2
class BaseSprite(pygame.sprite.Sprite):
    def __init__(self,image,speed=0):
        super().__init__()
        self.image = pygame.image.load(image)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):
        self.rect.y -= self.speed
class BackGround(BaseSprite):
    def __init__(self,image,isUP=True,speed=1):
        super().__init__(image,speed)
        if isUP:
            self.rect.y = -self.rect.height
            self.rect.x = 0

        else:
            self.rect.y = 0
            self.rect.x = 0
    def update(self):
        self.rect.y += self.speed
        if self.rect.y > self.rect.height:
            self.rect.y = -self.rect.height

class Enemy(BaseSprite):
    def __init__(self,image,speed=1):
        super().__init__(image,speed)
        self.rect.y = -self.rect.height
        self.speed = random.randint(2,4)
        self.rect.x = random.randint(0,423)
        self.bullet_group = pygame.sprite.Group()
        pass
    def update(self):
        self.rect.y += self.speed
        if self.rect.y > 700:
            self.kill()

    def fire(self):
        # print("敌机发射子弹")
        bullet2 = Bullet('./images/ebullet.png')
        bullet2.rect.centerx = self.rect.centerx
        bullet2.rect.y = self.rect.y + 35
        bullet2.speed = self.speed -1
        self.bullet_group.add(bullet2)
        pass
class Hero(BaseSprite):
    def __init__(self,image,speed=0):
        super().__init__(image,speed)
        self.rect.centerx = 240
        self.rect.y = 700-120-126
        self.bullet_group = pygame.sprite.Group()
    def update(self):
        self.rect.x += self.speed
        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.x > 480-102:
            self.rect.x = 480-102
    def fire(self):
        #print('英雄发射了两颗子弹')
        bullet = Bullet('./images/hbullet.png')
        bullet.rect.centerx = self.rect.centerx
        bullet.rect.y = self.rect.y - 35
        bullet1 = Bullet('./images/hbullet.png')
        bullet1.rect.centerx = self.rect.centerx
        bullet1.rect.y = self.rect.y - 45
        self.bullet_group.add(bullet,bullet1)

        pass
class Bullet(BaseSprite):
    def __init__(self,image,speed=1):
        super().__init__(image,speed)
        pass
    def update(self):
        self.rect.y -= self.speed
        if self.rect.y < - self.rect.height:
            self.kill()

class MainGame():

    def create_sprites(self):
        bg1 = BackGround('./images/bg.png')
        bg2 = BackGround('./images/bg.png',isUP=False)
        self.backgroup = pygame.sprite.Group(bg1,bg2)
        self.hero = Hero('./images/hero.png')
        pygame.time.set_timer(HERO_FIRE_EVENT,500)
        self.herogroup = pygame.sprite.Group(self.hero)
        self.enemy = Enemy('./images/enemy.png')
        pygame.time.set_timer(ENEMY_FIRE_EVENT,3000)
        pygame.time.set_timer(self.CREATE_ENEMY_EVENT, 1000)
        self.enemygroup = pygame.sprite.Group()

    def __init__(self):
        screen_rect = pygame.Rect(0,0,480,700)
        self.screen = pygame.display.set_mode((screen_rect.width,screen_rect.height),0,32)
        self.clock = pygame.time.Clock()
        self.CREATE_ENEMY_EVENT = pygame.USEREVENT
        self.create_sprites()

        print('游戏初始化完成')
    def event_handler(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            elif event.type == self.CREATE_ENEMY_EVENT:
                #print('创建敌机')
                enemy = Enemy('./images/enemy.png')
                self.enemygroup.add(enemy)
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    self.hero.speed = -3
                elif event.key == pygame.K_RIGHT:
                    self.hero.speed = 3
            else:
                self.hero.speed = 0
            if event.type == HERO_FIRE_EVENT:
                self.hero.fire()
            else:
                self.enemy.speed = 0
            if event.type == ENEMY_FIRE_EVENT:
                self.enemy.fire()
    def check_collide(self):
        pygame.sprite.groupcollide(self.hero.bullet_group,self.enemygroup,True,True)
        pygame.sprite.groupcollide(self.hero.bullet_group, self.enemy.bullet_group, True, True)
        enemy_count = pygame.sprite.spritecollide(self.hero,self.enemygroup,True)
        for event in self.enemy.bullet_group:
            bullet_count = pygame.sprite.spritecollide(self.hero,self.enemy.bullet_group,True)
            if len(bullet_count) > 0:
                self.hero.kill()
                pygame.quit()
                exit()
        if len(enemy_count)>0:
            self.hero.kill()
            pygame.quit()
            exit()

        pass
    def update_draw_sprites(self):
       for group in [self.backgroup,self.enemygroup,self.enemy.bullet_group,self.herogroup,self.hero.bullet_group]:
           group.update()
           group.draw(self.screen)
    def start_game(self):
        while True:
            self.clock.tick(60)
            self.event_handler()
            self.check_collide()
            self.update_draw_sprites()
            pygame.display.update()


if __name__=='__main__':
    game = MainGame()
    game.start_game()

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档