# -*- coding: utf-8 -*-
import pygame
from myGameRole import *
# 导入按键的检测
from pygame.locals import *
import time
import random
if __name__ == '__main__':
# pygame初始化
pygame.init()
# 载入效果音乐
bullet_sound = pygame.mixer.Sound('resources/sound/bullet.wav')
enemy_down_sound = pygame.mixer.Sound('resources/sound/enemy1_down.wav')
game_over_sound = pygame.mixer.Sound('resources/sound/game_over.wav')
bullet_sound.set_volume(0.3)
enemy_down_sound.set_volume(0.3)
game_over_sound.set_volume(0.3)
# 载入游戏音乐并循环播放
pygame.mixer.music.load('resources/sound/game_music.wav')
pygame.mixer.music.play(-1, 0)
pygame.mixer.music.set_volume(0.25)
# 创建窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 读出背景图片
background = pygame.image.load('resources/image/background.png').convert()
# 创建对象
playerPlane = Player(screen)
# 敌机列表
enemyList = []
# 敌机产生频率
enemy_frequency = 0
running_control = True
gameOverFlag = False
# 1.显示背景
while running_control:
screen.blit(background,(0, 0))
# 产生敌方飞机
if enemy_frequency % 50 == 0:
num = random.randint(0, SCREEN_WIDTH - 51)
enemy = Enemy(screen, num)
enemyList.append(enemy)
enemy_frequency += 1
if enemy_frequency >= 100:
enemy_frequency = 0
# 判断按键
for event in pygame.event.get():
if event.type == QUIT:
print('exit')
exit()
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT:
# print('left')
playerPlane.keyHandle('left')
elif event.key == K_d or event.key == K_RIGHT:
# print('right')
playerPlane.keyHandle('right')
elif event.key == K_w or event.key == K_UP:
# print('up')
playerPlane.keyHandle('up')
elif event.key == K_s or event.key == K_DOWN:
# print('down')
playerPlane.keyHandle('down')
elif event.key == K_SPACE:
# print('space')
playerPlane.keyHandle('space')
bullet_sound.play()
# print(len(playerPlane.bulletList))
# 这里只是用于检测敌机的状态,如果出界就直接移除,如果被子弹打中就执行爆炸效果随后与子弹一起移除
# 还有一点,图片刷新不能与此同时进行,会有一顿一顿的感觉,所以只在执行爆炸效果时进行刷新,最后统一刷新
for enemy in enemyList:
enemy.move()
if enemy.checkOut():
enemyList.remove(enemy)
continue
x1,y1,w1,h1 = enemy.getPos()
for bullet in playerPlane.bulletList:
x2,y2,w2,h2 = bullet.getPos()
if (x2 + w2 // 2) >= x1 and (x2 + w2 // 2) <= (x1 + w1):
if y2 <= (y1 + h1):
enemy.crash()
playerPlane.bulletList.remove(bullet)
enemyList.remove(enemy)
enemy.draw()
enemy_down_sound.play()
break
x3,y3,w3,h3 = playerPlane.getPos()
if (x1 + w1 // 2) >= x3 and (x1 + w1 // 2) <= (x3 + w3):
if y3 <= (y1 + h1):
# playerPlane.crash()
# # 更新飞机图片
# playerPlane.draw()
# running_control = False
# break
gameOverFlag = True
for enemy in enemyList:
enemy.draw()
# 子弹移动,更新图片
for bullet in playerPlane.bulletList:
bullet.move()
bullet.draw()
# 清楚发射到顶部的子弹
playerPlane.bulletClear()
if gameOverFlag == True:
playerPlane.crash()
running_control = False
game_over_sound.play()
# 更新飞机图片
playerPlane.draw()
# 整个界面刷新
pygame.display.update()
# 延时0.01s
time.sleep(0.03)
# 游戏结束,退出循环
while True:
# 读出背景图片
background = pygame.image.load('resources/image/gameover.png').convert()
screen.blit(background, (0, 0))
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
print('exit')
exit()
time.sleep(0.03)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论







资源评论

- 小舒2019-02-23还行 非常棒
hongbin_xu
- 粉丝: 2841
- 资源: 26

上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助

相关资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
