这里只有基础代码,整体未完善,但是能跑,所有图片都有
1.英雄飞机
import time
import pygame
from bullet import Bullet
class AirPlane(object):
def __init__(self, screen):
self.x = 210
self.y = 700
self.key_space_status = False
self.key_right_status = False
self.key_left_status = False
self.key_up_status = False
self.key_down_status = False
self.screen = screen
self.image = pygame.image.load("./feiji/hero1.png")
self.bullet_list = [] # 子弹集合
self.boom_pictures = [] # 爆炸图片
self.__load_boom_images()
self.hit_times = 0 # 被击中次数
self.is_hit = False
# 飞机移动
def move(self):
if self.key_right_status:
self.x += 5
if self.x > 385:
self.x = 385
if self.key_left_status:
self.x -= 5
if self.x <= 0:
self.x = 0
def display(self):
# 命中检测
if self.is_hit:
print("被打中了", self.hit_times)
self.hit_times += 1
self.screen.blit(self.boom_pictures[self.hit_times - 1], (self.x, self.y))
print(self.hit_times)
if self.hit_times > 3:
time.sleep(1)
exit() # 调用exit让游戏退出
else:
if self.hit_times == 0:
self.screen.blit(self.image, (self.x, self.y))
else:
self.screen.blit(self.boom_pictures[self.hit_times], (self.x, self.y))
for bullet in self.bullet_list:
bullet.display()
bullet.move(self.key_space_status)
if bullet.crossing():
self.bullet_list.remove(bullet)
# 发子弹
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x, self.y))
# 加载爆炸图片
def __load_boom_images(self):
self.boom_pictures.append(pygame.image.load("./feiji/hero_blowup_n1.png"))
self.boom_pictures.append(pygame.image.load("./feiji/hero_blowup_n2.png"))
self.boom_pictures.append(pygame.image.load("./feiji/hero_blowup_n3.png"))
self.boom_pictures.append(pygame.image.load("./feiji/hero_blowup_n4.png"))
2.敌人飞机
import random
import pygame
from EnemyBullet import EnemyBullet
class Enemy(object):
def __init__(self, screen):
self.x = random.randint(0, 210)
self.y = 0
self.screen = screen
self.image = pygame.image.load("./feiji/enemy0.png")
self.speed = 0
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()
def move(self):
if self.direction == "right":
self.x += 5
elif self.direction == "left":
self.x -= 5
if self.x > 480 - 50:
self.direction = "left"
elif self.x < 0:
self.direction = "right"
def fire(self):
random_num = random.randint(1, 100)
if random_num == 8 or random_num == 20:
self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))
3.我的飞机发的子弹
# 创建子弹类
import pygame
class Bullet(object):
def __init__(self, screen, x, y):
self.x = x + 40
self.y = y - 20
self.screen = screen
self.image = pygame.image.load("./feiji/bullet.png")
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move(self, key_space_status):
if key_space_status:
self.y -= 20
def crossing(self):
if self.y < 0:
return True
else:
return False
4.敌人飞机发的子弹
import pygame
class EnemyBullet(object):
def __init__(self, screen, x, y):
self.x = x + 23
self.y = y + 20
self.screen = screen
self.image = pygame.image.load("./feiji/bullet1.png")
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move(self):
self.y += 20
def crossing(self):
if self.y < 0:
return True
else:
return False
5.启动主类
import time;
import pygame
from pygame.locals import *
from Enemy import Enemy
from HeroPlane import AirPlane
def keyboardCheck(airPlane):
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:
airPlane.key_left_status = True
print('left')
# 检测按键是否是d或者right
elif event.key == K_d or event.key == K_RIGHT:
airPlane.key_right_status = True
print('right')
# 检测按键是否是空格键
elif event.key == K_SPACE:
airPlane.key_space_status = True;
airPlane.fire()
elif event.type == KEYUP: # 释放时触发
if event.key == K_a or event.key == K_LEFT:
airPlane.key_left_status = False
# 检测按键是否是d或者方向键right
elif event.key == K_d or event.key == K_RIGHT:
airPlane.key_right_status = False
elif event.key == K_w or event.key == K_UP:
airPlane.key_up_status = False
elif event.key == K_s or event.key == K_DOWN:
airPlane.key_down_status = False
def main():
screen = pygame.display.set_mode((480, 852), 0, 32)
background = pygame.image.load("./feiji/background.png")
hero = AirPlane(screen)
enemy = Enemy(screen)
while True:
screen.blit(background, (0, 0))
hero.display()
enemy.display()
keyboardCheck(hero)
hero.move()
enemy.move()
enemy.fire()
hero = checkIsHit(enemy, hero)
pygame.display.update()
time.sleep(0.01)
def checkIsHit(enemy, hero):
for bullet in enemy.bullet_list:
print("飞机+", hero.x)
print("飞机y", hero.y)
print("子弹", bullet.x)
print("子弹y", bullet.y)
if hero.x < bullet.x < hero.x + 50:
if hero.y < bullet.y < hero.y + 50:
print('英雄死亡')
hero.is_hit = True
else:
hero.is_hit = False
return hero
if __name__ == '__main__':
main()
6.图片
链接:https://pan.baidu.com/s/1M6d80fpsxurzhrw3ZyB7fw
提取码:eahy