这个项目random标准库 以及开发游戏必备的pygame游戏库,至于pygame库的安装网上有很多方法 例如 pip install pygame 等等 需要素材的可以联系微信:ask1996
为了使文件更简洁明了 所以楼主用了两个.py文件对项目进行明确分工,一个是创建精灵的功能,一个主文件。
精灵功能代码:
import random
import pygame
WINDOWS_SIZE=pygame.Rect(0,0,480,700)
BRON=pygame.USEREVENT
SHOT=pygame.USEREVENT +1
class GameBegin(pygame.sprite.Sprite):
def __init__(self,name_image,speed=1):
super().__init__()
self.image=pygame.image.load(name_image)
self.rect=self.image.get_rect()
self.speed= speed
def update(self):
self.rect.y = self.rect .y +self.speed
class BackGroup(GameBegin):
def __init__(self,is_alt=False):
super().__init__('./background.png')
if is_alt:
self.rect.y= - WINDOWS_SIZE.height
def update(self):
super().update()
if self.rect.y >= WINDOWS_SIZE.height:
self.rect.y = - WINDOWS_SIZE.height
class EnemY(GameBegin):
def __init__(self):
super().__init__('./enemy1.png')
self.speed=random.randint(2,5) #敌机速度定义
self.rect.x=random.randint(0,422) # 敌机在横轴上随机出现
self.rect.bottom= 0
def update(self):
super().update()
if self.rect.y > WINDOWS_SIZE.height:
self.kill()
def __del__(self):
pass
class HeRo(GameBegin):
def __init__(self):
super().__init__('./hero1.png',speed=0)
self.rect.centerx=WINDOWS_SIZE.centerx
self.rect.bottom= WINDOWS_SIZE.bottom-80
self.bullet_group=pygame.sprite.Group()
def update(self):
self.rect.x = self.rect.x +self.speed
if self.rect.x < WINDOWS_SIZE.left:
self.rect.x = WINDOWS_SIZE.left
elif self.rect.right > WINDOWS_SIZE.right:
self.rect.right = WINDOWS_SIZE.right
def fire(self):
bullet = ShotBoom()
bullet1 = ShotBoom()
bullet2 = ShotBoom()
bullet.rect.centerx=self.rect.centerx
bullet.rect.bottom=self.rect.y - 20
bullet1.rect.centerx = self.rect.centerx
bullet1.rect.bottom = bullet.rect.bottom - 20
bullet2.rect.centerx = self.rect.centerx
bullet2.rect.bottom = bullet1.rect.bottom - 20
self.bullet_group.add(bullet,bullet1,bullet2)
class ShotBoom(GameBegin):
def __init__(self):
super().__init__('./bullet2.png',speed=-2)
def update(self):
super().update()
if self.rect.y < 0:
self.kill()
def __del__(self):
pass
主文件代码:
import pygame
from TRY import *
class GameMain(object):
'''定义主类'''
def __init__(self):
'''初始化'''
super().__init__()
self.clock=pygame.time.Clock() #时钟函数
self.windows=pygame.display.set_mode(WINDOWS_SIZE.size) #定义窗口大小
pygame.time.set_timer(BRON,1000) #产生敌机时钟
pygame.time.set_timer(SHOT,500) #产生子弹时钟
self._creat_sprite()
def _start_game(self):
'''开始游戏'''
while True:
self.clock.tick(100)
self._event()
self._update()
self._check()
pygame.display.update()
def _event(self):
'''事件监听'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
elif event.type == BRON:
enemy=EnemY()
self.enemy_group.add(enemy)
elif event.type == SHOT:
self.hero.fire()
key_pressed=pygame.key.get_pressed()
if key_pressed[pygame.K_RIGHT]:
self.hero.speed=4
elif key_pressed[pygame.K_LEFT]:
self.hero.speed=-4
else:
self.hero.speed=0
def _creat_sprite(self):
'''创建精灵'''
bg=BackGroup()
bg1=BackGroup(True)
self.bg_group=pygame.sprite.Group(bg,bg1)
self.enemy_group=pygame.sprite.Group()
self.hero = HeRo()
self.hero_group = pygame.sprite.Group(self.hero)
def _update(self):
'''更新方法'''
self.bg_group.update()
self.bg_group.draw(self.windows)
self.enemy_group.update()
self.enemy_group.draw(self.windows)
self.hero_group.update()
self.hero_group.draw(self.windows)
self.hero.bullet_group.update()
self.hero.bullet_group.draw(self.windows)
def _check(self):
'''碰撞检测'''
pygame.sprite.groupcollide(self.enemy_group,self.hero.bullet_group,True,True)
pengzhuang=pygame.sprite.spritecollide(self.hero,self.enemy_group,True)
if len(pengzhuang) > 0:
print('敌机牺牲...')
exit(0)
if __name__ == '__main__':
'''在本函数调用'''
game=GameMain()
game._start_game()