Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from pygame import K_RIGHT, K_LEFT, K_UP, K_DOWN, K_ESCAPE
- from random import randint
- import time, sys
- from enum import Enum
- FIELD_SIZE_X = 15
- FIELD_SIZE_Y = 5
- class Apple:
- def __init__(self):
- self.pos = (randint(0, FIELD_SIZE_X), randint(0, FIELD_SIZE_Y))
- def try_eat(self, head_node):
- return head_node[0] == self.pos[0] and head_node[1] == self.pos[1]
- class Direction(Enum):
- UP = 0
- DOWN = 1
- LEFT = 2
- RIGHT = 3
- class Snake:
- START_LEN = 3
- START_POS = (START_LEN, 3)
- def __init__(self):
- self.nodes = [[Snake.START_POS[0] - seg, Snake.START_POS[1]] for seg in range(Snake.START_LEN, 0, -1)]
- self.curr_dir = Direction.RIGHT
- self.directions = [self.move_up, self.move_down, self.move_left, self.move_right]
- def update_nodes(self):
- for node_num in range(len(self.nodes) - 1):
- self.nodes[node_num] = self.nodes[node_num + 1]
- self.directions[self.curr_dir.value]()
- print('-' * 10)
- def move_up(self): self.nodes[-1][1] -= 1
- def move_down(self): self.nodes[-1][1] += 1
- def move_right(self):
- print(self.nodes[-2])
- # self.nodes[-1] = [self.nodes[-1][0] + 1, 0]
- # self.nodes[-1][0] + 1
- self.nodes[-1][0] = 1
- self.nodes[-1][0] += 1
- print(self.nodes[-2])
- def move_left(self): self.nodes[-1][0] -= 1
- class Game:
- def __init__(self):
- self.display = Display()
- self.snake = Snake()
- self.apple = Apple()
- def start_loop(self):
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- elif event.type == pygame.KEYDOWN:
- if (event.key == pygame.K_UP or event.key == ord('w')) and self.snake.curr_dir != Direction.DOWN: self.snake.curr_dir = Direction.UP
- if (event.key == pygame.K_DOWN or event.key == ord('s')) and self.snake.curr_dir != Direction.UP: self.snake.curr_dir = Direction.DOWN
- if (event.key == pygame.K_LEFT or event.key == ord('a')) and self.snake.curr_dir != Direction.RIGHT: self.snake.curr_dir = Direction.LEFT
- if (event.key == pygame.K_RIGHT or event.key == ord('d')) and self.snake.curr_dir != Direction.LEFT: self.snake.curr_dir = Direction.RIGHT
- if event.key == pygame.K_ESCAPE:
- pygame.event.post(pygame.event.Event(pygame.QUIT))
- self.snake.update_nodes()
- self.display.update([self.snake.nodes,], [self.apple,])
- class Display:
- WINDOW_X = 1920
- WINDOW_Y = 1080
- FPS = 30
- SNAKE_SIZE = (10, 10)
- GREEN = pygame.Color(0, 255, 0)
- BLACK = pygame.Color(0, 0, 0)
- def __init__(self):
- pygame.init()
- pygame.display.set_caption("Snake View")
- self.game_window = pygame.display.set_mode((Display.WINDOW_X, Display.WINDOW_Y))
- self.fps = pygame.time.Clock()
- def update(self, snake_nodes, fruit):
- self.game_window.fill(Display.BLACK)
- for node_group in snake_nodes:
- for node in node_group:
- 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]))
- pygame.display.update()
- self.fps.tick(Display.FPS)
- if __name__ == "__main__":
- game = Game()
- game.start_loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement