Advertisement
Fenny_Theo

CSC1002_3

Apr 22nd, 2020
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.17 KB | None | 0 0
  1. from turtle import Turtle, Screen, mainloop
  2. import random
  3. snake=Turtle()
  4. screen=Screen()
  5. movement=[(0,0)]
  6. snakeTails=Turtle()
  7. KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT="Up","Down","Left","Right"
  8. stamp=[snakeTails]
  9. foodItem=Turtle()
  10. foodDic={}
  11. g_direction="0"
  12. g_foodNumber=0
  13. g_tmp=[]
  14. g_initial=4
  15.  
  16. # setSnake
  17. snake.up()
  18. snake.setpos(0,0)
  19. snake.shape("square")
  20. snake.fillcolor("red")
  21.  
  22. #set screen
  23. screen.setup(width=500, height=500, startx=None, starty=None)
  24.  
  25. # setTails
  26. snakeTails.up()
  27. snakeTails.shape("square")
  28. snakeTails.color("blue","black")
  29. snakeTails.ht()
  30.  
  31. def setFood():
  32.     for i in range(1,10):
  33.         x=20*int(11*random.random())
  34.         c=random.random()
  35.         if c<1/2:
  36.             x=(-1)*x
  37.         y=20*int(11*random.random())
  38.         d=random.random()
  39.         if d<1/2:
  40.             y=(-1)*y
  41.         foodItem.up()
  42.         foodItem.ht()
  43.         foodItem.setpos(x,y)
  44.         foodItem.write(i)
  45.         foodDic[(x,y)]=i
  46.     print(foodDic)
  47.    
  48. def moveUp():
  49.     global g_direction
  50.     if g_direction!="Down":
  51.         g_direction="Up"
  52.  
  53. def moveDown():
  54.     global g_direction
  55.     if g_direction!="Up":
  56.         g_direction="Down"
  57.  
  58. def moveLeft():
  59.     global g_direction
  60.     if g_direction!="Right":
  61.         g_direction="Left"
  62.  
  63. def moveRight():
  64.     global g_direction
  65.     if g_direction!="Left":
  66.         g_direction="Right"
  67.  
  68.  
  69. def move():
  70.     global movement
  71.     global g_direction
  72.     global stamp
  73.     global g_foodNumber
  74.     x,y=snake.pos()
  75.     if g_direction!="0":
  76.         if g_direction=="Up":
  77.             snake.setheading(90)
  78.             if y<230:
  79.                 snake.forward(20)
  80.             else:
  81.                 snake.forward(0)
  82.         elif g_direction=="Down":
  83.             snake.setheading(270)
  84.             if y>-230:
  85.                 snake.forward(20)
  86.             else:
  87.                 snake.forward(0)
  88.             screen.update()
  89.         elif g_direction=="Left":
  90.             snake.setheading(180)
  91.             if x>-230:
  92.                 snake.forward(20)
  93.             else:
  94.                 snake.forward(0)
  95.             screen.update()
  96.         elif g_direction=="Right":
  97.             snake.setheading(0)
  98.             if x<230:
  99.                 snake.forward(20)
  100.             else:
  101.                 snake.forward(0)
  102.  
  103.         snakeTails.st()
  104.         screen.update()
  105.        
  106.         if g_initial>0:#不应该是movemen
  107.             tailShowUp()
  108.         else:
  109.             x,y=snake.pos()            
  110.             if (int(x),int(y)) in foodDic:#x,y不在food dic里面也不代表可以直接follow
  111.                 g_foodNumber=int(foodDic[(int(x),int(y))])
  112.             if g_foodNumber!=0:    
  113.                 tailDigest()
  114.             else:
  115.                 justFollow()
  116.         movement.append(snake.pos())
  117.     print(stamp[0].pos())
  118.     screen.ontimer(move,500)
  119.  
  120.  
  121. screen.onkey(moveUp,KEY_UP)
  122. screen.onkey(moveDown,KEY_DOWN)
  123. screen.onkey(moveLeft,KEY_LEFT)
  124. screen.onkey(moveRight,KEY_RIGHT)
  125.  
  126.  
  127. def tailShowUp():
  128.     global stamp
  129.     global g_initial
  130.     tmp=[]
  131.     for i in range(1):
  132.         stp=snakeTails.clone()
  133.         tmp.append(stp)
  134.         stamp=stamp+tmp
  135.     if len(tmp)>=len(movement):
  136.         for m in range(len(movement)):
  137.             tail=tmp[m]  
  138.             tail.goto(movement[-m-1])
  139.     else:
  140.         for m in range(len(tmp)):
  141.             tail=tmp[m]  
  142.             tail.goto(movement[-m-1])
  143.     g_initial-=1
  144.  
  145. def justFollow():
  146.         global stamp
  147.         for i in range(len(stamp)):
  148.             stamp[i].goto(movement[-i-1])
  149.  
  150. def tailDigest():
  151.     global g_foodNumber
  152.     global stamp
  153.     global g_tmp
  154.     x,y=snake.pos()
  155.     if g_foodNumber>0:
  156.         stp=snakeTails.clone()
  157.         g_tmp.append(stp)
  158.         stamp=g_tmp+stamp
  159.         g_foodNumber-=1
  160.         if len(g_tmp)>=len(movement):
  161.             for m in range(len(movement)):
  162.                 tail=g_tmp[m]  
  163.                 tail.goto(movement[-m-1]) #maybe ignore have a try
  164.         else:
  165.             for m in range(len(g_tmp)):
  166.                 tail=g_tmp[m]  
  167.                 tail.goto(movement[-m-1])
  168.     else:
  169.         g_tmp=[]
  170.        
  171. #def tailMove():
  172.  
  173.  
  174.  
  175. #main  
  176. setFood()
  177. move()
  178. screen.listen()
  179. screen.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement