微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我无法弄清楚如何在不使用计时器的情况下使用pygame在我的飞船具有额外功能的情况下拍摄加电结果

如何解决我无法弄清楚如何在不使用计时器的情况下使用pygame在我的飞船具有额外功能的情况下拍摄加电结果

The powerup is a balloon with a dollar sign我基本上是在做galaga仿制游戏,我想添加一个功能,使我能够拍摄下降的能量,并使飞船能够一次发射两发子弹。我的代码正确,可以一次发射两发子弹,但是当我使用sprites.groupcollide调用上电时,它只会发射“双发”,然后返回发射一发。我认为这是因为我没有计时器,并且代码仅读取if语句,以应用于子弹击中加电的确切时间,并且此后没有任何时间。当尝试启动电源时,屏幕上还剩下20个外星人时,我尝试放弃启动电源,然后双桶开始,并在新关卡开始时结束。请参阅我附带的代码,并提供任何有用的建议以实现我的目标(如果可能的话,也许使用计时器,但我还无法弄清楚如何使用它)。

import sys

import pygame

from settings import Settings
from ship import Ship
from bullet import Bullet
from alien import Alien
from game_stats import GameStats
from time import sleep
from button import Button
from scoreboard import scoreBoard
from powerup import PowerUp
from power_up_triple_shot import PUTS
from double_barrel import DB
from powerup_rocket_shooter import PURS
from triple_barrel import TB
from rocket_shooter import RS
from pygame.locals import *
from pygame import time



