Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. from enum import Enum
  2.  
  3. import pygame
  4. from pygame.math import Vector2
  5.  
  6. import random
  7.  
  8.  
  9. class SnakeMove(Enum):
  10. UP = Vector2(0, -10)
  11. DOWN = Vector2(0, 10)
  12. LEFT = Vector2(-10, 0)
  13. RIGHT = Vector2(10, 0)
  14.  
  15.  
  16. class Snake:
  17. def __init__(self):
  18. self.position_list = [Vector2(200, 200)]
  19. self.snake_size = 10
  20. self.next_move = SnakeMove.UP
  21. self.snake_color = (0, 0, 0)
  22. self.stop_game = False
  23. self.add_snake = False
  24.  
  25. def move(self, game_display):
  26. self.set_next_pos()
  27. print(f'current pos {self.position_list[0].x}:{self.position_list[0].y}')
  28. pygame.draw.rect(game_display, self.snake_color,
  29. (self.position_list[0].x, self.position_list[0].y,
  30. self.snake_size, self.snake_size,))
  31.  
  32. def set_next_pos(self):
  33. position = Vector2(self.position_list[0].x, self.position_list[0].y)
  34. if self.next_move == SnakeMove.UP:
  35. position += SnakeMove.UP.value
  36. if self.next_move == SnakeMove.DOWN:
  37. position += SnakeMove.DOWN.value
  38. if self.next_move == SnakeMove.LEFT:
  39. position += SnakeMove.LEFT.value
  40. if self.next_move == SnakeMove.RIGHT:
  41. position += SnakeMove.RIGHT.value
  42. if position in self.position_list:
  43. self.stop_game = True
  44. print(f'game over!')
  45. if self.add_snake:
  46. self.position_list = [position] + [self.position_list[0]] + self.position_list
  47. self.add_snake = False
  48. else:
  49. self.position_list = [position] + self.position_list
  50. self.position_list.pop()
  51.  
  52. def go_up(self):
  53. self.next_move = SnakeMove.UP
  54.  
  55. def go_down(self):
  56. self.next_move = SnakeMove.DOWN
  57.  
  58. def go_left(self):
  59. self.next_move = SnakeMove.LEFT
  60.  
  61. def go_right(self):
  62. self.next_move = SnakeMove.RIGHT
  63.  
  64.  
  65. class Game:
  66. def __init__(self):
  67. pygame.init()
  68. self.stop_game = False
  69. self.bg_color = [255, 255, 255]
  70. self.fps_number = 10
  71. self.display_width = 600
  72. self.display_height = 480
  73. self.score = 0
  74. self.game_display = pygame.display.set_mode((self.display_width, self.display_height))
  75. pygame.display.set_caption('Snake_Game')
  76. self.clock = pygame.time.Clock()
  77. self.snake = Snake()
  78. self.food = Food(self.snake)
  79.  
  80. def handle_keyboard_input(self):
  81. for event in pygame.event.get():
  82. if event.type == pygame.KEYDOWN:
  83. if event.type == pygame.QUIT:
  84. self.stop_game = True
  85. if event.key == pygame.K_LEFT:
  86. self.snake.go_left()
  87. if event.key == pygame.K_RIGHT:
  88. self.snake.go_right()
  89. if event.key == pygame.K_UP:
  90. self.snake.go_up()
  91. if event.key == pygame.K_DOWN:
  92. self.snake.go_down()
  93. if event.key == pygame.K_ESCAPE:
  94. self.stop_game = True
  95.  
  96. def play(self):
  97. while not self.stop_game:
  98. self.game_display.fill(self.bg_color)
  99. self.handle_keyboard_input()
  100. self.snake.move(self.game_display)
  101. self.clock.tick(self.fps_number)
  102. self.food.eating_food()
  103. self.food.printing_food(self.game_display)
  104. self.display_score(self.game_display)
  105. pygame.display.update()
  106. self.game_over()
  107.  
  108. def game_over(self):
  109. if self.snake.position_list[0].x >= self.display_width\
  110. or self.snake.position_list[0].y >= self.display_height\
  111. or self.snake.position_list[0].x >= self.snake.position_list[0].x*3.2\
  112. or self.snake.position_list[0].y >= self.snake.position_list[0].y*2.4:
  113. self.stop_game = True
  114. print("Game Over!")
  115. else:
  116. pass
  117.  
  118. def display_score(self, game_display):
  119. font = pygame.font.SysFont("arial", 15)
  120. text = font.render(f"Score: {self.food.score}", True, (135, 135, 205))
  121. self.game_display.blit(text, (10, 10))
  122.  
  123.  
  124. class Food:
  125. def __init__(self, snake):
  126. self.x_food = 10 * (random.randint(0, 600 / 10) - 1) # food every 10px: 110x120, 130x150
  127. self.y_food = 10 * (random.randint(0, 480 / 10) - 1)
  128. self.eaten_food = False
  129. self.snake = snake
  130. self.score = 0
  131. self.snake.add_snake = False
  132.  
  133. def printing_food(self, display):
  134. pygame.draw.rect(display, (0, 0, 255), (self.x_food, self.y_food, 10, 10), 0)
  135.  
  136. def eating_food(self):
  137. if self.x_food == self.snake.position_list[0].x and self.y_food == self.snake.position_list[0].y: # checking position
  138. self.eaten_food = True
  139. self.score += 1 # counting points
  140. self.snake.add_snake = True
  141. print(self.score)
  142. self.x_food = 10 * (random.randint(0, 600 / 10) - 1)
  143. self.y_food = 10 * (random.randint(0, 480 / 10) - 1)
  144.  
  145.  
  146. Game().play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement