#plan pro 需求的描述
# 存在四个对象:我方飞机、敌方飞机、我方子弹、敌方子弹。
#功能:我方飞机可以移动【根据按键来控制】 敌方飞机也可以移动【随机的自动移动】、双方飞机都可以用来发送子弹。
#背景音乐的添加 、
# 步骤:1、创建一个窗口。2、创建一个我方飞机,根据方向键左右的移动。 3、给我方飞机添加发射子弹的功能【可以按下空格键去发送】 、4创建一个敌人飞机,5敌人飞机可以*的移动、6敌人飞机可以自动的发射子弹、
import pygame
#import time
import random#随机产生一个数据对象
import time
from pygame.locals import *
'''
创建子弹类
'''
class Bullet(object):
def __init__(self,x,y,screen):
self.x=x+13
self.y=y-23
self.screen=screen
self.image=pygame.image.load(r'C:\Users\HP\Desktop\zidan.png')
#用来存放子弹的列表
pass
def display(self):
self.screen.blit(self.image,(self.x,self.y))
pass
def move(self):
self.y-=10
def judge(self):
'''
判断子弹是否越界
Returns
-------
None.
'''
if self.y<0:
return True
else:
return False
pass
'''
1、实现飞机的显示,并且可以控制飞机的移动【面向对象】
'''
#获取键盘事件
def key_control(HerObject):
eventlist=pygame.event.get()
for event in eventlist:
if event.type==QUIT:
print('退出')
exit()
pass
elif event.type==KEYDOWN:
if event.type==K_a or event.key==K_LEFT:
print('left')
HerObject.moveleft()
pass
elif event.type==K_d or event.key==K_RIGHT:
print('right')
HerObject.moveright()
pass
elif event.type==K_w or event.key==K_UP:
print('up')
HerObject.moveup()
elif event.type==K_x or event.key==K_DOWN:
print('down')
HerObject.movedown()
elif event.key==K_SPACE:
print('K_SPACE')
HerObject.shootBullet()
pass
pass
pass
class HeroPlane(object):
def __init__(self,screen):
'''
主窗体对象
Parameters
----------
sreen : TYPE
DESCRIPTION.
Returns
-------
None.
'''
#飞机的默认位置
self.x=150
self.y=450
#设置要显示内容的窗口
self.screen=screen
#载入飞机的图片
self.image=pygame.image.load('D:\ppt练习\图片素材\卡通小学生的\plane.png')
self.bulletList=[]
pass
def moveleft(self):
'''
左移动
Returns
-------
None.
'''
if self.x>0:
self.x-=10
pass
def moveright(self):
'''
右移动
Returns
-------
None.
'''
if self.x<250:
self.x+=10
pass
def moveup(self):
if self.y>100:
self.y-=10
pass
def movedown(self):
if self.y<500:
self. y+=10
pass
def display(self):
'''
飞机在窗口中的显示
Returns
-------
None.
'''
#显示飞机
self.screen.blit(self.image,(self.x,self.y))
#完善子弹的展示逻辑
needDelTtemList=[]
for item in self.bulletList:
if item.judge():
needDelTtemList.append(item)
pass
pass
#重新遍历一次,把它进行删除。(这里有一点看不懂)
for i in needDelTtemList:
self.bulletList.remove(i)
pass
for bullet in self.bulletList:
bullet.display() #显示子弹的位置。
bullet.move() #让这个进行移动,下次再显示后就会看到子弹在修改后的位置。
pass
#发射子弹(这里现在还看不懂)
def shootBullet(self):
newBullet=Bullet(self.x,self.y, self.screen)
self.bulletList.append(newBullet)
pass
pass
#创建敌机类
class EnemyPlane:
def __init__(self,screen):
'''
主窗体对象
Parameters
----------
sreen : TYPE
DESCRIPTION.
Returns
-------
None.
'''
#默认设置一个方向
self.direction='right'
#飞机的默认位置
self.x=0
self.y=0
#设置要显示内容的窗口
self.screen=screen
self.bulletList=[]
#载入飞机的图片
self.image=pygame.image.load(r'C:\Users\HP\Desktop\emey.jpg')
pass
#显示敌机以及位置子弹的信息。
def display(self):
self.screen.blit(self.image,(self.x,self.y))
#完善子弹的展示逻辑
needDelTtemList=[]
for item in self.bulletList:
if item.judge():
needDelTtemList.append(item)
pass
pass
#重新遍历一次,把它进行删除。(这里有一点看不懂)
for i in needDelTtemList:
self.bulletList.remove(i)
pass
for bullet in self.bulletList:
bullet.display() #显示子弹的位置。
bullet.move() #让这个进行移动,下次再显示后就会看到子弹在修改后的位置。
pass
pass
def move(self):
if self.direction=='right':
self.x+=1
elif self.direction=='left':
self.x-=1
pass
if self.x>350-20:
self.direction='left'
pass
elif self.x<0:
self.direction='right'
pass
pass
def sheBullet(self):
'''
敌机随机的发射子弹
Returns
-------
None.
'''
num=random.randint(1, 30)
if num==3:
newBullet=EnemyBullet(self.x,self. y,self.screen)
self.bulletList.append(newBullet)
pass
pass
pass
#创建敌机的子弹类。
class EnemyBullet(object):
def __init__(self,x,y,screen):
self.x=x+13
self.y=y+10
self.screen=screen
self.image=pygame.image.load(r'C:\Users\HP\Desktop\zidan.png')
#用来存放子弹的列表
pass
def display(self):
self.screen.blit(self.image,(self.x,self.y))
pass
def move(self):
self.y+=2
def judge(self):
'''
判断子弹是否越界
Returns
-------
None.
'''
if self.y>500:
return True
else:
return False
pass
def main():
# 先创建一个窗口,用来显示内容
screen=pygame.display.set_mode((500,500))
background=pygame.image.load(r'C:\Users\HP\Desktop\plane.jpg')
#设置一个标题
pygame.display.set_caption('飞机游戏')
#添加背景音乐
pygame.mixer.init()
pygame.mixer.music.load(r'C:\Users\HP\Music\I wanna be alive.mp3')
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1) #-1表示无限的进行循环
#创建一个飞机对象。
hero=HeroPlane(screen)
#创建一个敌机对象。
enemyplane=EnemyPlane(screen)
#居中显示出来
while True:
screen.blit(background,(0,0))
#显示玩家飞机的图片
hero.display()
#显示敌机,调用方法。
enemyplane.display()
#敌机移动
enemyplane.move()
#敌机随机发射子弹
enemyplane.sheBullet()
key_control(hero)
#进行更新
pygame.display.update()
#time.sleep(0.1)
pygame.time.Clock().tick(5)
pass
if __name__=='__main__':
main()