python实现贪吃蛇

利用turtle函数画出一个正方形
后面苹果,蛇都要调用这个生成
这个函数要被下面的文件调用的
gamebase.py 文件

from turtle import *



def square(x,y,size,color_name):    #定义一个话方块的函数,有四个参数
    up()
    goto(x,y)  #拿起画笔到指定坐标
    down()      #落下
    color(color_name)    #调用color函数接收参数
    begin_fill()         #开始画图

    forward(size)        #接收size forward会沿直线走size步
    left(90)              #left函数向左转90°
    forward(size)         #再直走size步 以此类推
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)

    end_fill()         #结束画图

主文件
init.py文件

from turtle import *
from gamebase import *      #将写好的函数导入文件中
from random import randrange
from time import sleep

snake = [[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]    #定义蛇为一个
apple_x = randrange(-20, 20)*10                       #苹果有两个坐标apple_x,apple_y,调用随机函数再范围(-20, 20)*10()要为10的倍数产生随机数
apple_y = randrange(-20, 20)*10
aim_x = 10                                       #定义开始的步长为向左移动10单位,y轴保持不变
aim_y = 0

def change(x,y):   #定义chang函数,wasd操作会调用change
    global aim_x,aim_y
    aim_x=x
    aim_y=y

def inside_snake():    #判断蛇是否咬到自己
    for n in range(len(snake)-1):      #循环遍历蛇本身,当蛇头横纵坐标全部等于身体上的任意一截坐标,返回真
        if snake[-1][0] == snake[n][0] and snake[-1][1] == snake[n][1]:
            return True
    return False


def inside():      #判断蛇是否撞墙
    if  -210<= snake[-1][0] <= 200 and -210 <= snake[-1][1] <= 200:    #判断蛇头x,y,坐标在不在画布内
        return True
    else:
        return False

def gameloop():      #循环函数,主函数,没有跳出会一直执行
    global apple_x,apple_y,aim_x,aim_y,snake     #将全球变量引用过来
    snake.append([snake[-1][0]+aim_x, snake[-1][1]+aim_y])   #蛇的头(列表的尾)添加一个数据

    if apple_x != snake[-1][0] or apple_y != snake[-1][1]:    #判断是否吃到苹果,吃到则不用丢弃数据,没吃到则丢弃列表头部(蛇尾)数据
        snake.pop(0)
    else :
        apple_x = randrange(-20,20)*10                       #吃到了生成新的苹果
        apple_y = randrange(-20,20)*10

    if (not inside()) or inside_snake():                 #重开任意一个条件满足,撞墙或者咬自己
        square(snake[-1][0],snake[-1][1],10,"red")       #蛇头变红
        update()                                         #更新画布
        sleep(2)                                          #停止两秒钟后
        snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]]     #生成新的蛇
        apple_x = randrange(-20, 20) * 10                                 #新的苹果
        apple_y = randrange(-20, 20) * 10
        aim_x = 10
        aim_y = 0


    clear()

    square(apple_x, apple_y, 10, "red")
    for n in range(len(snake)):      #调用square函数将列表变为绿色蛇图形
        square(snake[n][0],snake[n][1],10,"green")

    ontimer(gameloop,100)
    update()#更新,要不然画面不动
Screen().setup(420,420,0,0)#建立画布
hideturtle() #隐藏画图的头
tracer(False) #隐藏画图过程
listen()   #监听输入
onkey(lambda: change(0,10),"w")  #监听键盘,w,调用change函数,传值0,10 将移动的初始值改变,蛇头获得值后就会在对应的地方append出来
onkey(lambda: change(0,-10),"s")
onkey(lambda: change(-10,0),"a")
onkey(lambda: change(10,0),"d")
gameloop()#循环主函数
done()

在这里插入图片描述如图:只有两个文件,一个是gamebase,一个是_init_文件,_init_文件调用gamebase文件
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值