飞机大战-玩家飞机被击中
# -*- coding:utf-8 -*-
import pygame
import time
from pygame.locals import *
import random
# 玩家飞机
class HeroPlane(object):
def __init__(self,screen_temp):
self.x=200
self.y=440
self.image=pygame.image.load("./feiji/hero_live.png")
self.screen=screen_temp
self.bullet_list=[]
def display(self):
self.screen.blit(self.image, (self.x, self.y))
for bullet in self.bullet_list:
bullet.display()
bullet.move_up()
if bullet.judget():#判断子弹是否越界
self.bullet_list.remove(bullet)
def move_left(self):
self.x-=5
def move_right(self):
self.x+=5
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x+50, self.y-50))
def bong(self,enemy,hero):
enemy.enemybullethit(self.x,enemy,hero)
def changeimg(self,enemyplan_temp):
self.image = pygame.image.load("./feiji/hero.png")
self.screen.blit(self.image, (self.x, self.y))
enemyplan_temp.stop()
# 敌人飞机
class EnemyPlane(object):
def __init__(self,screen_temp):
self.x=0
self.y=0
self.image=pygame.image.load("./feiji/enermy.png")
self.screen=screen_temp
self.bullet_list = []
self.direction = "right"
def display(self):
self.screen.blit(self.image, (self.x, self.y))
for bullet in self.bullet_list:
bullet.display()
bullet.move_down()
if bullet.judget():#判断子弹是否越界
self.bullet_list.remove(bullet)
def move(self):
"""方向决定表达式 边界值更改方向值"""
if self.direction == "right":
self.x += 2
elif self.direction == "left":
self.x -= 2
if self.x>410:
self.direction = "left"
elif self.x<0:
self.direction = "right"
def autofire(self):
random_num=random.randint(1,100)
if random_num==20 or random_num==80:
self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))
def enemybullethit(self, heroplan_x_temp,enemyplan_temp,heroplan_temp):
for bullet in self.bullet_list:
bullet.hit(heroplan_x_temp,enemyplan_temp,heroplan_temp)
def stop(self):
self.direction = None# 敌机停止
class Bullet(object):
def __init__(self,screen_temp, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("./feiji/zidan.png")
self.screen = screen_temp
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move_up(self):
self.y -= 10
def judget(self):
if self.y<0:
return True
else:
return False
class EnemyBullet(Bullet):
def __init__(self,screen_temp, x, y):
self.x = x+50
self.y = y+100
self.image = pygame.image.load("./feiji/zidan2.png")
self.screen = screen_temp
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move_down(self):
self.y += 10
def judget(self):
if self.y>600:
return True
else:
return False
def hit(self,heroplan_x_temp,enemyplan_temp,heroplan_temp):
if self.y >=440 and self.y<=600:
# 获取玩家的飞机的x值进行判断
# x1=玩家飞机.x x2=x1+142
x1 = heroplan_x_temp
x2 = x1 + 142
if self.x >=x1 and self.x <=x2:
print("击中!!!!!")
# 玩家飞机换图 game over
heroplan_temp.changeimg(enemyplan_temp)
def key_control(hero_temp):
# 获取事件,比如按键等
for event in pygame.event.get():
# 判断是否点击了退出按钮
if event.type == QUIT: # 点击窗口的退出键
print("exit")
exit()
# 判断是否按下了键
elif event.type == KEYDOWN:
# 检测是否 a 或者 left
if event.key == K_a or event.key == K_LEFT:
print("left")
hero_temp.move_left()
# 检测是否 d 或者 right
elif event.key == K_d or event.key == K_RIGHT:
print("right")
hero_temp.move_right()
# 空格键
elif event.key == K_SPACE:
print("space")
hero_temp.fire()
def main():
# 创建一个窗口
screen = pygame.display.set_mode((480,600),0,32)
# 创建一个背景图片
background = pygame.image.load("./feiji/bg.png")
#创建一个飞机对象
hero = HeroPlane(screen)
#创建敌人飞机
enemy = EnemyPlane(screen)
while True:
screen.blit(background,(0,0))
hero.display()
enemy.display()
enemy.move()#调用敌机的移动
enemy.autofire() # 调用敌机的发射子弹
hero.bong(enemy,hero) #玩家飞机爆炸
pygame.display.update()
key_control(hero)
time.sleep(0.01)
if __name__ == '__main__':
main()


源于生活,更源于兴趣! ***开源的忠实码粉***
浙公网安备 33010602011771号