Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from turtle import Turtle, Screen, mainloop
- import random
- snake=Turtle()
- screen=Screen()
- movement=[(0,0)]
- snakeTails=Turtle()
- KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT="Up","Down","Left","Right"
- stamp=[snakeTails]
- foodItem=Turtle()
- foodDic={}
- g_direction="0"
- g_foodNumber=0
- g_tmp=[]
- g_initial=4
- # setSnake
- snake.up()
- snake.setpos(0,0)
- snake.shape("square")
- snake.fillcolor("red")
- #set screen
- screen.setup(width=500, height=500, startx=None, starty=None)
- # setTails
- snakeTails.up()
- snakeTails.shape("square")
- snakeTails.color("blue","black")
- snakeTails.ht()
- def setFood():
- for i in range(1,10):
- x=20*int(11*random.random())
- c=random.random()
- if c<1/2:
- x=(-1)*x
- y=20*int(11*random.random())
- d=random.random()
- if d<1/2:
- y=(-1)*y
- foodItem.up()
- foodItem.ht()
- foodItem.setpos(x,y)
- foodItem.write(i)
- foodDic[(x,y)]=i
- print(foodDic)
- def moveUp():
- global g_direction
- if g_direction!="Down":
- g_direction="Up"
- def moveDown():
- global g_direction
- if g_direction!="Up":
- g_direction="Down"
- def moveLeft():
- global g_direction
- if g_direction!="Right":
- g_direction="Left"
- def moveRight():
- global g_direction
- if g_direction!="Left":
- g_direction="Right"
- def move():
- global movement
- global g_direction
- global stamp
- global g_foodNumber
- x,y=snake.pos()
- if g_direction!="0":
- if g_direction=="Up":
- snake.setheading(90)
- if y<230:
- snake.forward(20)
- else:
- snake.forward(0)
- elif g_direction=="Down":
- snake.setheading(270)
- if y>-230:
- snake.forward(20)
- else:
- snake.forward(0)
- screen.update()
- elif g_direction=="Left":
- snake.setheading(180)
- if x>-230:
- snake.forward(20)
- else:
- snake.forward(0)
- screen.update()
- elif g_direction=="Right":
- snake.setheading(0)
- if x<230:
- snake.forward(20)
- else:
- snake.forward(0)
- snakeTails.st()
- screen.update()
- if g_initial>0:#不应该是movemen
- tailShowUp()
- else:
- x,y=snake.pos()
- if (int(x),int(y)) in foodDic:#x,y不在food dic里面也不代表可以直接follow
- g_foodNumber=int(foodDic[(int(x),int(y))])
- if g_foodNumber!=0:
- tailDigest()
- else:
- justFollow()
- movement.append(snake.pos())
- print(stamp[0].pos())
- screen.ontimer(move,500)
- screen.onkey(moveUp,KEY_UP)
- screen.onkey(moveDown,KEY_DOWN)
- screen.onkey(moveLeft,KEY_LEFT)
- screen.onkey(moveRight,KEY_RIGHT)
- def tailShowUp():
- global stamp
- global g_initial
- tmp=[]
- for i in range(1):
- stp=snakeTails.clone()
- tmp.append(stp)
- stamp=stamp+tmp
- if len(tmp)>=len(movement):
- for m in range(len(movement)):
- tail=tmp[m]
- tail.goto(movement[-m-1])
- else:
- for m in range(len(tmp)):
- tail=tmp[m]
- tail.goto(movement[-m-1])
- g_initial-=1
- def justFollow():
- global stamp
- for i in range(len(stamp)):
- stamp[i].goto(movement[-i-1])
- def tailDigest():
- global g_foodNumber
- global stamp
- global g_tmp
- x,y=snake.pos()
- if g_foodNumber>0:
- stp=snakeTails.clone()
- g_tmp.append(stp)
- stamp=g_tmp+stamp
- g_foodNumber-=1
- if len(g_tmp)>=len(movement):
- for m in range(len(movement)):
- tail=g_tmp[m]
- tail.goto(movement[-m-1]) #maybe ignore have a try
- else:
- for m in range(len(g_tmp)):
- tail=g_tmp[m]
- tail.goto(movement[-m-1])
- else:
- g_tmp=[]
- #def tailMove():
- #main
- setFood()
- move()
- screen.listen()
- screen.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement