admin管理员组

文章数量:1794759

《Python游戏趣味编程》 第7章 飞机大战

《Python游戏趣味编程》 第7章 飞机大战

7 飞机大战 Python游戏开发

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了

本章我们将编写一个飞机大战的游戏,鼠标控制飞机移动、按下鼠标发射子弹,效果如图7-1所示。首先我们实现背景循环滚动、飞机发射子弹;然后实现敌机的控制与得分显示、游戏失败判断与处理;最后为游戏添加音效。

本章案例最终代码一共88行,代码参看:配套资源\\第7章\\7-7.py,视频效果参看:配套资源\\第7章\\飞机大战.mp4。

import pgzrun # 导入游戏库 import random # 导入随机库 WIDTH = 480 # 设置窗口的宽度 HEIGHT = 700 # 设置窗口的高度 TITLE = 'Python飞机大战' background1 = Actor('background') # 导入背景1图片 background1.x = 480/2 # 背景1的x坐标 background1.y = 852/2 # 背景1的y坐标 background2 = Actor('background') # 导入背景2图片 background2.x = 480/2 # 背景2的x坐标 background2.y = -852/2 # 背景2的y坐标 bullet = Actor('bullet') # 导入子弹图片 bullet.x = WIDTH/2 # 子弹的x坐标 bullet.y = -HEIGHT # 子弹的y坐标,开始不可见 hero = Actor('hero') # 导入玩家飞机图片 hero.x = WIDTH/2 # 设置玩家飞机的x坐标 hero.y = HEIGHT*2/3 # 设置玩家飞机的y坐标 enemy = Actor('enemy') # 导入敌机图片 enemy.x = WIDTH/2 # 设置敌机的x坐标 enemy.y = 0 # 设置敌机的y坐标 score = 0 # 游戏得分 isLoose = False # 游戏是否失败,初始不失败 sounds. game_music.play(-1) # 循环播放背景音乐 def draw(): # 绘制模块,每帧重复执行 background1.draw() # 绘制游戏背景 background2.draw() # 绘制游戏背景 hero.draw() # 绘制玩家飞机 enemy.draw() # 绘制敌机飞机 bullet.draw() # 绘制子弹 # 下面显示得分 screen.draw.text("得分: "+str(score), (200, HEIGHT-50), fontsize=30, fontname='s', color='black') if isLoose: # 游戏失败后输出信息 screen.draw.text("游戏失败!", (50, HEIGHT/2), fontsize=90,fontname='s', color='red') def update(): # 更新模块,每帧重复操作 global score, isLoose if isLoose: return # 如果游戏失败,返回,不做下面的操作 # 以下代码用于实现背景图片的循环滚动效果 if background1.y > 852/2 + 852: background1.y = -852/2 # 背景1移动到背景2的正上方 if background2.y > 852/2 + 852: background2.y = -852/2 # 背景2移动到背景1的正上方 background1.y += 1 # 背景1向下滚动 background2.y += 1 # 背景2向下滚动 if bullet.y > -HEIGHT: bullet.y = bullet.y - 10 # 子弹自动向上移动 enemy.y += 3 # 敌机自动下落 if enemy.y > HEIGHT: # 敌机落到画面底部 enemy.y = 0 # 敌机从上面重新出现 enemy.x = random.randint(50, WIDTH-50) # 敌机水平位置随机 if bullet.colliderect(enemy): # 子弹与敌机发生碰撞后 sounds.got_enemy.play() # 播放击中敌机音效 enemy.y = 0 # 敌机从上面重新出现 enemy.x = random.randint(0, WIDTH) # 敌机水平位置随机 score = score + 1 # 得分加1 bullet.y = -HEIGHT # 隐藏子弹 if hero.colliderect(enemy): # 玩家飞机和敌机发生碰撞 sounds.explode.play() # 播放玩家飞机爆炸音效 isLoose = True # 游戏失败 hero.image = 'hero_blowup' # 更换游戏玩家的图片为爆炸图片 def on_mouse_move(pos, rel, buttons): # 当鼠标移动时执行 if isLoose: return # 如果游戏失败,返回,不做下面的操作 hero.x = pos[0] # 玩家飞机的x坐标设为鼠标的x坐标 hero.y = pos[1] # 玩家飞机的y坐标设为鼠标的y坐标 def on_mouse_down(): # 当鼠标键按下时 if isLoose: return # 如果游戏失败,返回,不做下面的操作 bullet.x = hero.x # 把子弹位置设为玩家飞机的正上方 bullet.y = hero.y - 70 sounds.gun.play() # 播放发射子弹音效 pgzrun.go() # 开始执行游戏

 

分步骤代码、图片音效素材、讲解视频可以从异步社区下载:

www.epubit/bookDetails?id=UB72096d97d6149

分步骤代码也可以直接从这里下载:

联想Filez

 

这一章实现了飞机大战游戏,讲解了背景图片循环滚动、字符串拼接与中文显示、运行时更改图片效果、sound音效播放等功能,学习了复合运算符、字符串拼接、布尔变量等知识点。读者可以在本章代码基础上继续改进:

1. 能否参考第六章中图片列表的方法,实现连续多颗子弹的发射;

2. 能否进一步实现多架敌机的同时出现;

3. 能否为玩家飞机添加生命值,每撞击一次生命值减1,每得分超过10分,生命值加1;

4. 尝试实现横版的飞机游戏。

读者也可以参考本章的开发思路,尝试设计并分步骤实现坦克大战、赛车等小游戏。

 

本文标签: 趣味大战飞机游戏Python