Advertisement
Guest User

Untitled

a guest
Feb 26th, 2022
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. import pygame
  2. from pygame import K_RIGHT, K_LEFT, K_UP, K_DOWN, K_ESCAPE
  3.  
  4. from random import randint
  5. import time, sys
  6. from enum import Enum
  7.  
  8. FIELD_SIZE_X = 15
  9. FIELD_SIZE_Y = 5
  10.  
  11. class Apple:
  12. def __init__(self):
  13. self.pos = (randint(0, FIELD_SIZE_X), randint(0, FIELD_SIZE_Y))
  14.  
  15. def try_eat(self, head_node):
  16. return head_node[0] == self.pos[0] and head_node[1] == self.pos[1]
  17.  
  18. class Direction(Enum):
  19. UP = 0
  20. DOWN = 1
  21. LEFT = 2
  22. RIGHT = 3
  23.  
  24. class Snake:
  25. START_LEN = 3
  26. START_POS = (START_LEN, 3)
  27.  
  28. def __init__(self):
  29. self.nodes = [[Snake.START_POS[0] - seg, Snake.START_POS[1]] for seg in range(Snake.START_LEN, 0, -1)]
  30. self.curr_dir = Direction.RIGHT
  31. self.directions = [self.move_up, self.move_down, self.move_left, self.move_right]
  32.  
  33. def update_nodes(self):
  34. for node_num in range(len(self.nodes) - 1):
  35. self.nodes[node_num] = self.nodes[node_num + 1]
  36.  
  37. self.directions[self.curr_dir.value]()
  38. print('-' * 10)
  39.  
  40. def move_up(self): self.nodes[-1][1] -= 1
  41. def move_down(self): self.nodes[-1][1] += 1
  42. def move_right(self):
  43. print(self.nodes[-2])
  44.  
  45. # self.nodes[-1] = [self.nodes[-1][0] + 1, 0]
  46. # self.nodes[-1][0] + 1
  47. self.nodes[-1][0] = 1
  48. self.nodes[-1][0] += 1
  49.  
  50. print(self.nodes[-2])
  51. def move_left(self): self.nodes[-1][0] -= 1
  52.  
  53. class Game:
  54. def __init__(self):
  55. self.display = Display()
  56.  
  57. self.snake = Snake()
  58. self.apple = Apple()
  59.  
  60. def start_loop(self):
  61. while True:
  62. for event in pygame.event.get():
  63. if event.type == pygame.QUIT:
  64. pygame.quit()
  65. sys.exit()
  66. elif event.type == pygame.KEYDOWN:
  67. if (event.key == pygame.K_UP or event.key == ord('w')) and self.snake.curr_dir != Direction.DOWN: self.snake.curr_dir = Direction.UP
  68. if (event.key == pygame.K_DOWN or event.key == ord('s')) and self.snake.curr_dir != Direction.UP: self.snake.curr_dir = Direction.DOWN
  69. if (event.key == pygame.K_LEFT or event.key == ord('a')) and self.snake.curr_dir != Direction.RIGHT: self.snake.curr_dir = Direction.LEFT
  70. if (event.key == pygame.K_RIGHT or event.key == ord('d')) and self.snake.curr_dir != Direction.LEFT: self.snake.curr_dir = Direction.RIGHT
  71.  
  72. if event.key == pygame.K_ESCAPE:
  73. pygame.event.post(pygame.event.Event(pygame.QUIT))
  74.  
  75. self.snake.update_nodes()
  76. self.display.update([self.snake.nodes,], [self.apple,])
  77.  
  78. class Display:
  79. WINDOW_X = 1920
  80. WINDOW_Y = 1080
  81. FPS = 30
  82. SNAKE_SIZE = (10, 10)
  83.  
  84. GREEN = pygame.Color(0, 255, 0)
  85. BLACK = pygame.Color(0, 0, 0)
  86.  
  87. def __init__(self):
  88. pygame.init()
  89.  
  90. pygame.display.set_caption("Snake View")
  91. self.game_window = pygame.display.set_mode((Display.WINDOW_X, Display.WINDOW_Y))
  92.  
  93. self.fps = pygame.time.Clock()
  94.  
  95. def update(self, snake_nodes, fruit):
  96. self.game_window.fill(Display.BLACK)
  97.  
  98. for node_group in snake_nodes:
  99. for node in node_group:
  100. pygame.draw.rect(self.game_window, Display.GREEN, pygame.Rect((node[0] + Display.SNAKE_SIZE[0]) * 10, (node[1] + Display.SNAKE_SIZE[1]) * 10, Display.SNAKE_SIZE[0], Display.SNAKE_SIZE[1]))
  101.  
  102. pygame.display.update()
  103. self.fps.tick(Display.FPS)
  104.  
  105.  
  106. if __name__ == "__main__":
  107. game = Game()
  108. game.start_loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement