一 相关知识
1 randrange()函数
- 功能:randrange() 方法返回指定递增基数集合中的一个随机数,基数默认值为1。
- 语法:random.randrange ([start,] stop [,step])
- 注意:randrange()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
- 方法一:import random
- 方法二:from random import randrange
- 注意:randrange()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
- 参数:
- start -- 指定范围内的开始值,包含在范围内。
- stop -- 指定范围内的结束值,不包含在范围内。
- step -- 指定递增基数。
- 返回值:从给定的范围返回随机项。
2 turtle.tracer()函数
- 功能:启用/禁用海龟动画并设置刷新图形的延迟时间。——可看作是为了加快/减慢作图的,你可以在里面添加参数
- 语法:turtle.tracer(n=None,delay=None)
- 如果指定 n 值,则只有每第 n 次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) 如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值
-
n -- 非负整型数;delay -- 非负整型数
- turtle.tracer(False)或者duturtle.tracer(0):图形将一次性画好
- turtle.tracer(1):图形按照正常速度进行,可有可无
- turtle.tracer(4):在循环中,图形将一次画出4次循环的图
3 turtle.update():执行一次 TurtleScreen 刷新。在禁用追踪时使用。
4 turtle.clear():从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。
二 代码
只是了解了一些函数的作用,代码逻辑还没搞清楚,嗯,待续。。。
1 """Snake,classic arcade game 2 Exercise 3 1. How do you make the snake faster or slower? 4 2. How can you make the snake go around the edges? 5 3 How would you move the food? 6 4. Change the snake to respond to arrow keys. 7 """ 8 9 from turtle import * # 导入turtle库,此种方式导入可直接使用库内函数,不使用trutle.做前导 10 from random import randrange # 从random库中导入randrange()函数,使food随机出现 11 from freegames import square,vector # 从freegames库中导入square和vector,用square正方形表示food、snake,用vector这个二维向量表示snake 12 13 food = vector(0,0) # 初始化food 14 snake = [vector(10,0)] # 初始化snake,而且snake是列表?二维向量? 15 aim = vector(0,-10) # vector(0,-10)表示第一个food的位置在以snake的头为原点,横坐标为0,纵坐标为-10处 16 17 def change(x,y): # 改变方向 18 "Change snake direction." 19 aim.x = x 20 aim.y = y 21 22 def inside(head): # 判断snake有没有碰到墙壁 23 "Return True if head inside the boundaries." 24 return -200 < head.x < 190 and -200 < head.y < 190 25 26 def move(): 27 "Move snake forward one segment." 28 head = snake[-1].copy() 29 head.move(aim) 30 31 if not inside(head) or head in snake: # 考虑游戏结束的两种情况,head碰到墙壁|头碰到身体 32 square(head.x,head.y,9,'red') 33 update() 34 return 35 36 snake.append(head) 37 38 if head == food: # snake吃到food,下一个food会随机出现在画布的另一个地方 39 print('Snake',len(snake)) 40 food.x = randrange(-15,15) * 10 41 food.y = randrange(-15,15) * 10 42 else: # snake没有吃到food,snake列表pop(0) 43 snake.pop(0) 44 45 clear() 46 47 for body in snake: 48 square(body.x,body.y,9,'black') 49 50 square(food.x,food.y,9,'green') 51 update() 52 ontimer(move,100) 53 54 setup(420,420,370,0) # 初始画布尺寸 55 # hideturtle() # 隐藏鼠标 56 tracer(False) 57 listen() # 监听 58 # 绑定键盘方向 59 onkey(undo,'u') 60 onkey(lambda:change(10,0),'Right') # 右转 61 onkey(lambda:change(-10,0),'Left') # 左转 62 onkey(lambda:change(0,10),'Up') # 向上走 63 onkey(lambda:change(0,-10),'Down') # 向下走 64 move() 65 done()