1 Star 0 Fork 0

nonzee/second_week_homework

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2 5.21 KB
一键复制 编辑 原始数据 按行查看 历史
nonzee 提交于 2019-07-10 18:07 +08:00 . 更新 2
#作业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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/nongee2014/second_week_homework.git
git@gitee.com:nongee2014/second_week_homework.git
nongee2014
second_week_homework
second_week_homework
master

搜索帮助