Python turtle的多学科创意编程

来源 :中国科技教育 | 被引量 : 0次 | 上传用户:martelfeng
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  Python语言中内置的海龟作图turtle模块设计巧妙,作图模型简单强大,能够让程序设计初学者很快编写出趣味生动的作图程序,极大提高编程学习的兴趣和积极性,在练习过程中培养和提高计算思维。除了绘制图形之外,Python turtle模块还具有基本的交互功能,加上学习门槛低,又是Python语言内置的标准模块,所以非常适合作为创意编程的学习和开发平台。本文以Python turtle模块为核心,展示和分析交互游戏、数学对象可视化等学科领域的创意编程实例,并介绍turtle模块的深入编程,以供创意编程的教学参考,也可用于高中Python程序设计课程的教学案例。
  本文实例所涉及的代码和截图,均可通过链 接(https://github. com/chbpku/bdfz.courses/wiki)访问获取。
  交互游戏:接苹果
  本作品是一个通过鼠标控制的交互游戏。程序运行后,在turtle窗口中会有随机数量和位置的红色苹果从顶端向下掉落,掉落速度各不相同。用户需要通过鼠标拖动窗口中间的三角形状“托篮”接住每一个苹果。托篮可以在窗口中随意移功,如果接住苹果,则加10分,分数在窗口左下角实时更新显示,但如果未能接住苹果使其掉出窗口下沿的话,则惩罚性地减100分。由于苹果产生的位置和速度均为随机,数量不定,惩罚性减分幅度大,游戏还是有相当难度的,想一直保持正分不太容易。最后点击关闭窗口即可退出游戏。游戏运行效果如图1所示。
  turtle功能
  本作品涉及到的turtle模块功能主要有5个。
  第1个是海龟绘图加速功能,通过在程序前部加tracer方法调用禁止动画显示。
  将海龟basket的拖动事件绑定到basket的goto函数,这样,当用户用鼠标点击这个海龟并进行拖动的时候,会触发drag事件,实现调用basket.goto函数,并将事件发生时海龟的坐标作为参数传递给basket. goto函数,从而实现鼠标拖动到哪里,海龟asket就跟到哪里的交互效果。海龟的鼠标交互事件还有点击事件onclick、释放事件nrelease,都可以绑定处理函数,从而实现点击、释放鼠标各个按钮的交互。
  第3个是海龟克隆功能,如程序中的第14行,海龟model的clone方法,可以将model对象复制1个,赋值给basket,克隆会产生新的海龟对象,并且保留原海龟对象的所有属性值。利用克隆功能,能够很方便地复制出相互独立而又具有相同初始属性的多个海龟,这些海龟后续修改属性并不会相互影响。
  第4个是海龟形状设定功能,如程序中的第13、15行,由于鼠标交互需要整体拖动一个图形,我们就可以将一个海龟的形状设置为这个图形,实现图形的动画和接受鼠标拖动事件。第13行在程序中用addshape函数添加注册1个名字为“basket”的形状,从代码可以看出,这是1个以海龟坐标为中心的倒三角形。第15行用shape函数将海龟basket设置成名称为“basket”的形状。
  我们也可以用shape函数将海龟的形状改为turtle模块内置的形状,如箭头"arrowl"、海龟"turtle"、圆"circle"、方形"square"、三角形"triangle"和经典形状"classic"。
  第5个是海龟的“盖戳”复印功能,如程序中的第43行,设定好红色苹果形状的海龟mould作为印模,可以在海龟当前位置上留下自身的形状。即便移走海龟,这个形状仍然保持在原地。
  40 #苹果下落,并用印模画出苹果
  41 apple[1] -=apple[2]
  42 mould. goto(apple[0],apple[1])
  43 mould.stamp()
  stamp函数将返回一个stampid,如果需要清除這个形状,则可以调用clearstamp豳数清除指定stampid的形状,或者调用clearstamps函数清除所有形状。
  程序代码分析
  程序可以分为2个部分:第1-28行为初始化部分,第30-57行为循环体部分。
  初始化部分中,第1-2行导入了必要的运行库。
  1 import turtle, time
  2 form random import randrange
  第4-7行关闭了turtle的动画效果,并创建了基础的画笔对象,用于后续的复制。
  4 turtle.tracer(0)
  5 model=turtle.Turtle( )
  6 model.hideturtle()
  7 model.penup()
  第9-10行设置了几个游戏参数。
  9 FPS=30 #每秒30帧刷新率
  10 FREQ=FPS//2#平均每秒生成2个苹果
  第12-18行创建了果篮对象,将其设置为自定义形状,并绑定至鼠标拖动事件上。
  12 #接苹果的篮子
  13 turtle.addshape(’basket’, ((-100,0),(100,0),(0,-25)))
  14 basket=model.clone()
  15 basket.shape(’basket’)
  16 basket.setheading(90)
  17 basket.ondrag(basket.goto) #把goto函数绑定到鼠标拖动事件上
  18 basket.showturtle()
  第20-23行创建了绘制苹果印模的画笔对象,并设置了其颜色与形状。   20 #用来显示苹果的印模
  21 mould=model.clone()
  22 mouldcolor(’red’)
  23 mould.shape(’circle’)
  第25-28行创建了绘制得分文字的画笔,设置了颜色与位置。
  26 board = model.clone()
  27 board.goto(-300,-300)
  28 board.color(’blue’)
  循环体部分前声明了苹果列表与当前得分,随后进入无限循环;循环体内首先清除了上一帧绘制的苹果。
  30 apples=[]
  31 score=0
  32 while True:
  33 mould.clearstamps()
  随后,根据随机数值确定当前帧是否生成苹果,并将相应生成的苹果加入列表内,每个对象记录了横纵坐标与下落速度。
  34 if randrange(FREQ)==0:
  35 #生成苹果[x,y,s]加入列表,s是一次下落高度
  36 apples.append([randrange(-350,350),400,5 randrange(10)])
  38-52行为主要的涛戏逻辑:首先记录篮子横纵坐标为b_x与b_y,随后遍历苹果列表中每个对象。
  38 b_x. b_y=basket.pos()
  39 for apple in apples:
  对每个苹果,在40-43行,首先使其下落相应高度,并在下落后的位置使用stamp绘制。
  40 #苹果下落,并用印模画出苹果
  41 apple[1]-=apple[2]
  42 mould.goto(apple[0], apple[1])
  43 mould.stamp()
  之后,44-52行中判断了每个苹果的位置,若在篮子内则加分并移除;若落出底边则扣分并移除。
  44 #判断苹果的位置
  45 if,abs(apple[0]-b_x)
其他文献
根据数据显示,仅在美国每年就约有1 000名初生婴儿天生缺少手部或有不同程度的手部不健全。虽然美国是仿生义肢的技术先驱,但一只仿生义肢手的价钱仍要10万美元,每3年便要更
<正>体质是人体生命过程中在先天遗传和后天获得的基础上所形成的,个体在形态结构、心理活动和功能活动方面所固有的、相对稳定的特性[1]。体质辨识以人的体质为认知对象,根
2000年我大学毕业进入北大附小,一直担任信息技术学科教师,同时开始了科技辅导员的工作脚步。从稚嫩新手成长为骨干教师,从按部就班上课的青涩到能够赋予自己的课堂和科技辅导活动更多意义的思考,热爱这份教育事业的我坚持不断地丰富自我,探索创新,沉淀反思,保有初心,矢志不渝,始终前行在教育研究实践的路上,深切体味一名教师的幸福,一名科技辅导员的幸福。  @幸福来自于科技辅导员工作的多维拓宽  作为一线科技
创新能力是一个国家的核心竞争力,是国家软实力的核心体现。世界各国都把创新人才的培养问题提升到国家战略层面,并出台一系列鼓励性政策和措施,以期在日新月异的全球竞争中占据有利地位。当前,如何高效地培养创新人才尤其是科技创新人才,已经成为了我国教育改革的重要内容和方向。然而,对教育政策进行重大调整和变革必须基于实证研究,在教育领域培养创新人才应当建立在对创新能力的科学认识的基础上。  近年来,我国对于脑
本文主要利用稳健统计方法,分析了各向异性扩散与双边滤波之间的关系,不仅扩大了数字图像非线性滤波与非线性扩散之间的关联.而且为数字图像中的滤波方法应用到曲面重构奠定了基
逐步加入贴近实务的假设,定量分析并找出影响保兑仓决策的重要参数有哪些、参数值求解以及参数间的关系,得出以下结论:找出保兑仓正常运行的质押率临界值ω0,市场需求临界值D
疫苗是人类对抗疾病的重要屏障,是降低死亡率的有效工具,其安全性至关重要。近年来,我国疫苗安全事故层出不穷,我国对疫苗安全的监管能力有待提高。本文通过对国外疫苗安全监
为怀宁县单季稻生产中紫云英替代氮磷钾化肥施用提供科学依据,设置施紫云英鲜草1000kg/667m^2(处理1),紫云英鲜草1000kg/667m^2+纯N 10kg/667m^2+P2O54kg/667m^2+K2O 6kg/667
选择3-4岁。体重相近的适龄新疆细毛羊96只作母本。成年德国美利奴羊公羊、新疆细毛羊公羊各2只作父本,分别组成1个德6&#215;新早杂交组与新6&#215;新辛对照组。采用人工授精