代码拉取完成,页面将自动刷新
#作业2
# 导入相应的模块
import pygame
from pygame.locals import *
import os
import time, random
# 放置玩家飞机,并绑定键盘事件,实现飞机移动
class HeroPlane:
'''定义玩家飞机类'''
def __init__(self, screen_temp):
self.x = 200
self.y = 400
self.screen = screen_temp
self.image = pygame.image.load('./images/me.png')
self.bullet_list = [] # 存储发射出去的子弹对象引用
def display(self):
'''绘制玩家到窗口中'''
# 遍历移动子弹
for bullet in self.bullet_list:
bullet.display()
if bullet.move():
self.bullet_list.remove(bullet)
self.screen.blit(self.image, (self.x, self.y))
def move_left(self):
'''左移动并判断防止越界'''
self.x -= 5
if self.x < 0:
self.x = 0
def move_right(self):
'''右移动并判断防止越界'''
self.x += 5
if self.x > 406:
self.x = 406
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x, self.y))
print(len(self.bullet_list))
def move(self, enemylist):
# 遍历敌机的子弹,并做碰撞检测
for em in enemylist:
for bo in em.enemybullet_list:
if bo.x > self.x + 12 and bo.x < self.x + 92 and bo.y > self.y + 20 and bo.y < self.y + 60:
em.enemybullet_list.remove(bo)
return True
class EnemyPlane:
'''敌机类'''
def __init__(self, screen_temp):
self.x = random.choice(range(406))
self.y = -74
self.screen = screen_temp
self.image = pygame.image.load('./images/e2.png')
self.enemybullet_list = [] # 存储发射出去的敌机子弹
def display(self):
# 遍历移动子弹
self.enemybullet_list.append(EnemyBullet(self.screen, self.x, self.y))
for bullet in self.enemybullet_list:
bullet.display()
if bullet.move():
self.enemybullet_list.remove(bullet)
self.screen.blit(self.image, (self.x, self.y))
def move(self, hero):
self.y += 5
# 遍历玩家的子弹,并做碰撞检测
for bo in hero.bullet_list:
if bo.x > self.x + 12 and bo.x < self.x + 92 and bo.y > self.y + 20 and bo.y < self.y + 60:
hero.bullet_list.remove(bo)
return True
# 判断敌机是否越界
if self.y > 512:
return True
class Bullet:
'''玩家子弹类'''
def __init__(self, screen_temp, x, y):
self.x = x + 53
self.y = y
self.screen = screen_temp
self.image = pygame.image.load('./images/pd.png')
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move(self):
self.y -= 10
if self.y < -17:
return True
class EnemyBullet:
'''敌机子弹类'''
def __init__(self, screen_temp, x, y):
self.x = x + 52
self.y = y
self.screen = screen_temp
self.image = pygame.image.load('./images/pd.png')
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move(self):
self.y += 50
if self.y > 551:
return True
class Bomb:
'''爆炸图片类'''
def __init__(self, screen_temp, x, y):
self.x = x
self.y = y
self.screen = screen_temp
self.image = pygame.image.load('./images/bomb.png')
def display(self):
self.screen.blit(self.image, (self.x, self.y))
# 添加键盘事件处理函数。
def key_control(hero_temp):
#键盘控制函数
#执行退出操作
for event in pygame.event.get():
if event.type == QUIT:
print("exit()")
exit()
#获取按键信息
pressed_keys = pygame.key.get_pressed()
if pressed_keys[K_LEFT]:
print("left")
hero_temp.move_left()
elif pressed_keys[K_RIGHT]:
print("right")
hero_temp.move_right()
if pressed_keys[K_SPACE]:
print("space")
hero_temp.fire()
def main():
# 创建游戏主窗口
screen = pygame.display.set_mode((512, 568), 0, 0)
# 设置背景
background = pygame.image.load('./images/bg2.jpg')
m = -968
# 创建玩家飞机对象
hero = HeroPlane(screen)
# 定义用于存放敌机列表
enemylist = []
while True:
# 绘制画面(放入背景图片background)
screen.blit(background, (0, m))
m += 2
if m >= 0:
m = -968
# 显示玩家飞机
hero.display()
if hero.move(enemylist):
exit()
# 键盘控制玩家移动
key_control(hero)
# 随机输出敌机
if random.choice(range(50)) == 10:
enemylist.append(EnemyPlane(screen))
# 遍历所有敌机,显示敌机,移动敌机,并与玩家子弹碰撞检测
for em in enemylist:
em.display()
if em.move(hero):
enemylist.remove(em)
# 更新显示
pygame.display.update()
time.sleep(0.04)
# 判断当前是否是主运行程序,并调用
if __name__ == '__main__':
main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。