python-贪吃蛇

目标效果:

支持移动、吃食物身体加长、撞墙游戏结束

##############引用数据库与函数##############
from turtle import *
from random import randrange

##############定义变量##############
snake=[[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]   #队列,用中括号包裹
apple_x=randrange(-20,20)*10   #-200到200中随机生成整十食物座标轴
apple_y=randrange(-20,20)*10
aim_x=10   #每次x座标都需要增长10
aim_y=0   #y不增加,横着向右移动

##############定义函数##############
def square(x,y,size,color_name):
    up()  #把小乌龟从画布上拿下来,悬在空中
    goto(x,y)   #去(x,y)这个位置
    down()    #把小乌龟放下来
    color(color_name)   #定义颜色
    begin_fill()   #开始填充

    forward(size)   #前进边长的距离
    left(90)   #左转
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    end_fill()   #填充,就画好一个完整的正方形
def change(x,y):
    global aim_x,aim_y
    aim_x=x
    aim_y=y
def inside():
    if -210<=snake[-1][0]<=200 and -210<=snake[-1][1]<=200:   #判断蛇头是否还在画布中,不在就返回False
        return True
    else:
        return False
def gameLoop():
    global apple_x,apple_y   #申请使用变量,声明变量为全局变量
    snake.append([snake[-1][0]+aim_x,snake[-1][1]+aim_y])   #向前移动,前边添加一个身子
    if not inside():   #如果为True,即inside方法返回False,结束
        return
    if snake[-1][0]!=apple_x or snake[-1][1]!=apple_y:   #如果没有吃到食物,要去掉尾巴,吃掉食物尾巴就不用去掉
        snake.pop(0)
    else:
        apple_x = randrange(-20, 20) * 10  #吃到了食物,重新生成一个
        apple_y = randrange(-20, 20) * 10
    clear()   #把上一次作画的内容清除掉
    square(apple_x, apple_y, 10, "green")  # 在座标轴画一个红色食物
    for i in range(len(snake)):
        square(snake[i][0],snake[i][1],10,"black")
    ontimer(gameLoop,200)
    update()   #把想画的东西画倒画布上

##############主程序##############
setup(420,420,0,0)   #画布大小为420*420,一开始座标为(0,0)
hideturtle()   #隐藏小乌龟
tracer(False)   #隐藏绘制过程
listen()   #监听键盘
onkey(lambda :change(0,10),"w")   #如果按下w键,表示方向向上,aim_x=0,aim_y=10,沿着y轴向上走
onkey(lambda :change(0,-10),"s")
onkey(lambda :change(-10,0),"a")
onkey(lambda :change(10,0),"d")
gameLoop()
done()   #结束函数,画布停留

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章