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, isLooseif 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 # 得分加1bullet.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 - 70sounds.gun.play() # 播放发射子弹音效pgzrun.go()  # 开始执行游戏

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

https://www.epubit.com/bookDetails?id=UB72096d97d6149

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

联想Filez

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

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

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

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

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

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

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

  1. 《Python游戏趣味编程》第12章 坚持一百秒

    12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...

  2. python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层

    知乎视频​www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...

  3. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...

  4. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  5. 《Python游戏趣味编程》 第10章 拼图游戏

    10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...

  6. 《Python游戏趣味编程》 第9章 贪吃蛇

    9 贪吃蛇 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个贪吃蛇的游戏,效果如图9-1所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自 ...

  7. 《Python游戏趣味编程》 第6章 见缝插针

    6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...

  8. 《Python游戏趣味编程》 第4章 疯狂的小圆圈

    4 疯狂的小圆圈 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将实现一个好玩的程序,鼠标点击后,会在点击处出现一些同心圆圈,并在窗口中四处反弹,效果如图4- ...

  9. 《Python游戏趣味编程》 第3章 美丽的圆圈画

    3 美丽的圆圈画 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将利用Python绘制美丽的圆圈画,鼠标点击时圆圈的颜色会随机变化.首先在上一章的基础上,绘制 ...

最新文章

  1. ubuntu18.04.4 pip3 换清华、阿里、豆瓣 源
  2. mysql主从切换(正常切换)
  3. 机器学习与分布式机器学习_机器学习的歧义
  4. JEEWX推出插件开发机制,现招募兴趣爱好者
  5. 使用python将COCO格式的json文件转化为VOC格式的xml文件
  6. NumPy Essentials 带注释源码 五、NumPy 中的线性代数
  7. python编程(orm原理和实践)
  8. Linux安装的分区问题
  9. 光盘放进电脑读不出来_U盘插入电脑读不出来?学会这3招,轻松解决USB无法读取的问题...
  10. 面向接口的开发到面向对象的编程
  11. 布谷鸟算法(C++实现)
  12. 程序员怎么跨年?跨年烟花网页支持自定义文本烟花
  13. java 腾讯微博模拟登陆_腾讯微博模拟登录
  14. 如何用Qlikview在dashboard中创建条形图时,统计时忽略空值
  15. 硕士管理类199联考论说文真题素材
  16. C++设计模式-中介者模式详解
  17. matlab求全相应
  18. c ref java_使用JNA将C数组返回给Java
  19. 大成都范围广告位招商
  20. Mac OS下安装串口调试工具minicom

热门文章

  1. Android Studio中Eric常用的快捷键
  2. [转]一个程序员的哲学思考(关于编程、关于人生)
  3. maven webapp栽坑录
  4. input中radio对象的使用、获取方法
  5. docsify+github/gitee搭建个人在线文档
  6. C++基础 ----- 文件操作
  7. IO流 (三) ----- 字符流和字符缓冲流
  8. Redis系列(七)--Sentinel哨兵模式
  9. VOC标签转化为YOLO标签
  10. hive数据库的哪些函数操作是否走MR