您的位置:首页 > 编程语言 > Python开发

Python---飞机大战小游戏

2019-07-28 14:43 85 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_40927742/article/details/97614495
import pygame
import random

class MyPlane(object):

# 属性:
#  XY坐标问题
#  飞机图片名字

def __init__(self,screen):
self.x = 240-49
self.y = 850-124
self.screen = screen
self.name = 'feiji2.png'
self.planeimage = pygame.image.load(self.name)
self.bullist = []

# 方法:
#     展示
def show(self):
#  加载图片到窗口
self.screen.blit(self.planeimage,(self.x,self.y))

removebul_list = []
# 存放需要删除的子弹对象
for bul in self.bullist:
# 保存需要删除的对象
if bul.judge():
removebul_list.append(bul)
#    在总的子弹列表里面删除需要删除的子弹
for need_rem in removebul_list:
self.bullist.remove(need_rem)

#     显示子弹并且让他移动起来
for bul in self.bullist:
bul.show_bullet()
bul.move()
# 绘制到窗口
#   左
def moveleft(self):
self.x -= 20
if self.x <=0:
self.x = 0

#  右移动
def moveright(self):
self.x += 20
if self.x >= 480 - 98:
self.x = 480 - 98

def moveup(self):
self.y -= 50
if self.y <= 0:
self.y = 0

def movedown(self):
self.y += 50
if self.y >= 850 - 124:
self.y = 850 - 124

def shoot(self):
'''
发射子弹,用空格
:return:
'''
bul = Bullet(self.x,self.y,self.screen)
self.bullist.append(bul)

class Bullet(object):
# 子弹
def __init__(self,x,y,screen):
# 属性:XY需要图片
self.x = x + 40
self.y = y - 50
self.screen = screen
self.bulimage = pygame.image.load('bullet.png')
def show_bullet(self):
self.screen.blit(self.bulimage,(self.x,self.y))

def move(self):
self.y -= 10

def judge(self):
if self.y < 0:
return True
else:
return False

class FBullet(object):
# 子弹
def __init__(self, x, y, screen):
# 属性:XY需要图片
self.x = x + 40
self.y = y - 50
self.screen = screen
self.bulimage = pygame.image.load('bullet-2.gif')

def show_bullet(self):
self.screen.blit(self.bulimage, (self.x, self.y))

def move(self):
self.y += 5

def judge(self):
if self.y > 850:
return True
else:
return False

class Fighter(object):

# 敌机
def __init__(self,screen):
# 属性:位置。敌机的名字
self.x = 0
self.y = 0
self.derection = 'right'
self.screen = screen
self.fighterplane = pygame.image.load('enemy1.png')
self.fit_bul_list = []

def show_fighetr(self):
self.screen.blit(self.fighterplane,(self.x,self.y))

removebul_list = []
# 存放需要删除的子弹对象
for bul in self.fit_bul_list:
# 保存需要删除的对象
if bul.judge():
removebul_list.append(bul)
# 在总的子弹列表里面删除需要删除的子弹
for need_rem in removebul_list:
self.fit_bul_list.remove(need_rem)

# 显示子弹并且让他移动起来
for bul in self.fit_bul_list:
bul.show_bullet()
bul.move()

def move_fit(self):
if self.derection == 'right':
self.x += 1

elif self.derection == 'left':
self.x -= 1

if self.x > 480-60:
self.derection = 'left'

if self.x <0:
self.derection = 'right'

def shoot_bul(self):
#     敌机发射子弹
num = random.randint(1,50)
if num == 10 or num == 20:
new_fit_bul = FBullet(self.x,self.y,self.screen)
self.fit_bul_list.append(new_fit_bul)

def key_control(myplane):
'''
检测用户的鼠标和键盘输入
:return:
'''
# 5、检测事件,获取具体事件
event_lists = pygame.event.get()
for event in event_lists:

if event.type == pygame.QUIT:
# 检测鼠标事件
print('关闭')
exit()
elif event.type == pygame.KEYDOWN:
#  检测键盘点击事件
if event.key == pygame.K_LEFT or event.key == pygame.K_a:
print('按下左键')
myplane.moveleft()

elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
print('按下右键')
myplane.moveright()
elif event.key == pygame.K_UP or event.key == pygame.K_w:
print('按下向上的键')
myplane.moveup()

elif event.key == pygame.K_DOWN or event.key == pygame.K_z:
print('向下移动')
myplane.movedown()
elif event.key == pygame.K_SPACE:
myplane.shoot()

else:
print('输入不合法')

def main():
'''
这是一个飞机大战游戏
:return:
'''

# 1、创建一个窗口
screen = pygame.display.set_mode((480,850))
pygame.display.set_caption('雷霆战机')
# 2、加载图片,作为背景
background = pygame.image.load('bj7.jpg')
# 2-2利用飞机类创建出一个对象,这个对象可以有多个属性与方法
myplane = MyPlane(screen)
# 2-3利用敌机类,创建一个敌机对戏那个
fighter = Fighter(screen)

while True:
# 3、将图片加载到窗口
screen.blit(background,(0,0))
myplane.show()
fighter.show_fighetr()
fighter.move_fit()
fighter.shoot_bul()

# 5、检测事件,获取具体事件
key_control(myplane)
#if hit

# 4、刷新
pygame.display.update()
import time
time.sleep(0.001)

if __name__=='__main__':
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: