问题描述
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 (将#修改为@)