1 """
2 第十课 赤橙黄绿青蓝紫(落笔抬笔打点)3 """
4 from sprites import *
5
6 s = '第十课 赤橙黄绿青蓝紫(落笔抬笔打点)'
7 screen =Screen()8 screen.bgcolor('blue')9 screen.titlebar(False)10 root = screen._root #窗口对象
11 root.wm_attributes('-alpha',0.7) #设置窗口为全透明(0到1.0)
12 screen.setup(800,800)13 screen.tracer(0,0)14
15 #下面的代码让窗口可以拖动.
16 oldx =017 oldy =018 defstartmove(event):19 globaloldx,oldy20 oldx =event.x21 oldy =event.y22 defstopmove(event):23 globaloldx,oldy24 oldx =025 oldy =026 defmovewindow(event):27 globaloldx,oldy28 dx = event.x -oldx29 dy = event.y -oldy30 root.move(dx,dy)31 screen.cv.bind("", startmove)32 screen.cv.bind("", stopmove)33 screen.cv.bind("",movewindow)34
35 #下面的代码按方向箭头则窗口能上下左右移动
36 screen.onkeypress(lambda:root.move(10),'Right')37 screen.onkeypress(lambda:root.move(-10),'Left')38 screen.onkeypress(lambda:root.move(0,-10),'Up')39 screen.onkeypress(lambda:root.move(0,10),'Down')40 screen.listen()41
42 ft_title = ('楷体',30,'bold')43 ft_context = ('宋体',18,'normal')44 t = Sprite(visible=False,pos=(-500,100))45 t.color('magenta')46 clock =Clock()47 for x in range(100):48 t.clear()49 t.write(s,align='center',font=ft_title)50 t.wait()51 t.fd(5)52 clock.tick(60)53
54 spacekey = Key('space') #空格键
55 m1 = Mouse() #鼠标左键
56 while notspacekey.down():screen.update()57
58 #简介
59 brief ="""
60 本节课,我们主要学习倒退命令、抬笔与落笔和打点命令。61 然后运用所学过的知识用程序的顺序结构画一个简单的彩色图形。62 在这个课程中,我们把画的步骤描述了一下,大家在观看视频的时候63 可以暂停一下,看看能不能自己先画出来。64 """
65 if brief!='': #如果有课程简介,则生成一个角色,
66 ftx = ('宋体',18,'normal')67 简介 = Sprite(visible=False,pos=(0,-100))68 简介.color('white')69 简介.write(brief,align='center',font=ftx)70 whilespacekey.down():screen.update()71 while notspacekey.down():screen.update()72
73 for x in range(66): #标题向右消失
74 t.clear()75 t.write(s,align='center',font=ft_title)76 t.fd(10)77 if brief!='':78 简介.clear()79 简介.write(brief,align='center',font=ftx)80 简介.bk(10)81 clock.tick(60)82 简介.clear()83
84 #以下是显示学习的内容段
85 studycontent = """
86 主要学习内容87
88 1、关于参数89
90 2、倒退命令91
92 3、落笔与抬笔93
94 4、dot打圆点命令95
96 5、编程画图形97
98 6、练习与作业99 """
100 t.color('white')101 t.clear()102 t.sety(-260) #这里修改菜单的显示y坐标
103 ft = ('楷体',24,'bold')104 s =studycontent105 while notspacekey.down():screen.update()106 #下面的代码显示主菜单
107 for x in range(130):108 t.clear()109 t.write(s,align='center',font=ft)110 t.bk(5)111 clock.tick(60)112
113 defslow_write(t,string):114 """
115 t:角色,string:要显示的字116 本函数慢慢的显示字。117 """
118 string = string.split('\n') #换成列表
119 oldxy = t.position() #记录老的坐标
120 t.goto(-360,330) #定位到标题的坐标
121 #显示标题,注意string[0]是一个空行
122 t.write(string[1],font=ft_title)123 t.addy(-50)124 for line in string[2:]: #每一行字
125 for char in line: #每一个字符
126 t.write(char,align='center',font=ft_context)127 t.wait(0.1)128 cd = len(bytes(char,'gb2312'))129 if cd == 1:130 t.addx(16)131 else:132 t.addx(24)133 t.setx(-360)134 t.addy(-30)135 t.goto(oldxy)136
137 s1 = """
138 1、关于参数139
140 所谓参数,它可能是一个数据,也可能是一个变量,141 关于参数我们以后还会讲解。在这里把它理解为写142 到命令小括号中的数据。如turtle.fd(100),143 那么100就是参数。而在print(32,76)这句代码中,144 print命令有两个参数,它们以逗号进行隔开。145
146 """
147 defpress1():148 t.clear()149 slow_write(t,s1)150 while notspacekey.down():screen.update()151 t.clear()152 t.write(s,align='center',font=ft)153 screen.onkeypress(press1,'1')154
155
156 s2 = """
157 2、倒退命令158
159 如果要让海龟倒退的话,我们可以在forward命令中用负数。160 当然,也可以直接用海龟画图提供的backward、back和bk命令。161 它们都是能让海龟往后退。162 如turtle.backward(100)就能让海龟倒退100个单位了。163 当然,我们写成turtle.back(100)或者turtle.bk(10)164 都是完全没有问题的。165
166 """
167 defpress2():168 t.clear()169 slow_write(t,s2)170 while notspacekey.down():screen.update()171 t.clear()172 t.write(s,align='center',font=ft)173 screen.onkeypress(press2,'2')174
175
176 s3 = """
177 3、落笔与抬笔178
179 海龟默认就是落笔的,当我们移动它时,它就会留下轨迹。180 如果不希望它留下轨迹,那么我们可以用抬笔命令让它抬笔。181 pendown,pd,down这三个是落笔命令,没有参数。182 penup,pu,up这三个是抬笔命令,没有参数。183 isdown命令判断是否是落笔还是抬笔状态。184 """
185 defpress3():186 t.clear()187 slow_write(t,s3)188 while notspacekey.down():screen.update()189 t.clear()190 t.write(s,align='center',font=ft)191 screen.onkeypress(press3,'3')192
193
194 s4 = """
195 4、dot命令196
197 dot命令能打圆点,它有两个参数,第一个表示直径,第二个表示颜色。198 如果不写颜色,则以海龟的颜色为圆点的颜色。199 假设海龟的颜色为红色,那么dot(100)会打一个直径为100的红圆。200 dot(100,'blue')则不管海龟什么颜色,海龟都会在屏幕上201 会打一个直径为100的蓝色的圆。202 """
203 defpress4():204 t.clear()205 slow_write(t,s4)206 while notspacekey.down():screen.update()207 t.clear()208 t.write(s,align='center',font=ft)209 screen.onkeypress(press4,'4')210
211
212 s5 = """
213 5、编程画图形214
215 现在来练习编程,让海龟从屏幕的左边到右边打不同颜色的圆点。216 颜色依次是赤、橙、黄、绿、青、蓝、紫。217 由于黑色的背景能更加衬托出彩色的效果,所以当导入海龟模块后,218 我们获取了屏幕,把它命名为screen,然后把屏幕的背景色设为黑色。219 接着,为了让海龟在移动的过程中不留下轨迹,所以让它抬笔了。220 我们希望海龟从左边到右边打圆点,所以让海龟倒退了300个单位。221 最后,我们不断地打一个不同颜色的圆点,然后前进100个单位,222 一共打了7个点。223
224 """
225 defpress5():226 t.clear()227 slow_write(t,s5)228 while notspacekey.down():screen.update()229 t.clear()230 t.write(s,align='center',font=ft)231 screen.onkeypress(press5,'5')232
233 s6 = """
234 6、练习与作业235
236 ★ 画两条并排的竖线条,长度为100,隔50个单位237
238 ★ 打两行甚至更多行的赤橙黄绿青蓝紫圆点图形。239
240 ★ 打点时只写直径这个参数,重新编制赤橙黄绿青蓝紫图形。241
242 """
243 defpress6():244 t.clear()245 slow_write(t,s6)246 while notspacekey.down():screen.update()247 t.clear()248 t.write(s,align='center',font=ft)249 screen.onkeypress(press6,'6')250
251
252
253 byebye = """
254 下次再见!255 """
256 defpressq():257 t.clear()258 t.color('cyan')259 t.home()260 t.write(byebye,align='center',font=('宋体',38,'bold'))261 while notspacekey.down():screen.update()262 screen.bye()263 screen.onkeypress(pressq,'q')264
265
266 screen.mainloop()