本课时主要来学习一个Python趣味作品案例:璀璨星空。
本作品使用Python的海龟模块来绘制星星图案。利用随机数把星星洒落在屏幕上,每颗星星的颜色、形状和大小都各不相同。我们一起来看看如何让你的屏幕洒满星光吧!
一、游戏是如何运行的?
一开始,夜空出现了,接着一颗星星出现在空中。当程序继续运行,天空中出现的星星越来越多,它们散布在整个窗口中,每颗都有着不同的特征。程序运行的时间越长,天空就会变得越奇幻缤纷。
计算机屏幕上的图形是由一个一个叫做“像素”的点组成的,这些像素会发出红色、绿色或者蓝色的光。通过把这3种颜色混合起来,你就可以生成任何想要的颜色。在本作品中,每一颗星星的颜色都由3个数字来保存,分别代表了红、绿、蓝各是多少,它们混合起来你就会得到想要的颜色了。
二、工作原理
来看本作品的流程图
在海龟图形窗口中,程序会在随机位置上画出星星的形状。先创建一个函数,它的任务是单独画一颗星星。接着再创建一个循环,它会不停地重复执行这个函数,在整个屏幕上画出各种不同的星星。
三、画一颗星星
先来看看一颗星星如何画吧
1、导入乌龟模块
importturtleast
2、向乌龟发出指令:设置形状和大小
importturtleastsize=points=5angle=foriinrange(points):t.forward(size) t.right(angle)
3、画一颗测试的星星
运行程序,你就会看到乌龟箭头开始画一颗五角星星啦。
4、添加一个角度计算器
importturtleastsize=points=5angle=-(/points)foriinrange(points):t.forward(size) t.right(angle)PS:角度是按照星星有几个角来计算的(注意,这里的角数,只能是奇数。)
5、给星星涂色
importturtleastsize=points=5angle=-(/points)t.color(yellow)t.begin_fill()foriinrange(points):t.forward(size) t.right(angle)t.end_fill()
6、运行程序看看
这时运行程序,你应该会看到乌龟会画出一颗黄色的星星啦。
7、画不同形状的星星
更改points等号右边的数字,你会发现程序能画出不同角数的星星。注意,points只能是奇数。不相信的话,偶数会发生什么情况,你也可以试试看呀。
四、星光夜空
在接下来的步骤里,我们要把画星星的代码用一个函数囊括进来。然后,你就可以用这个函数来画出布满星星的夜空了。
8、创建画星星的函数
defdraw_star(points,size,col,x,y):t.penup()t.goto(x,y)t.pendown()angle=-(/points)t.color(col)t.begin_fill()foriinrange(points):t.forward(size)t.right(angle)t.end_fill()#Maincodet.Screen().bgcolor(darkblue)draw_star(5,50,yellow,0,0)
9、运行程序
现在你应该看到乌龟将会在蓝色的背景上画出一颗黄色的星星。
10.添加随机数
importturtleastfromrandomimportrandint,randomdefdraw_star(points,size,col,x,y)
/p>
11、创建一个While循环
whileTrue:ranPts=randint(2,5)*2+1ranSize=randint(10,50)ranCol=(random(),random(),random())ranX=randint(-,)ranY=randint(-,)draw_star(ranPts,ranSize,ranCol,ranX,ranY)
12、再次运行程序
你会看到,乌龟会不断地画出星星,一颗接一颗,很快就会布满整个窗口。每个星星颜色、形状和大小都各不相同。
13、隐藏海龟
#Maincodet.hideturtle()不想看见乌龟箭头,可以将其隐藏起来。
五、完整代码
试试输入完整代码,体会作品的代码设计流程,并查看效果吧。
importturtleastfromrandomimportrandint,randomdefdraw_star(points,size,col,x,y):t.penup()t.goto(x,y)t.pendown()angle=-(/points)t.color(col)t.begin_fill()foriinrange(points):t.forward(size)t.right(angle)t.end_fill()#Maincodet.hideturtle()t.Screen().bgcolor(darkblue)whileTrue:ranPts=randint(2,5)*2+1ranSize=randint(10,50)ranCol=(random(),random(),random())ranX=randint(-,)ranY=randint(-,)draw_star(ranPts,ranSize,ranCol,ranX,ranY)
六、修正与微调
现在,你可以根据自己的需求来创作星星了。这边我们提供一些好的想法,看看能不能用到你自己的程序作品中?
1、改变星星的样子
想让星星的造型变化多样,你可以修改while循环中ranPts和ranSize变量的值,方法就是改变赋值语句右边圆括号中的数字
2.用鼠标点击生成星星
除了让乌龟随机画出星星,我们还可以用函数turtle.onscreenclick()命令乌龟在鼠标点击的位置画星星。
3、让乌龟提速
如果你觉得乌龟画星星的速度太慢,你还可以调用一个函数speed()来控制乌龟的移动速度。在主程序中添加t.speed(0)试试看。
还等什么,
快去描绘属于你自己的灿烂星空吧