子弹碰到飞机不会爆炸
代码:
import pygame as pa
import time
import sys
import random
CREAT_ENEMY_EVENT=pa.USEREVENT
class plane(pa.sprite.Sprite): #玩家飞机类
planebullets1=pa.sprite.Group()
def __init__(self,screen):
pa.sprite.Sprite.__init__(self) #pygame 精灵类初始化必须调用
self.x=240
self.y=852/2
self.screen=screen #窗口
self.image=pa.image.load("hero1.png") #102x126
self.speed=10
self.planebullets1=pa.sprite.Group() #精灵类装子弹的列表
self.bulletslist=[] #装子弹的列表
def key_control(self):
key_pressed =pa.key.get_pressed() #获取按下的事件
if key_pressed[pa.K_w] or key_pressed[pa.K_UP]:
self.y=self.y-self.speed
if key_pressed[pa.K_s] or key_pressed[pa.K_DOWN]:
self.y=self.y+self.speed
if key_pressed[pa.K_a] or key_pressed[pa.K_LEFT]:
self.x=self.x-self.speed
if key_pressed[pa.K_d] or key_pressed[pa.K_RIGHT]:
self.x=self.x+self.speed #键盘控制
if self.x<=0:
self.x=0
if (self.x+102)>=480:
self.x=480-102
if self.y<=0:
self.y=0
if (self.y+126)>=852:
self.y=852-126
if key_pressed[pa.K_SPACE]:
bullet=Bullet(self.screen,self.x,self.y)
self.bulletslist.append(bullet)
self.planebullets1.add(bullet) #添加子弹到精灵组
bullet.planebullets.add(bullet)
def display(self):
self.screen.blit(self.image,(self.x,self.y))
for bullet in self.bulletslist:
bullet.move()
bullet.display()
if self.y<0:
bullet.kill() #防止占用内存
def check(self):
pa.sprite.groupcollide(Bullet.planebullets,enemymove.enemies,True,True)
class Bullet(pa.sprite.Sprite):#子弹类
planebullets=pa.sprite.Group()
def __init__(self,screen,x,y):
pa.sprite.Sprite.__init__(self)
self.x=x+(106/2)-10/2
self.y=y-5/2
self.screen=screen
self.bullets=pa.image.load("bullet1.png")
self.bulletspeed=10
self.planebullets=pa.sprite.Group()
def display(self):
self.screen.blit(self.bullets,(self.x,self.y))
def move(self):
self.y-=self.bulletspeed
class Enemy(pa.sprite.Sprite):#敌方飞机类
def __init__(self,screen):
pa.sprite.Sprite.__init__(self)
self.x=random.randint(0,480-57)#防止敌机出现在界外
self.y=0
self.screen=screen
self.image=pa.image.load("enemy1.png") #57x43
self.speed=random.randint(1,3)
def display(self):
self.screen.blit(self.image,(self.x,self.y))
def move(self):
self.y+=self.speed
class enemymove(pa.sprite.Sprite):
enemies=pa.sprite.Group()
def __init__(self,screen):
pa.sprite.Sprite.__init__(self)
self.enemyslist=[] #装敌机的列表
self.screen=screen
self.enemies=pa.sprite.Group()
def add(self):
enemys=Enemy(self.screen)
self.enemyslist.append(enemys)
self.enemies.add(enemys)
def display(self):
for enemys in self.enemyslist:
enemys.move()
enemys.display()
if enemys.y>852:
enemys.kill() #防止占用内存
def main():
pa.init() #初始化窗口
screen=pa.display.set_mode((480,852))
hero=plane(screen)
enemy=Enemy(screen)
pa.time.set_timer(CREAT_ENEMY_EVENT,1000)#定时器
enemys_1=enemymove(screen)
while True:
background=pa.image.load("background.png") #创建游戏背景
screen.blit(background,(0,0))
hero.display()
for event in pa.event.get(): #防止程序未响应
if event.type == pa.QUIT:
pa.quit()
sys.exit()
elif event.type== CREAT_ENEMY_EVENT:
enemys_1.add()
enemys_1.display() #遍历列表
hero.check()
hero.key_control()
pa.display.update()
time.sleep(0.01) #防止键盘读取过快
main()