python小项目之 飞机大战!!!

这个项目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()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值