#2511. Python趣味项目——贪吃蛇(turtle基础版)
Python趣味项目——贪吃蛇(turtle基础版)
No testdata at current.
运行效果
操作说明
↑↓←→键控制小蛇移动方向
参考代码
import turtle as t
import random as r
#蛇身的坐标[x,y],存在二维列表,开始是3个小正方形
snake=[[0,0],[0,10],[0,20]]
#开局第一个食物是随机产生的,也是个小正方形
food=[r.randrange(-25,25)*10,r.randrange(-25,25)*10]
#小蛇的移动方向,[0,10]向上、[0,-10]向下、[-10,0]向左、[10,0]向右
dire=[0,10] #开局时,小蛇默认向上移动
size=10 #小正方形的边长
time=250 #屏幕刷新时间间隔
def square(x,y,len,tinge):#绘制一个正方形:x、y坐标,边长,颜色
t.penup()
t.goto(x,y)
t.pendown()
t.color(tinge)#画笔、填充颜色
t.begin_fill()
for i in range(4):
t.forward(len)#边长
t.left(90)
t.end_fill()
def changeDire(x,y):#改变移动方向
dire[0]=x
dire[1]=y
def moveSnake():#小蛇移动
head=snake.copy()[-1] #小蛇最后一个坐标就是它头的坐标
head=[head[0]+dire[0],head[1]+dire[1]]#head存储新的“头”坐标
if head in snake:#咬到自己,判定游戏结束
print("You Eat Yourself!")
print("Game Over!")
square(head[0],head[1],size,"red")
return#结束
if head==food:#吃到食物,产生新的食物
food[0]=r.randrange(-25,25)*10
food[1]=r.randrange(-25,25)*10
else:
#由于蛇在移动,每移动一次蛇都会向前长一节,所以要把蛇尾巴删掉,不然会一直变长
snake.pop(0)
snake.append(head)#上面说的,每移动一次,就向前长一节
t.clear()#清除屏幕
square(food[0], food[1], size, "red") # 画食物
for i in snake: # 画蛇
square(i[0], i[1], size, "black")
t.update()#刷新窗口,显示新的绘图
t.ontimer(moveSnake,time)#每隔time毫秒,执行一次moveSnake函数
t.setup(500,500)#窗口大小设置为500*500
t.hideturtle()#隐藏海龟
t.tracer(False)#不保留绘图轨迹
t.listen()#事件监听,这里主要是键盘监听,onkey
t.onkey(lambda:changeDire(0,10),"Up")
t.onkey(lambda:changeDire(0,-10),"Down")
t.onkey(lambda:changeDire(-10,0),"Left")
t.onkey(lambda:changeDire(10,0),"Right")
moveSnake()
t.done()