1. 程式人生 > >Python----貪吃蛇遊戲

Python----貪吃蛇遊戲

# -*- coding: UTF-8 -*-
#引入turtle庫,製作snake,food的動畫
from turtle import *
#引入random庫,使food隨機出現
from random import randrange
#引入freegames庫,這個庫中封裝了許多元素;我們可以使用正方形元素表示food,snake,用vector這個二維向量表示snake的移動
from freegames import square, vector

#初始化food,snake
food = vector(0, 0)
snake = [vector(10, 0)]
#vector(0,10)表示第一個food的位置在以snake的頭為原點,橫座標為0,縱座標為-10處
aim = vector(0, -10)

#改變方向
def change(x, y):
    aim.x = x
    aim.y = y

#判斷snake有沒有碰到牆壁
def inside(head):
    return -200 < head.x < 190 and -200 < head.y < 190


def move():
    head = snake[-1].copy()
    head.move(aim)

    #考慮遊戲結束的兩種情況,head碰到牆壁/頭碰到身體
    if not inside(head) or head in snake:
        square(head.x, head.y, 9, 'red')
        update()
        return

    snake.append(head)

    #snake吃到food,下一個food會隨機出現在畫布的另一個地方
    if head == food:
        print('Snake:', len(snake))
        food.x = randrange(-15, 15) * 10
        food.y = randrange(-15, 15) * 10
    # snake沒有吃到food,snake列表pop(0)
    else:
        snake.pop(0)

    clear()

    for body in snake:
        square(body.x, body.y, 9, 'black')

    square(food.x, food.y, 9, 'green')
    update()
    ontimer(move, 100)

#初始畫布尺寸
setup(420, 420, 370, 0)
#隱藏滑鼠
hideturtle()
tracer(False)
#監聽
listen()
#繫結鍵盤方向
onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')
move()
done()