Advertisement
SmallBlue

Cleaner snake

Jan 28th, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.27 KB | None | 0 0
  1. import pygame, sys
  2. import random
  3.  
  4. pygame.init()
  5.  
  6. class GameState:
  7.     def __init__(self):
  8.  
  9.         self.resolution = (500,500)
  10.         self.screen = pygame.display.set_mode(self.resolution)
  11.         pygame.display.set_caption('Snake but from memory')
  12.  
  13.         self.x = 200
  14.         self.y = 200
  15.  
  16.         self.fx = 0
  17.         self.fy = 0
  18.  
  19.         self.lastkey = [(50,0)]
  20.         self.followers = 0
  21.         self.pastkeys = []
  22.  
  23.         self.body = []
  24.  
  25.         self.reset()
  26.         self.generate_fruit()
  27.  
  28.     def reset(self):
  29.         self.x = 200
  30.         self.y = 200
  31.         self.followers = 0
  32.         self.lastkey = [(50,0)]
  33.         self.pastkeys = []
  34.         self.body = []
  35.  
  36.     def generate_fruit(self):
  37.         self.fx = random.randint(0,9) * 50
  38.         self.fy = random.randint(0,9) * 50
  39.         if self.fx == self.x and self.fy == self.y:
  40.             print('Cant spawn there, snake head is occupying the space!')
  41.             self.generate_fruit()
  42.         else:
  43.             for rect in self.body:
  44.                 if rect.x == self.fx and rect.y == self.fy:
  45.                     print('Cant spawn there, snake body is occupying the space!')
  46.                     self.generate_fruit()
  47.                     break
  48.             self.fx = self.fx + 2
  49.             self.fy = self.fy + 2
  50.  
  51. def main():
  52.     gamestate = GameState()
  53.     player = pygame.draw.rect(gamestate.screen,(255,255,255),(1000,1000,50,50))
  54.     fruit = pygame.draw.rect(gamestate.screen,(255,0,0),(1000,1000,25,25))
  55.     while True:
  56.         for event in pygame.event.get():
  57.             if event.type == pygame.QUIT: sys.exit()
  58.  
  59.             if event.type==pygame.KEYDOWN:
  60.                 if event.key==pygame.K_RIGHT:
  61.                     gamestate.lastkey.append((50,0))
  62.                 elif event.key==pygame.K_LEFT:
  63.                     gamestate.lastkey.append((-50,0))
  64.                 elif event.key==pygame.K_UP:
  65.                     gamestate.lastkey.append((0,-50))
  66.                 elif event.key==pygame.K_DOWN:
  67.                     gamestate.lastkey.append((0,50))
  68.                 elif event.key==pygame.K_r:
  69.                     gamestate.generate_fruit()
  70.                 #print(lastkey)
  71.         gamestate.x = gamestate.x + gamestate.lastkey[0][0]
  72.         gamestate.y = gamestate.y + gamestate.lastkey[0][1]
  73.         #print(pastkeys)
  74.  
  75.         if len(gamestate.lastkey) > 1:
  76.             gamestate.lastkey.remove(gamestate.lastkey[0])
  77.  
  78.         if gamestate.x >= gamestate.resolution[0]:
  79.             gamestate.x = 0
  80.         elif gamestate.x < 0:
  81.             gamestate.x = gamestate.resolution[0] - 50
  82.  
  83.         if gamestate.y >= gamestate.resolution[1]:
  84.             gamestate.y = 0
  85.         elif gamestate.y < 0:
  86.             gamestate.y = gamestate.resolution[1] - 50
  87.  
  88.         gamestate.pastkeys.insert(0,(gamestate.x, gamestate.y))
  89.  
  90.  
  91.         fruit = pygame.draw.rect(gamestate.screen,(255,0,0),(gamestate.fx,gamestate.fy,25,25))
  92.  
  93.         player = pygame.draw.rect(gamestate.screen,(100,255,100),(gamestate.x,gamestate.y,30,30))
  94.  
  95.         for _ in range(gamestate.followers):
  96.             #print(_)
  97.             if _ == 0:
  98.                 continue
  99.             gamestate.body.append(pygame.draw.rect(gamestate.screen,(150,255,150),(gamestate.pastkeys[_][0],gamestate.pastkeys[_][1],30,30)))
  100.             while len(gamestate.body) > gamestate.followers - 1:
  101.                 gamestate.body.remove(gamestate.body[0])
  102.             #print(body)
  103.  
  104.  
  105.         if pygame.Rect.colliderect(player,fruit):
  106.             gamestate.generate_fruit()
  107.             if gamestate.followers == 0:
  108.                 gamestate.followers = gamestate.followers + 2
  109.             else:
  110.                 gamestate.followers = gamestate.followers + 1
  111.  
  112.         if pygame.Rect.collidelist(player,gamestate.body) > -1:
  113.             pygame.time.wait(4000)
  114.             gamestate.reset()
  115.  
  116.         pygame.display.update()
  117.         #print(x, ' ', y)
  118.         gamestate.screen.fill((0,0,0))
  119.         pygame.time.delay(250)
  120.  
  121. if __name__ == "__main__":
  122.   main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement