Advertisement
AyanUpadhaya

Simple Snake Game in Python in Turtle Module

Sep 7th, 2021
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.38 KB | None | 0 0
  1. #snake game in turtle module
  2.  
  3. import turtle
  4. import random
  5. import time
  6.  
  7. DELAY=0.1
  8.  
  9. class Snake:
  10.     def __init__(self,master,color,shape,speed,width,length,position):
  11.         self.master = master
  12.         self.color = color
  13.         self.shape = shape
  14.         self.speed = speed
  15.         self.width = width
  16.         self.length = length
  17.         self.position =  position
  18.         self.segments = []
  19.  
  20.     #snake movements    
  21.  
  22.     def move_down(self):
  23.         y = self.master.ycor()
  24.         self.master.sety(y-20)
  25.  
  26.     def move_up(self):
  27.         y = self.master.ycor()
  28.         self.master.sety(y+20)
  29.  
  30.     def move_left(self):
  31.         x = self.master.xcor()
  32.         self.master.setx(x-20)
  33.  
  34.     def move_right(self):
  35.         x = self.master.xcor()
  36.         self.master.setx(x+20)
  37.  
  38.     #draw snake
  39.     def draw(self):
  40.        
  41.         self.master.color(self.color)
  42.         self.master.shape(self.shape)
  43.         self.master.shapesize(stretch_wid=self.width,stretch_len = self.length)
  44.         self.master.speed(self.speed)
  45.         self.master.dx = 1
  46.         self.master.dy = 1
  47.         self.master.penup()
  48.         self.master.goto(self.position[0],self.position[1])
  49.         return self.master
  50.        
  51.  
  52.  
  53.  
  54.  
  55. class Food(Snake):
  56.     def move_at_random_place(self):
  57.         x = random.randint(-290,290)
  58.         y = random.randint(-290,290)
  59.  
  60.         self.master.goto(x,y)
  61.  
  62.  
  63. class Pen:
  64.     def __init__(self):
  65.         self.pen = turtle.Turtle()
  66.         self.color = 'white'
  67.         self.pen.hideturtle()
  68.         self.pen.color(self.color)
  69.  
  70.     def WriteText(self,text,x,y):
  71.         self.pen.clear()
  72.         self.pen.speed(0)#speed of animation
  73.         self.pen.penup()
  74.         self.pen.hideturtle()
  75.         self.pen.goto(x,y)
  76.         self.pen.write('{}'.format(text),align='center',font=('Courier',18,'bold'))
  77.        
  78.  
  79. class Game:
  80.     def __init__(self,title,bg,width,height):
  81.         self.window = turtle.Screen()
  82.         self.title = title
  83.         self.bg = bg
  84.         self.width = width
  85.         self.height = height
  86.         self.snake = Snake(turtle.Turtle(),'yellow','square',0,1,1,[-250,100])
  87.         self.food = Food(turtle.Turtle(),'red','circle',0,.7,.7,[0,0])
  88.         self.snake.draw()
  89.         self.food.draw()
  90.         self.direction = 'stop'
  91.         self.score = 0
  92.         self.life = 4
  93.         self.scoreWriter = Pen()
  94.         self.lifeWriter = Pen()
  95.         self.gameOver = Pen()
  96.         self.running =True
  97.  
  98.     #change direction
  99.  
  100.     def to_down(self):
  101.         if self.direction!='up':
  102.             self.direction = 'down'
  103.  
  104.     def to_up(self):
  105.         if self.direction!='down':
  106.             self.direction = 'up'
  107.  
  108.     def to_left(self):
  109.         if self.direction!='right':
  110.             self.direction = 'left'
  111.  
  112.     def to_right(self):
  113.         if self.direction!='left':
  114.             self.direction = 'right'
  115.  
  116.  
  117.     #class walk method to move the snake
  118.     def walk(self):
  119.         if self.direction == 'down':
  120.             self.snake.move_down()
  121.         if self.direction == 'up':
  122.             self.snake.move_up()
  123.         if self.direction == 'left':
  124.             self.snake.move_left()
  125.         if self.direction == 'right':
  126.             self.snake.move_right()
  127.        
  128.  
  129.     #play
  130.     def play(self):
  131.         self.scoreWriter.WriteText(f'Score:{self.score}',-190,260)
  132.         self.lifeWriter.WriteText(f'Life:{self.life}',190,260)
  133.  
  134.         #check collision with border
  135.  
  136.         if self.snake.master.xcor()>290 or self.snake.master.xcor()<-290 or self.snake.master.ycor()>290 or self.snake.master.ycor()<-290:
  137.             time.sleep(1)
  138.             self.snake.master.goto(0,0)
  139.             self.life-=1
  140.             self.lifeWriter.WriteText(f'Life:{self.life}',190,260)
  141.             self.direction = 'stop'
  142.  
  143.             for segment in self.snake.segments:
  144.                 segment.goto(1000,1000)
  145.             self.snake.segments.clear()
  146.  
  147.         #check collision with food
  148.         if self.snake.master.distance(self.food.master)<20:
  149.             self.food.move_at_random_place()
  150.             self.score+=1
  151.             self.scoreWriter.WriteText(f'Score:{self.score}',-180,260)
  152.             new_segment = Snake(turtle.Turtle(),'white','square',0,1,1,[0,0])
  153.             self.snake.segments.append(new_segment.draw()) #add new segment to snake body
  154.          
  155.  
  156.         #move last segment first in reverse order
  157.         for index in range(len(self.snake.segments)-1,0,-1):
  158.             x = self.snake.segments[index-1].xcor()
  159.             y = self.snake.segments[index-1].ycor()
  160.             self.snake.segments[index].goto(x,y)
  161.  
  162.         #Move 0 segment where the head is
  163.         if len(self.snake.segments)>0:
  164.             x = self.snake.master.xcor()
  165.             y = self.snake.master.ycor()
  166.             self.snake.segments[0].goto(x,y)
  167.         #if game over
  168.         if self.life==0:
  169.             self.running =False
  170.             self.window.clear()
  171.             self.window.bgcolor('black')
  172.             self.gameOver.WriteText(f'Game Over, score: {self.score}',0,260)
  173.             # ~ playsound('sounds/crash.wav')
  174.  
  175.                
  176.  
  177.         self.walk()
  178.        
  179.  
  180.     def run(self):
  181.         #configure window
  182.         self.window.title(self.title)
  183.         self.window.bgcolor(self.bg)
  184.         self.window.setup(self.width,self.height)
  185.         self.window.tracer(0)
  186.  
  187.         #lets create event listener
  188.         self.window.listen()
  189.         self.window.onkeypress(self.to_down,'Down')
  190.         self.window.onkeypress(self.to_up,'Up')
  191.         self.window.onkeypress(self.to_right,'Right')
  192.         self.window.onkeypress(self.to_left,'Left')
  193.  
  194.  
  195.  
  196.         #gameloop
  197.         while self.running:
  198.             self.window.update()
  199.             self.play()
  200.  
  201.             #coliding with body itself
  202.             for segment in self.snake.segments:
  203.                 if segment.distance(self.snake.master)<20:
  204.                     time.sleep(1)
  205.                     self.snake.master.goto(0,0)
  206.                     self.life-=1
  207.                     self.lifeWriter.WriteText(f'Life:{self.life}',190,260)
  208.                     self.direction = 'stop'
  209.                     for segment in self.snake.segments:
  210.                         segment.goto(1000,1000)
  211.                     self.snake.segments.clear()
  212.             time.sleep(DELAY)
  213.            
  214.         self.window.mainloop()
  215.  
  216.  
  217. if __name__=='__main__':
  218.     app =Game('Snake Game','black',600,600)
  219.     app.run()
  220.    
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement