主程序源代码:

"""1943中途岛海战2020年8月22日.py这是重新编程的用纯粹的Python海龟模块制作的一个飞机大战游戏。老版本就叫雷电模拟。在游戏中用鼠标操作飞机,敌机会疯狂扑过来,并且会朝玩家飞机发射子弹。玩家飞机只有一条命令,被击中了就会坠毁。只要击毁了300架敌机,玩家就能过关!
"""
import time
from bullet import *                       # 从bullet模块导入所有命令
from glob import glob
from particle import *                     # 从particle导入所有命令
from enemy import Enemy                    # 从enemy导入Enemy类
from plane import Plane                    # 从plane导入Plane类
from random import choice                  # 从随机模块导入选择命令
from turtle import Screen                  # 从turtle导入Screen命令
from explosion import explode              # 从explosion导入explode命令
from winsound import PlaySound,SND_LOOP,SND_ASYNCtarget= 300                                # 击毁目标数量则胜利
plane_image = "res/飞机.gif"               # 玩家飞机造型图
enemy_image = "res/敌机.gif"               # 敌机造型图
bullet_image = "res/子弹.gif"              # 子弹造型图
images = glob("explosion/*.gif")           # 爆炸序列帧图
project_name = '1943中途岛海战2020年8月22日海龟画图版'screen = Screen()                          # 新建窗口和屏幕
screen.delay(0)                            # 延时为0毫秒
screen.bgcolor('blue')                     # 背景颜色为蓝色
screen.setup(448,512)                      # 宽度和高度
screen.title(project_name)                 # 在标题栏上显示项目名称
screen.addshape(plane_image)               # 注册玩家飞机造型到造型字典
screen.addshape(enemy_image)               # 注册敌机造型到形状字典
screen.addshape(bullet_image)              # 注册子弹造型到形状字典
[screen.addshape(im) for im in images]     # 注册爆炸图到造型字典PlaySound('res/重复.wav',SND_LOOP|SND_ASYNC)   # 异步重复播放背景音乐# 封面显示程序段
display_cover = True                       # 定义全局变量控制下面的while循环
def end_display_cover():                   # 定义函数global display_coverdisplay_cover = Falsescreen.onkeypress(None,'space')screen.onkeypress(end_display_cover,'space')# 绑定空格键到函数上
screen.listen()                             # 监听按键检测
# 不断地显示两张背景图片,所以能看到字在闪动
while display_cover:screen.bgpic('res/bg1.png')screen.update()time.sleep(0.2)screen.bgpic('res/bg2.png')screen.update()time.sleep(0.2)
screen.bgpic('nopic')                         # 不显示背景图# 写上游戏目标文字
w = Turtle(visible=False)                     # 新建隐藏的海龟对象
w.penup()                                     # 抬笔
w.sety(200)                                   # 设置坐标
w.color('gray')                               # 设置颜色为灰色
ft = ('',14,'normal')                         # 字体风格三元组
info = '目标!击毁' + str(target) + '敌机'    # 要写的文字
w.write(info,align='center',font=ft)          # 写上文字
info = 'writed by lixingqiu'
w.sety(175)                                   # 设置y坐标为175
w.write(info,align='center',font=ft)          # 写上作者姓名拼音# 角色准备阶段bs = []                                       # 子弹列表
ps = []                                       # 敌机发出的粒子列表player = Plane(plane_image)                   # 实例化玩家飞机
es = [Enemy(enemy_image) for i in range(10)]  # 生成10架敌机# 游戏循环
frames = 0                                    # 统计循环次数
running = 1                                   # 控制while循环的变量
counter = 0                                   # 统计被击中的敌机数量
while running:# 生成子弹,并且移动玩家飞机的子弹spawn_bullet(bs,frames,bullet_image,player.pos())# 生成粒子,并且移动敌机所发射的粒子spawn_particle(ps,frames,choice(es).pos(),player.pos())# 粒子和玩家飞机的碰撞检测,粒子碰到了玩家飞机,则玩家飞机阵亡,作战失败!for p in ps:                              # 每一颗粒子if p.distance(player)<20:             # 粒子碰到玩家飞机player.hideturtle()               # 隐藏玩家飞机explode(player.pos(),images)      # 玩家飞机阵亡,产生爆炸效果running = 0                       # 结束循环,显示作战失败图 # 敌机移动与碰撞检测for e in es:                              # 每一架敌机                e.move()                              # 敌机移动if e.collide(player):                 # 如果敌机碰到玩家飞机e.ht()          explode(e.pos(),images)           # 产生爆炸效果e.goto_top()                      # 到最顶上去player.hideturtle()               # 隐藏玩家飞机explode(player.pos(),images)      # 玩家飞机阵亡,产生爆炸效果running = 0for b in bs:                          # 每一颗子弹if e.collide(b):                  # 如果敌机碰到子弹e.ht()                         # 敌机隐藏counter +=1                    # 统计一下info = '当前已击毁 ' + str(counter) +  ' 架敌机'screen.title(info)             # 在标题栏里显示if counter == target:          # 达到了目标数量则胜利running = 2                # 2表示成功结束                              explode(e.pos(),images)        # 在敌机坐标产生爆炸效果e.goto_top()frames += 1time.sleep(0.001)if running == 2:break# 游戏结尾
player.ht()                                   # 隐藏玩家飞机
w.clear()                                     # 擦掉所写的字
[p.kill() for p in ps]                        # 删除每一颗粒子
[ e.ht() for e in es]                         # 隐藏每一架敌机if running == 2:"""作战成功"""images = ['res/success1.png','res/success2.png'] # 成功的时候显示的图形表
elif running == 0 :images = ['res/失败1.png','res/失败2.png']       # 作战失败显示的图形列表# 不断地切换游戏结束时的两张背景图片
i = 0
while True:    screen.bgpic(images[i])                   # 切换到索引为i的背景图screen.update()                           # 更新屏幕显示time.sleep(0.2)                           # 等待0.2秒i = 1 - i                                 # 切换到下一个索引号

