python课程作业-贪吃蛇

现在整理经常会用到的课程作业( python第二弹,持续更新中…)


目录

  • python课程作业-贪吃蛇
  • 简介
  • 系统环境
  • 其他依赖
  • 运行说明
  • 实现代码
  • 运行结果
  • 结语






简介

现在经常需要用到各种作业,网上的资料存在着各种各样的问题,因此我就为了大家的方便,将这些收集整理并在本地进行验证。对这些代码或资料中能缺少、错误的部分加以修正和补充,确保按照我的步骤可以很简单的把这个代码运行出来,供大家当平时作业或者练习使用。

保证可以运行!!!



系统环境

windows 10
python 3.6、3.7、3.8



其他依赖

turtle库是python内置的
无其它依赖





运行说明

按键盘进行操作:

W\A\S\D 操作方向
T 退出





实现代码

新建“贪吃蛇.py”文件,下列代码直接复制过去就可以使用:

from turtle import *
from random import randrange
from time import sleep


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()         #结束画图


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: exit(),"t")
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")

onkey(lambda: exit(),"T")
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()






运行结果

清华大学python库numpy 清华大学python作业_清华大学python库numpy





结语

在原作的基础上怎加了推出按钮,怎加了不用区分大小写

参考文献:
python实现贪吃蛇: