pygame制作飞机大战

一、下载pygame库

下载地址:https://pypi.org/project/pygame/#files

按住window+R,打开cmd命令面板,输入pip install pygame。

二、制作素材准备

敌人

玩家

 

背景

三、代码

1,先建飞机大战框架,后进行封装。

import random
import pygame

SCREEN_RECT=pygame.Rect(0,0,480,700)
#刷新的
FRAME_PER_SEC=60

CREATE_ENEMY_EVENT=pygame.USEREVENT

HERO_FIRE_EVENT=pygame.USEREVENT+1

class GameSprite(pygame.sprite.Sprite):

    def __init__(self,image_name,speed=1):

        super().__init__()
        self.image=pygame.image.load(image_name)
        self.rect=self.image.get_rect()
        self.speed=speed

    def update(self):
        self.rect.y+=self.speed


class Background(GameSprite):

    def __init__(self,is_alt=False):
        """#调用父类方法实现精灵的创建"""
        super().__init__("./images/background.png")
        if is_alt:
            self.rect.y=-self.rect.height

    def update(self):
        super().update()
        if self.rect.y>=SCREEN_RECT.height:
            self.rect.y=-self.rect.height


class Enemy(GameSprite):
    def __init__(self):
        super().__init__("./images/enemy1.png")
        self.speed=random.randint(1,3)

        self.rect.bottom=0
        max_x=SCREEN_RECT.width-self.rect.width
        self.rect.x=random.randint(0,max_x)


        pass
    def update(self):
        super().update()
        if self.rect.y>=SCREEN_RECT.height:
            #print("敌机飞出屏幕")

            self.kill()

    def __del__(self):
        #print("敌机挂了 %s" % self.rect)
        pass


class Hero(GameSprite):
    """ """
    def __init__(self):
        super().__init__("./images/me1.png",0)

        self.rect.centerx=SCREEN_RECT.centerx
        self.rect.bottom=SCREEN_RECT.bottom - 120

        self.bullets=pygame.sprite.Group()

    def update(self):
        self.rect.x+=self.speed

        if self.rect.x<0:
            self.rect.x=0
        elif self.rect.right>SCREEN_RECT.right:
            self.rect.right=SCREEN_RECT.right

    def fire(self):
        print("。。。")

        for i in (0,1,2):
            bullet=Bullet()
            bullet.rect.bottom=self.rect.y-i* 20
            bullet.rect.centerx=self.rect.centerx

            self.bullets.add(bullet)

class Bullet(GameSprite):
    def __init__(self):

        super().__init__("./images/bullet1.png",-2)

    def update(self):
        super().update()

        if self.rect.bottom<0:
            self.kill()


    def __del__(self):
        print("子弹被销毁")

  2、新建py文件,构建飞机大战主体,调用之前封装的py文件。

import pygame
from hm_05 import *

class PlaneGame(object):
    """飞机大战主游戏"""

    def __init__(self):
        print("游戏初始化")

        #1.创建游戏窗口
        self.screen=pygame.display.set_mode(SCREEN_RECT.size )
        #创建游戏时钟
        self.clock=pygame.time.Clock()
        #调用私有方法,精灵和精灵组的创建
        self.__create_sprites()
        pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)
        pygame.time.set_timer(HERO_FIRE_EVENT,500)
    def __create_sprites(self):
        bg1=Background()
        bg2=Background(True)

        self.back_group=pygame.sprite.Group(bg1,bg2)

        self.enemy_group=pygame.sprite.Group()
        self.hero=Hero()
        self.hero_group=pygame.sprite.Group(self.hero)

    def start_game(self):
        print("游戏开始了,,,")

        while True:
            self.clock.tick(FRAME_PER_SEC)

            self.__event_handler()

            self.__check_collide()

            self.__update_sprite()
            pygame.display.update()

    def __event_handler(self):
        for event in  pygame.event.get():
            if event.type==pygame.QUIT:
                PlaneGame.__game_over()
            elif event.type==CREATE_ENEMY_EVENT:
                #print("敌机出场")
                enemy=Enemy()
                self.enemy_group.add(enemy)
            elif event.type==HERO_FIRE_EVENT:
                self.hero.fire()

            #elif event.type==pygame.KEYDOWN and event.key==pygame.K_RIGHT:
                #print("向右移动")
        #使用键盘提供的方法获取键盘的按键——按键元组
        key_pressed=pygame.key.get_pressed()
        if key_pressed[pygame.K_RIGHT]:
            self.hero.speed=2
        elif key_pressed[pygame.K_LEFT]:
            self.hero.speed=-2
        else:
            self.hero.speed=0

    def __check_collide(self):

        pygame.sprite.groupcollide(self.hero.bullets,self.enemy_group,True,True)
        enemies=pygame.sprite.spritecollide(self.hero,self.enemy_group,True)
        #判断列表有内容
        if len(enemies)>0:
            self.hero.kill()

            PlaneGame.__game_over()

    def __update_sprite(self):

        self.back_group.update()
        self.back_group.draw(self.screen)
        self.enemy_group.update()
        self.enemy_group.draw(self.screen)
        self.hero_group.update()
        self.hero_group.draw(self.screen)

        self.hero.bullets.update()
        self.hero.bullets.draw(self.screen)

    @staticmethod
    def __game_over():
        print("游戏结束")

        pygame.quit()
        exit()

if __name__ == '__main__':
    #创建游戏对像
    game=PlaneGame()
    game.start_game()

  3、运行结果

 

posted @ 2019-06-13 00:33  百尺鸟  阅读(3793)  评论(0编辑  收藏  举报