教程前言

用Python海龟画图能做什么?很多人可能会回答为绘图。这是正确的回答。但是如果想进一步学习Python海龟画图,那就不仅仅是绘图了。也可以用turtle模块制作各种各样的动画、游戏、课件、音乐艺术作品等等。作者本人就制作很多很多,大多数放在个人博客里。

Python海龟画图模块基于tkinter模块开发。而tkinter是一个GUI库。用tkinter模块可以创建画布,在画布上移动各种“项目”,让它们交互,从而制作动画和游戏。turtle的画布就是tkinter的画布,所以用turtle模块当然也可以做动画与游戏。

这个教程是作者用纯粹的Python海龟模块编写的叫《1943中途岛海战》射击游戏的详细教程。采用了模块化的设计方法,把作品分为了6个部分。每个模块都可以单独运行,通过主程序让模块中的角色交互,从而展现出最终的游戏场景。

本教程适合于学习了Python基础的人士阅读。推荐学到了Python类与继承。不过在本教材中,首先会复习一下Python的类与继承。在阅读之前,读者应该多多试玩这个游戏,增加“游戏感”。试玩以后,仔细阅读源代码,最后看教程与视频,以下是教程目录

教程目录

1 1943中途岛海战主要介绍
2 万物皆对象
3 Point类的移动方法
4 类的继承
5 测试Circle类
6 Turtle类的继承
7 Ball类源代码简版
8 Ball类初始化方法浅析
9 Ball类移动方法浅析一
10 Ball类移动方法浅析二
11 Ball类is_on_edge方法
12 进化版Ball类源代码
13 Ball类的茶炉夜话
14 如何做游戏的茶炉夜话
15 1942美日的约会
16 1943中途岛海战是街机游戏
17 1943中途岛海战文件夹预览
18 1943中途岛海战explosion文件夹预览
19 1943中途岛海战res文件夹预览
20 一览众山小
21 主程序框架
22 bullet模块介绍
23 bullet.py文件结构
24 Bullet类的框架
25 Bullet类初始化方法源码
26 Bullet类__init__方法介绍
27 Bullet类kill方法之谜
28 海龟诞生时究竟发生了什么?
29 海龟为什么要自杀?
30 Bullet类子弹移动方法
31 spawn_bullet函数说明
32 测试bullet模块
33 particle模块介绍
34 particle.py文件结构
35 Particle类的框架
36 Particle类的方法概述
37 spawn_particle函数
38 测试particle模块
39 enemy模块介绍
40 enemy.py文件结构
41 Enemy类的框架
42 测试enemy模块
43 plane模块介绍
44 plane.py文件整体结构
45 Plane类主要框架
46 测试plane模块
47 explosion模块介绍
48 explode函数主要代码
49 测试explosion模块
50 主程序整体流程图
51 主程序变量一览表
52 屏幕设置与注册造型
53 造型字典与造型列表
54 循环播放背景音乐
55 封面显示说明
56 封面显示程序段
57 游戏目标文字
58 角色准备阶段
59 游戏主循环三变量
60 生成子弹和粒子
61 碰撞检测简介
62 粒子和玩家飞机的碰撞检测
63 敌机移动与碰撞检测上
64 敌机移动与碰撞检测下
65 循环计数判断结束
66 游戏结束
67 动态背景画面
68 作者简介

