从这节课开始,我们将逐渐完成并实现一个飞机大战的游戏,具体要求如下:
游戏的基本设定
1、敌方共有大中小3款飞机,分别为高中低三中速度,自己还可以设置一个游戏等级窗口,来改变自己刚开始进入游戏时难度等级;
2、子弹的射程并非全屏,而大概是屏幕长度的80%;
3、消灭飞机需要1发子弹,中飞机需要8发子弹,大飞机需要20发子弹;
4、每消灭一架飞机得1000分,中飞机4000分,打飞机10000分;
5、每隔30秒有一个随机的道具补给,分为两种道具,全屏炸弹和双倍子弹;
6、全屏炸弹最多只能存放3枚,双倍子弹可以维持时间为18秒;
7、游戏将根据分数来逐渐提高难度。难度的提高表现为飞机数量的增多以及速度的加快。
对游戏做的改进
1、(自己思考,之后写入:可以写几个高分榜,每次飞机死亡后,让玩家输入自己的姓名,然后排入高分榜;但是因为初始难度的不同,所以高分榜暂定要分为3个榜单)
2、为中飞机和打飞机增加了血槽的显示,这样我们可以直观的知道敌机快被消灭了没有;
3、我方有三次机会,每次被敌人消灭后,新诞生的飞机有3秒钟的安全期;
4、游戏结束后会显示历史最高分,
这节课我们先来把背景图片和背景音乐加载进去,其中背景音乐要循环播放。
循环播放只需要设置 pygame.mixer.music.play(-1)
将其中的值设为 -1即可
这个过程没有难度,直接上代码了
from pygame.locals import *
from random import *
import traceback
import tkinter as tk
import pygame
import math
import sys
def main() :
pygame.init() #初始化
pygame.mixer.init() #混音器初始化
clock = pygame.time.Clock() #设置一个计时器
"""载入音乐文件"""
#背景音乐
pygame.mixer.music.load(r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\game_music.ogg") #设置背景音乐
pygame.mixer.music.set_volume(1) #设置音量
#游戏音效
bullet_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\bullet.wav" #子弹特效
button_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\button.wav" #按键特效
enemy1_down_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\enemy1_down.wav" #低等敌机被击毁音效
enemy2_down_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\enemy2_down.wav" #中等敌机被击毁音效
enemy3_down_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\enemy3_down.wav" #高等敌机被击毁音效
enemy3_fly_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\enemy3_flying.wav" #高等敌机出现音效
get_bomb_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\get_bomb.wav" #获得全屏炸弹补给音效
get_bullet_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\get_bullet.wav" #获得双倍子弹补给音效
me_down_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\me_down.wav" #自身飞机被击毁(死亡)音效
supply_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\supply.wav" #补给产生音效
upgrade_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\upgrade.wav" #升级音效
use_bomb_music = r"D:\Code\Python\Pygame\pygame11:飞机大战1\sound\use_bomb.wav" #使用全屏炸弹音效
"""图片文件路径"""
again_image = r"D:\Code\Python\Pygame\pygame11:飞机大战1\images\again.png" #重新开始图片路径
background_image = r"D:\Code\Python\Pygame\pygame11:飞机大战1\images\background.png" #背景图的路径
#设置背景
bg_size = width , height = 430 , 700 #背景大小
screen = pygame.display.set_mode(bg_size) #这是背景大小
background = pygame.image.load(background_image).convert_alpha() #画背景
pygame.mixer.music.play(-1) #播放背景音乐,-1 表示无限循环播放
while True :
for event in pygame.event.get() :
if event.type == QUIT :
sys.exit()
screen.blit(background,(0,0)) #绘制背景
pygame.display.flip() #不停的刷新画面,不停的绘画
clock.tick(60) #设置帧率
if __name__ == "__main__":
# 这样做的好处是双击打开时如果出现异常可以报告异常,而不是一闪而过!
try:
main()
except SystemExit: #这是按下 × 的异常,直接忽略
pass
except:
traceback.print_exc()
pygame.quit()
input()