一 相关函数
turtle.circle()函数
- 功能:根据半径radius绘制extent角度的弧形
- 语法:turtle.circle(radius, extent=None)
- 参数:正正左顺,负负右逆
- radius :弧形半径(当radius值为正数时,圆心在当前位置/小海龟左侧;当radius值为负数时,圆心在当前位置/小海龟右侧。)
- extent :弧形角度。当无该参数或参数为None时,绘制整个圆形。(当extent值为正数时,顺小海龟当前方向绘制;当extent值为负数时,逆小海龟当前方向绘制。)
二 代码
在添加过程中把原来的函数名circle改成了paint_circle,否则在我们自定义函数circle内部调用turtle库内的画圆函数circle,程序会报错:因为此时相当于调用了我们自己定义的circle函数,而不会调用turtle库内的circle函数,全部代码如下:
1 """Paint, for drawing shapes. 2 3 Exercises 4 5 1. Add a color. 6 2. Complete circle. 7 3. Complete rectangle. 8 4. Complete triangle. 9 5. Add width parameter. 10 11 """ 12 13 from turtle import * # 导入turtle库 14 from freegames import vector # 这句没太搞明白?大概是引入向量? 15 16 def line(start, end): # 定义一个画一条线的函数,参数类型只能是向量 17 "Draw line from start to end." 18 penup() # 画笔提起操作 19 goto(start.x, start.y) # 将画笔移动到起点坐标为(x,y)的位置 20 pendown() # 画笔放下操作 21 goto(end.x, end.y) # 将画笔移动到终点坐标为(x,y)的位置 22 23 def square(start, end): # 定义一个画正方形的函数,参数类型只能是向量 24 "Draw square from start to end." 25 up() # 画笔提起操作 26 goto(start.x, start.y) # 将画笔移动到起点坐标为(x,y)的位置 27 down() # 画笔放下操作 28 begin_fill() # 准备开始填充图形 29 30 for count in range(4): # 循环4次,用于画矩形 31 forward(end.x - start.x) # 向当前画笔方向移动一段距离,该距离是第二次点击鼠标所在位置的横坐标减去第一次点击鼠标所在位置的横坐标 32 left(90) # 调整画笔方向:逆时针移动90° 33 34 end_fill() # 填充图形结束 35 36 def paint_circle(start, end): # 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 37 "Draw circle from start to end." 38 up() # 画笔提起操作 39 goto(start.x,start.y) # 将画笔移动到起点坐标为(x,y)的位置 40 down() # 画笔放下操作 41 begin_fill() # 准备开始填充图形 42 fillcolor("pink") # 将填充颜色设置为粉色 43 radius = end.x - start.x # 圆的半径是第二次点击屏幕所在位置的横坐标减去第一次点击屏幕所在位置的横坐标 44 circle(radius) # radius为正,逆时针画一个半径为radius的圆;radius为负,顺时针画一个半径为radius的圆 45 end_fill() # 填充图形结束 46 # pass # TODO # 内容需要自己补充 47 """ 48 def rectangle(start, end): # 画矩形框 49 "Draw rectangle from start to end." 50 pass # TODO 51 52 def triangle(start, end): # 画三角形 53 "Draw triangle from start to end." 54 pass # TODO 55 """ 56 def tap(x, y): # 用来存储鼠标的初始位置或者要画的图形 57 "Store starting point or draw shape." 58 start = state['start'] 59 60 if start is None: 61 state['start'] = vector(x, y) # 将字典中'start'初始化为一个向量 62 else: 63 shape = state['shape'] # 将字典中'shape'的值赋给shape变量 64 end = vector(x, y) # 定义画图结束位置的向量 65 shape(start, end) # 调用shape变量对应的函数绘制图形 66 state['start'] = None # 将start字典的'start'元素值重置为None 67 68 #def store(key, value): 69 "Store value in state at key." 70 # state[key] = value 71 72 state = {'start': None, 'shape': paint_circle}# 定义一个字典类型state变量用来告诉python要绘制什么图形 73 setup(500, 500, 500,0) # 设置画布初始位置 74 onscreenclick(tap) # 可能这句代码的意思是每次在画布上敲击鼠标,都调用一次tap函数; 75 # 第一次敲击鼠标调用tap函数后,将画笔的起点位置状态由None改变为一个向量vector(x, y) 76 # 第二次敲击鼠标调用tap函数后,在tap函数内部调用shape值对应的函数进行画图 77 # listen() 78 # onkey(undo, 'u') # 撤销上一个turtle动作 79 # onkey(lambda: color('black'), 'K') 80 # onkey(lambda: color('white'), 'W') # 暂时没搞懂这些代码啥意思,注释掉也不影响程序运行 81 # onkey(lambda: color('green'), 'G') 82 # onkey(lambda: color('blue'), 'B') 83 # onkey(lambda: color('red'), 'R') 84 # onkey(lambda: store('shape', line), 'l') 85 # onkey(lambda: store('shape', square), 's') 86 # onkey(lambda: store('shape', circle), 'c') 87 # onkey(lambda: store('shape', rectangle), 'r') 88 # onkey(lambda: store('shape', triangle), 't') 89 90 done() # 必须是乌龟图形程序中的最后一个语句。