编者的话

大家好,我是李兴球,也就是本教材的编写者。首先我是一名创造者,然后我也是一名校外培训机构的编程老师。这些年来,我用Python的海龟画图模块,还有些第三方模块编写了很多很多的程序。这个版本的飞机大战相对于本人曾经创造过的版本,反而简化及优化了很多代码。目的是为了方便教学及读者们对这个作品进行扩展,所以并没有设计太多内容。比如,在游戏中,滚动的纵版背景就去掉了,因为读者学习完这个作品后,完全可以自己加上去。例如,玩家飞机的子弹是自动发射的,读者也可以改为按j键发射子弹,按wsad或上下左右方向箭头发射子弹。我也没有给这个游戏设计道具。游戏的难易度也没有进行明显的可视化选择性的设计。因为作为教程,不能太复杂,这些读者学习完后都可以自行发挥。如,变成多关卡的,第一关敌机采用什么阵型,第二关敌机又是什么阵型,一直到最后一关是来个大BOSS。

这个作品其实不难,我相信,任何人都能看懂,大概浏览一下是学不会的,需要对本教材的每个字认认真真地看,不断地揣摩本人的写作意图,这样才能学得更好。

本人还会原创更多的作品,编写更多的教材,录制更多的视频,不断地在Python这条道路上越走越远,欢迎随时查看我的博客 www.lixingqiu.com。

《1943中途岛海战2020年8月22日版》是用纯粹的Python海龟画图模块制作的一个版本。
它的教程已经制作完毕,共包括:12个python源文件(含例程),8个视频教程,文字教程76页,音乐与图片素材若干。

