1943中途岛海战2020年8月22日海龟画图版(源码教程PPT视频)

如本文章标有价格,需议价或其它事情商议请加微信scratch8

李兴球Python中途岛海战2020_8_22海龟画图版
李兴球Python中途岛海战2020_8_22海龟画图版

本程序包括几个模块,以下是主程序的所有源代码:

"""
   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_ASYNC

target= 300                                # 击毁目标数量则胜利
plane_image = "飞机.gif"
enemy_image = "敌机.gif"
bullet_image = "子弹.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('重复.wav',SND_LOOP|SND_ASYNC)   # 重复播放背景音乐

# 封面显示程序段
display_cover = True
def end_display_cover():
    global display_cover
    display_cover = False
    screen.onkeypress(None,'space')
    
screen.onkeypress(end_display_cover,'space')
screen.listen()
# 不断地显示两张背景图片,所以能看到字在闪动
while display_cover:
    screen.bgpic('bg1.png')
    screen.update()
    time.sleep(0.2)
    screen.bgpic('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)
w.write(info,align='center',font=ft)  

# 生成10架敌机,放在es列表    
es = [Enemy(enemy_image) for i in range(10)]

# 玩家飞机
player = Plane(plane_image)   

bs = []                                    # 子弹列表
ps = []                                    # 敌机发出的粒子列表
frames = 0                                 # 类似帧计数器(这里统计循环次数)
running = 1                                
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 = 0
        for b in bs:                          # 每一颗子弹
            if e.collide(b):                  # 如果敌机碰到子弹
               e.ht()                         # 隐藏
               counter +=1                    # 统计一下
               info = '当前已击毁 ' + str(counter) +  ' 架敌机'
               screen.title(info)             # 在标题栏里显示
               if counter == target:          # 达到了目标数量则胜利
                   running = 2                # 2表示成功结束
                   player.ht()                # 隐藏                   
               explode(e.pos(),images)        # 在敌机坐标产生爆炸效果
               e.goto_top()
            
    frames += 1
    time.sleep(0.001)
    if running == 2:break
    
w.clear()                                     # 擦掉所写的字
[p.kill() for p in ps]                        # 删除每一颗粒子
[ e.ht() for e in es]                         # 隐藏每一架敌机

成功图 = ['success1.png','success2.png']      # 成功的时候显示的图形表   
失败图 = ['失败1.png','失败2.png']            # 作战失败显示的图形列表

if running == 2:
    """作战成功"""
    images = 成功图
elif running == 0 :
    images = 失败图

# 不断地切换游戏结束时的两张背景图片
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页,音乐与图片素材若干。
有需要者请扫码付款:

VIP免费查看

已有0人支付

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 1943中途岛海战2020年8月22日海龟画图版(源码教程PPT视频)
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页