python飞机游戏 练习下对象编程还是不错的

pip install pygame

虽然pygame被淘汰的东东,但是学习下面向对象编程,还是不错的

一、启动类

import  pygame
import pygame.midi
import pygame.locals
from games.plane import Plane
from  games.enemy_plane import EnemyPlane
import time





class MainFrame():
    def __init__(self,win_width=480,win_height=600,title="飞机大战"):
        pygame.init()
        pygame.mixer.init()
        self.screen = pygame.display.set_mode((win_width, win_height), 0, 32)
        #窗口背景图片
        self.bkgroud = pygame.image.load(r"images\background2.png").convert_alpha()
        #背景音乐
        pygame.mixer.music.load(r"sound\music.ogg")
        pygame.mixer.music.set_volume(0.2)
        pygame.mixer.music.play(-1)
        #玩家飞机
        self.p1=Plane(self.screen,win_width,win_height,0,200)
        #敌人飞机
        self.enmy_p1=EnemyPlane(self.screen,win_width,win_height,0,0,2)




    def run(self):
        while True:
            self.screen.blit(self.bkgroud, (0, 0))
            self.p1.show()
            self.enmy_p1.show()
            self.screen.blit(self.p1.img1,(self.p1.rect.left,self.p1.rect.top))
            for e in pygame.event.get():
                if e.type == pygame.locals.QUIT:
                    print("exit")
                    exit()
                elif e.type == pygame.locals.KEYDOWN:
                    if e.key == pygame.locals.K_SPACE:
                        print("space")
                    if e.key == pygame.locals.K_w:
                        self.p1.move("up")
                    if e.key == pygame.locals.K_s:
                        self.p1.move("down")
                    if e.key == pygame.locals.K_a:
                        self.p1.move("left")
                    if e.key == pygame.locals.K_d:
                        self.p1.move("right")
                    if e.key == pygame.locals.K_SPACE:
                        self.p1.firing()
                        self.enmy_p1.firing()



            pygame.display.update()


winMain=MainFrame()
winMain.run()

二、玩家飞机类

from  pygame.sprite  import  Sprite
from games.bullet import Bullet
import pygame
class Plane(Sprite):
    def __init__(self,screen,width,height,x,y):
        Sprite.__init__(self)
        self.img1 = pygame.image.load(r"images\plane1.png").convert_alpha()
        
        self.width=width
        self.height=height
        self.rect=self.img1.get_rect()
        self.rect.left=(self.width-self.rect.width)/2
        self.rect.top=self.height-self.rect.height-100
        self.screen=screen
        self.speed=10
        self.bulletList=[]

    def move(self,drect):
        if drect=='up':
            if self.rect.top-  self.speed >= 0:
                self.rect.top -= self.speed

        if drect=='down':
            if self.rect.top+  self.speed <= 600:
                self.rect.top+= self.speed
            print("s")
        if drect=='left':
            if self.rect.left - self.speed > 0:
                self.rect.left-=self.speed
            print("a")
        if drect=='right':
            if self.rect.left+self.speed <= 480:
                self.rect.left += self.speed

    def firing(self):
        for i in range(3):
           bt=Bullet(self.screen,self.width,self.height,self.rect.left+self.rect.width/2,self.rect.top,True)
           self.bulletList.append(bt)

        pass

    def reset(self):
        pass
    def show(self):
        self.screen.blit(self.img1, (self.rect.left, self.rect.top))
        for b in self.bulletList:
            b.show()
            b.move()

三、敌机

from  pygame.sprite  import  Sprite
from games.bullet import Bullet
import pygame
class EnemyPlane(Sprite):
    def __init__(self,screen,width,height,x,y,type):
        Sprite.__init__(self)
        #敌机图片
        if type==0:
            self.img1 = pygame.image.load(r"images\enemy_plane1.png").convert_alpha()
        if type==1:
            self.img1 = pygame.image.load(r"images\enemy_palne2_hit.png").convert_alpha()
        if type==2:
            self.img1 = pygame.image.load(r"images\enemy_plane3.png").convert_alpha()

        self.destroy_image=[]
        
        self.width=width
        self.height=height
        self.rect=self.img1.get_rect()
        self.rect.left=x
        self.rect.top=y
        self.screen=screen
        self.speed=10
        self.bulletList=[]

    def move(self,drect):
       pass


    def firing(self):
        for i in range(3):
           bt=Bullet(self.screen,self.width,self.height,self.rect.left+self.rect.width/2,self.rect.top,False)
           self.bulletList.append(bt)

        pass

    def reset(self):
        pass
    def show(self):
        self.screen.blit(self.img1, (self.rect.left, self.rect.top))
        for b in self.bulletList:
            b.show()
            b.move()

四、子弹类

from pygame.sprite import  Sprite

import pygame

class Bullet(Sprite):
    def __init__(self,screen,width,heigh,x,y,flag):
        Sprite.__init__(self)
        #子弹图片
        if flag:
           self.img1 = pygame.image.load(r"images\bullet1.png").convert_alpha()
        else:
            self.img1 = pygame.image.load(r"images\bullet2.png").convert_alpha()
        self.rect = self.img1.get_rect()
        self.rect.left=x
        self.rect.top=y
        self.speed= 2
        self.screen=screen
        self.flag=flag

    def move(self):
         if self.flag:
            self.rect.top-=self.speed
         else:
             self.rect.top += self.speed

    def show(self):
        self.screen.blit(self.img1, (self.rect.left, self.rect.top))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值