002_Snake_FreePythonGames

一 相关知识

1 randrange()函数

  • 功能:randrange() 方法返回指定递增基数集合中的一个随机数,基数默认值为1。
  • 语法:random.randrange ([start,] stop [,step])
    • 注意:randrange()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
      • 方法一:import random
      • 方法二:from random import randrange
  • 参数:
    • 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()

 

上一篇:002 c++中的输入输出的概念


下一篇:leetcode 002 两数相加 Java题解