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))