class AlienInvasion:

    def __init__(self):

        pygame.init()
        self.settings = Settings()




        self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height

        pygame.display.set_caption("Consider Phlebas")


        self.stats = GameStats(self)
        self.sb = scoreBoard(self)

        self.ship = Ship(self)
        self.bullets = pygame.sprite.Group()
        self.aliens = pygame.sprite.Group()
        self.triple_barrel = pygame.sprite.Group()
        self.double_barrel = pygame.sprite.Group()
        self.rocket_shooter = pygame.sprite.Group()
        self.powerup = pygame.sprite.Group()
        self.power_up_triple_shot = PUTS(self)
        self.powerup_rocket_shooter = PURS(self)
        self.timer = 0

        self._create_fleet()
        self.play_button = Button(self,"Play")

    def run_game(self):
        
        while True:
            
            self._check_events()

            if self.stats.game_active:
                self.ship.update()
                self.double_barrel.update()
                self._update_double_barrel()
                self.bullets.update()
                self._update_bullets()
                #self._fire_db_bullet()
                
                self._update_aliens()
                
                
                 
                self.drop_powerup()
               
                


            self._update_screen()

        
    
            
                  
    def _check_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)
                    
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                self._check_play_button(mouse_pos) 
             

    def _check_keydown_events(self,event):
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = True
        elif event.key == pygame.K_q:
            sys.exit()
        elif event.key == pygame.K_SPACE:
            self._fire_bullet()
        elif event.key == pygame.K_SPACE:    
            self._fire_db_bullet()
        elif event.key == pygame.K_p and not self.stats.game_active:
            self.settings.initialize_dynamic_settings()
            self.stats.reset_stats()
            self.stats.game_active = True
            self.sb.prep_score()
            self.sb.prep_level()
            self.sb.prep_ships()
            self.aliens.empty
            self.double_barrel.empty()
            self.bullets.empty
            Flippy = pygame.mixer.sound("images/01 Flippy Wonderland.wav")
            pygame.mixer.sound.set_volume(Flippy,0.45)
            Flippy.play(10)


            #self._fire_bullet()
            
            


    def _check_keyup_events(self,event):
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = False


   

    def _fire_bullet(self):
        if len(self.bullets) < self.settings.bullets_allowed:
            new_bullet = Bullet(self)
            self.bullets.add(new_bullet)
            
            
            Sounds = pygame.mixer.sound("images/GunLuger.wav")
            pygame.mixer.sound.set_volume(Sounds,0.05)
            Sounds.play()

        
          
            

    def _update_bullets(self):
        for bullet in self.bullets.copy():
            if bullet.rect.bottom <= 0:
                self.bullets.remove(bullet)

        self._check_bullet_alien_collisions()
        

    def drop_powerup(self):
        powerup = PowerUp(self)
        mushroom = pygame.sprite.groupcollide(self.bullets,self.powerup,True,True)
        #active = pygame.sprite.spritecollideany(self.bullets,collided = None)
        
        for each in range(len(self.powerup)):
            each += 1
            print(each)
        fluff = pygame.sprite.Group.sprites(self.powerup)
        print(fluff)

        if powerup and len(self.aliens) <= 30:
            for powerup in self.powerup.sprites():
                if each == []:
                    for powerup in self.powerup.sprites():
                        pygame.sprite.Group.clear(PowerUp)
                    
                    

                   # if active == True and
                    #self.double_barrel.add()
                    #self.double_barrel.copy()
                    #self._fire_db_bullet()
                    self.powerup.remove(powerup)
                    #self.double_barrel_active = True
                    self._update_double_barrel
        
                elif powerup:    
                    #self.powerup.add(powerup)
                    
                    self.powerup.update()
                    self._check_bullet_alien_collisions()
                
                    
                
                

                
            #for each in self.powerup.sprites():
                
            
            if mushroom:
                powerup == False     
            if powerup and len(self.aliens) == 30:
                self.powerup.add(powerup)
            
                
                
            
        


        
            


    def _update_double_barrel(self):
        mushroom = pygame.sprite.groupcollide(self.bullets,True)
        for each in mushroom.values():
            self._fire_db_bullet()
    
        #for bullet in self.double_barrel.copy():
            #self._fire_db_bullet()
            
        
        #double_tap = DB(self)
       # self.double_barrel.add(double_tap)
         #   if bullet.rect.bottom <= 0:
           #     self.double_barrel.remove(bullet)
        
        self._check_bullet_alien_collisions()
    
    def _fire_db_bullet(self):
        mushroom = pygame.sprite.groupcollide(self.bullets,True)
        
            
        for each in range(len(self.powerup)):
            each += 1
            print(each)
        fluff = pygame.sprite.Group.sprites(self.powerup)
        print(fluff)

        if len(self.double_barrel) < self.settings.double_barrel_allowed:
            try:
                if mushroom.values() and len(self.aliens) > 0 or len(self.powerup) > 0:
                    for each in mushroom.values():
                        double_tap = DB(self)
                        self.double_barrel.add(double_tap)
            except TypeError:
                double_tap = DB(self)
                self.double_barrel.add(double_tap)

       # for bullet in self.double_barrel.copy():    
         #   double_tap = DB(self)

            
         #   self.double_barrel.add(double_tap)
         #   self.double_barrel.add(bullet)
         #   self.double_barrel.sprites()
         #   double_tap.draw_a_bullet()
           
       #     self._update_double_barrel()
       # sick = pygame.mixer.sound("images/Explosion.wav")
       # pygame.mixer.sound.set_volume(sick,0.45)  
       # double_tap.draw_a_bullet()
        #self._fire_bullet()
            
            
            

   # def _update_triple_barrel(self):
        #for bullet in self.triple_barrel.copy():
           # if bullet.rect.bottom <= 0:
            #    self.triple_barrel.remove(bullet)
        #self._check_bullet_alien_collisions()



def _check_bullet_alien_collisions(self):
        collisions = pygame.sprite.groupcollide(self.bullets,self.aliens,True)
        twox = pygame.sprite.groupcollide(self.double_barrel,True)
        #threex = pygame.sprite.groupcollide(self.triple_barrel,True)

        mushroom = pygame.sprite.groupcollide(self.bullets,True)
        #money = pygame.sprite.groupcollide(self.double_barrel,True)
        


        if collisions:
            for aliens in collisions.values():
                self.stats.score += self.settings.alien_points * len(aliens)
            self.sb.prep_score()
            self.sb.check_high_score()
            #self.drop_powerup

        if twox:
            for aliens in twox.values():
                self.stats.score += self.settings.alien_points * len(aliens)
            self.sb.prep_score()
            self.sb.check_high_score()

        if mushroom.values() and len(self.aliens) > 0:
            #pygame.time.set_timer(self.double_barrel.add(double_tap),100)
            if mushroom and len(self.aliens) > 0 and len(self.powerup) < 1:
      
                for each in mushroom.values():
                    for each in mushroom.values():
                        double_tap = DB(self)
                        self._fire_db_bullet()
                        self.double_barrel.add(double_tap)

        if not self.aliens:
            self.bullets.empty()
            self.double_barrel.empty()
            self._create_fleet()
            self.powerup.empty()
            self.settings.increase_speed()

            self.stats.level += 1
            self.sb.prep_level()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。