1943中途岛海战2020年8月22日海龟画图版(原雷电模拟升级版)相关推荐

  1. AI:2020年6月22日北京智源大会演讲分享之19:00-19:40《 圆桌论坛:人工智能产业的下一个十年》

    AI:2020年6月22日北京智源大会演讲分享之19:00-19:40< 圆桌论坛:人工智能产业的下一个十年> 导读:首先感谢北京智源大会进行主题演讲的各领域顶级教授,博主受益匪浅,此文章 ...

  2. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——15:00-15:40刘嘉教授《From Representation to Comp: the Cognitive N》

    AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛--15:00-15:40刘嘉教授<From Representation to Comp: the Cognitive N& ...

  3. AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—14:50-15:30吴玺宏教授《一种具身自监督学习框架:面向任何语种语音的音系构建任务》

    AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛-14:50-15:30吴玺宏教授<一种具身自监督学习框架:面向任何语种语音的音系构建任务> 导读:首先感谢北京智源大会进行 ...

  4. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——14:20-15:00方方教授《Maps and Functions of Human Attention》

    AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛--14:20-15:00方方教授<Maps and Functions of Human Attention> 导读: ...

  5. AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—14:10-14:50王亮教授《面向复杂视觉任务的视觉认知计算》

    AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛-14:10-14:50王亮教授<面向复杂视觉任务的视觉认知计算> 导读:首先感谢北京智源大会进行主题演讲的各领域顶级教授, ...

  6. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——13:40-14:20毕彦超教授《Knowledge representation in the Human brain》

    AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛--13:40-14:20毕彦超教授<Knowledge representation in the Human brain& ...

  7. AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—13:30-14:10山世光教授《从看脸到读心:基于视觉的情感感知技术》

    AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛-13:30-14:10山世光教授<从看脸到读心:基于视觉的情感感知技术> 导读:首先感谢北京智源大会进行主题演讲的各领域顶 ...

  8. AI:2020年6月22日北京智源大会演讲分享之11:30-12:20Jorge教授《Zero-Order Optimization Methods with Applications to RL》

    AI:2020年6月22日北京智源大会演讲分享之11:30-12:20Jorge教授<Zero-Order Optimization Methods with Applications to R ...

  9. AI:2020年6月22日北京智源大会演讲分享之10:40-11:30 Zoubin教授《Probabilistic Machine Learning and AI》

    AI:2020年6月22日北京智源大会演讲分享之10:40-11:30 Zoubin教授<Probabilistic Machine Learning and AI> 导读:首先感谢北京智 ...

最新文章

  1. 【NIO】阻塞与非阻塞
  2. 你知道这 8 种 SQL 错误用法吗?
  3. 第 4 章 MySQL 锁机制
  4. Android Framework 全面分析 SystemServer
  5. 面向对象的三大特性 - 继承、多态、封装
  6. 二维图像的离轴数字全息及显示
  7. 多Tab点击切换效果实现
  8. Flink系列:物理分区分组broadcast、global、shuffle、forward、rebalance、rescale理解与实战
  9. 基于边缘特征的二值化阈值选取方法--ywp125
  10. IRC下载TLF0day资源
  11. 深度相机之iPhone X选择的秘诀和方法
  12. css设置三角形以及三角形的旋转
  13. 快速打开 控制面板下网络和 Internet下的网络连接
  14. Android 包大小优化总结
  15. Vivado安装找不到matlab,vivado安装System Generator不支持新版Matlab怎么办?
  16. USB Type-C数据线美国新标准UL9990报告检测项目
  17. FineReport 数据决策系统
  18. UiBot 邮件附件
  19. Android ListView下拉刷新
  20. HTTP基础:响应报文

热门文章

  1. 鸿蒙系统桌面搭配,华为平板 MatePad Pro 来了!首搭鸿蒙系统,与电脑“花样”协同…...
  2. Human Pose Estimation with Spatial Contextual Information(CVPR2019)
  3. MAC显示屏的网页图片兼容方案
  4. 服务器风扇支持热插拔,被骗十几年 原来这些设备不能热插拔!
  5. 阿尔法蛋机器人tf卡_科大讯飞阿尔法蛋tys1智能机器人常见问题解答
  6. 高中数学;三角函数图像平移变换最难题型解题技巧(全新思维)
  7. OUTLOOK 邮箱发件人请求已读回执
  8. python字符串去除头尾_python 如何去除字符串头尾的多余符号
  9. 浅谈GPU虚拟化技术(四)- GPU分片虚拟化
  10. 「 LaTeX 」写论文,单双栏显示行号