点击蘑菇云创造 关注我们
第五课-飞机大战
一、学习背景
二、学习目标
知识目标:
1、理解python中的全局变量
2、掌握break语句、global语句的使用
技能目标:
1、掌握在turtle库中添加图片造型的方式
三、学习准备
四、学习实践
1、任务分析
在这个任务中,我们首先需要创建一个屏幕,之后创建出飞机大战所需的各个角色——飞机、子弹、敌机并对其进行初始化设置,具体流程如下,
2、程序编写
import turtle #导入turtle库import random #导入随机数库#屏幕screen = turtle.Screen()#赋值screen对象width,height = 600,720#设定宽度和高度screen.setup(width,height)#以设定好的宽度和高度来创建屏幕screen.bgpic('浩瀚银河.gif')#设置背景图screen.bgcolor('black')#设置背景色为黑#变量名称定义bulletSpeed = 50#设置子弹速度为50像素/单位时间enemySpeed = 3#设置敌机速度为3像素/单位时间planeSpeed = 20#设置飞机速度为20像素/单位时间enemyNum = 10#设置敌机数量为10bulletPower = 40#设置子弹威力大小为40s = 0#设置子弹初始状态为0,表示未发射plane = turtle.Pen()#新建飞机对象bullet = turtle.Pen()#新建子弹对象enemy = []#新建敌机列表for i in range(enemyNum):#敌机列表循环enemy.append(turtle.Pen())#新建敌机对象并扩充到敌机列表中turtle.addshape('Plane.gif')#在turtle库中添加飞机造型turtle.addshape('bullet.gif')#在turtle库中添加子弹造型turtle.addshape('enemy.gif')#在turtle库中添加敌机造型turtle.addshape('boom1.gif')#在turtle库中添加爆炸效果造型#飞机初始设置plane.penup()#抬笔plane.setheading(90)#设置飞机朝向向上plane.goto(0,-300)#使飞机移动到(0,-300)初始位置plane.shape('Plane.gif')#设置飞机造型#子弹初始设置bullet.speed(0)#设置子弹移动速度最快bullet.penup()#抬笔bullet.hideturtle()#隐形bullet.setheading(90)#设置子弹朝向向上bullet.goto(0,-400)#使子弹移动到(0,-400)初始位置bullet.shape('bullet.gif')#设置子弹造型#敌机初始设置for i in enemy:#敌机循环i.speed(0)#设置敌机速度最快i.penup()#抬笔i.setheading(-90)#设置敌机朝向向下i.goto(random.randint(-200,200),random.randint(350,400))#使敌机移动到屏幕上方指定范围i.shape('enemy.gif')#设置敌机造型turtle.exitonclick()#点击屏幕退出程
3、程序运行
Turtle链接 |
Pen()函数 功能说明 启用画笔工具 使用方法 turtle.Pen() 举例说明 程序中,plane = turtle.Pen(),表示启用画笔并用画笔创建一个飞机对象。 |
addshape()函数 功能说明 添加图片到库中以便后续调用 使用方法 turtle.addshape(‘图片’),具体操作和导入屏幕背景图一致 举例说明 程序中,turtle.addshape('Plane.gif'),表示在turtle库中添加一个“Plane.gif”的图片。 |
任务2:设定机制程序设计
1、任务分析
2、程序编写
import turtle #导入turtle库import random #导入随机数库#屏幕screen = turtle.Screen()#赋值screen对象width,height = 600,720#设定宽度和高度screen.setup(width,height)#以设定好的宽度和高度来创建屏幕screen.bgpic('浩瀚银河.gif')#设置背景图screen.bgcolor('black')#设置背景色为黑#变量名称定义bulletSpeed = 50#设置子弹速度为50像素/单位时间enemySpeed = 3#设置敌机速度为3像素/单位时间planeSpeed = 20#设置飞机速度为20像素/单位时间enemyNum = 10#设置敌机数量为10bulletPower = 40#设置子弹威力大小为40s = 0#设置子弹初始状态为0,表示未发射plane = turtle.Pen()#新建飞机对象bullet = turtle.Pen()#新建子弹对象enemy = []#新建敌机列表for i in range(enemyNum):#敌机列表循环enemy.append(turtle.Pen())#新建敌机对象并扩充到敌机列表中turtle.addshape('Plane.gif')#在turtle库中添加飞机造型turtle.addshape('bullet.gif')#在turtle库中添加子弹造型turtle.addshape('enemy.gif')#在turtle库中添加敌机造型turtle.addshape('boom1.gif')#在turtle库中添加爆炸效果造型#飞机初始设置plane.penup()#抬笔plane.setheading(90)#设置飞机朝向向上plane.goto(0,-300)#使飞机移动到(0,-300)初始位置plane.shape('Plane.gif')#设置飞机造型#子弹初始设置bullet.speed(0)#设置子弹移动速度最快bullet.penup()#抬笔bullet.hideturtle()#隐形bullet.setheading(90)#设置子弹朝向向上bullet.goto(0,-400)#使子弹移动到(0,-400)初始位置bullet.shape('bullet.gif')#设置子弹造型#敌机初始设置for i in enemy:#敌机循环i.speed(0)#设置敌机速度最快i.penup()#抬笔i.setheading(-90)#设置敌机朝向向下i.goto(random.randint(-200,200),random.randint(350,400))#使敌机移动到屏幕上方指定范围i.shape('enemy.gif')#设置敌机造型#函数定义#plane上下左右移动def leftMove():#创建左移函数plane.goto(plane.xcor()-planeSpeed,plane.ycor())#使飞机移动到左侧一小段距离处,这段距离值为飞机的速度值def rightMove():#创建右移函数plane.goto(plane.xcor()+planeSpeed,plane.ycor())#使飞机移动到右侧一小段距离处,这段距离值为飞机的速度值def upMove():#创建上移函数plane.goto(plane.xcor(),plane.ycor()+10)#使飞机移动到上方10像素处def downMove():#创建下移函数plane.goto(plane.xcor(),plane.ycor()-10)#使飞机移动到下方10像素处def shoot():#创建射击函数bullet.goto(bullet.xcor(),bullet.ycor()+bulletSpeed)#使子弹移动到上方一小段距离处,这段距离值为子弹的速度值bullet.showturtle()#显示子弹global s#定义s为全局变量s = 1#设置s的值为1#键盘控制上下左右以及射击turtle.onkeypress(leftMove,'Left')#按压键盘left键实现左移turtle.onkeypress(rightMove,'Right')#按压键盘right键实现右移turtle.onkeypress(upMove,'Up')#按压键盘up键实现上移turtle.onkeypress(downMove,'Down')#按压键盘down键实现下移#子弹发射控制turtle.onkeypress(shoot,'space')#按压键盘空格实现射击#键盘监听开始turtle.listen()#游戏设置while True:#永久循环if s == 0:#如果子弹状态为0(未发射)bullet.goto(plane.xcor(),plane.ycor()-100)#不发射子弹else:#否则bullet.goto(bullet.xcor(),bullet.ycor()+bulletSpeed)#发射子弹if bullet.ycor() > 360:#子弹出屏(位置)bullet.hideturtle()#隐藏子弹s = 0#设置子弹状态为0(未发射)for i in enemy:#敌机列表循环i.shape('enemy.gif')#显示敌机造型i.goto(i.xcor(),i.ycor()-enemySpeed)#使敌机移动到下方一小段距离处,这段距离值为子弹的速度值#子弹打到敌机if i.distance(bullet) < bulletPower:#如果敌机到子弹的距离值小于子弹的威力值i.shape('boom1.gif')#显示爆炸效果图i.goto(random.randint(-200,200),random.randint(350,400))#使敌机移动到屏幕上方指定范围内bullet.hideturtle()#隐藏子弹s = 0#设置子弹状态为0if i.ycor() < -360:#敌机状态判定,敌机出屏i.goto(random.randint(-200,200),random.randint(350,400))#使敌机移动到屏幕上方指定范围内#敌机撞击if i.distance(plane)<50:#如果敌机与飞机的距离小于50print ('game over')#打印显示游戏结束screen.clear()#清屏break#跳出循环
3、程序运行
知识链接 |
变量的分类与全局变量 知识描述 对于变量我们已经不陌生了,它可以用来存储可变的数据。事实上,变量可以依据在程序中创建的位置,分为局部变量和全局变量两种。局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。而全局变量是能够作用于函数内外的变量,它在整个python程序中有效。如果想要在函数体内修改全局变量的值,可以通过global语句来实现。
全局变量主要有以下两种情况: (1)如果一个变量在函数外定义,那么不仅在函数外可以访问到,在函数内也可以访问到。这样定义在函数体外的变量就是全局变量 (2)在函数体内定义,并且使用“global”修饰后,该变量也就变为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改。 |
知识积累 |
global语句 功能说明 global语句可以在函数体内为一个函数外的变量重新赋值
使用方法 global 变量
举例说明 程序中, def shoot():#创建射击函数 bullet.goto(bullet.xcor(),bullet.ycor()+bulletSpeed)#使子弹移动到上方一小段距离处,这段距离值为子弹的速度值 bullet.showturtle()#显示子弹 global s#定义s为全局变量 s = 1#设置s的值为1
这里,我们就是通过global语句修改变量s的值为1。 |
break语句 功能说明 break语句可以终止当前的循环,包括while和for在内的所有控制语句。 break语句一般会结合if语句进行搭配使用,表示在某种条件下跳出循环。如果使用嵌套循环,break语句将跳出最内层的循环。
使用方法 在while语句中使用break语句的形式如下: while <条件表达式1>: 执行代码 if <条件表达式2>: Break
其中,条件表达式2用于判断何时调用break语句跳出循环。
在for语句中使用break语句的形式如下: for <变量> in <对象>: if <条件表达式>: Break
其中,条件表达式用于判断何时调用break语句跳出循环。
举例说明 程序中, while True:#永久循环 for i in enemy:#敌机列表循环 if i.distance(plane)<50:#如果敌机与飞机的距离小于50 print ('game over')#打印显示游戏结束 screen.clear()#清屏 break#跳出循环
表示当敌机与飞机之间的距离小于50时,跳出敌机列表循环。 |
对象链接 |
distance属性 功能说明 distance属性表示两个对象之间的距离 使用方法 对象1.distance(对象2) 举例说明 程序中,if i.distance(bullet) < bulletPower:,表示将敌机对象i与子弹对象bullet之间的距离与子弹的威力值进行比较。 |
乐一乐 至此,飞机大战小游戏我们就完成啦,赶紧来试一试吧,看看你能击败多少敌机呢? |
五、巩固提高
项目回顾
知识小结
|
|
|
|
|
|
|
|
|
项目拓展
附录

蘑菇云创造
微信号 : mgystem
扫码关注,了解更多
推荐阅读:

