Advertisement
Gartunius

SnakeGameClasses

Feb 20th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.63 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import curses
  4.  
  5. from curses import KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP
  6. from random import randint
  7. from time import sleep
  8.  
  9.  
  10. class Snake():
  11.  
  12.     def __init__(self, screen_width, screen_height):
  13.         self.snake_ate = 0
  14.         self.snake_life = 'alive'
  15.         self.snake_direction = 'rigth'
  16.         self.snake_body = [[40, 38], [40, 39], [40, 40]]
  17.         # [y, x]
  18.  
  19.         self.screen_width = screen_width
  20.         self.screen_height = screen_height
  21.  
  22.     def snake_walk(self, new_direction):
  23.         snake_head = self.snake_body[len(self.snake_body) - 1]
  24.  
  25.         if self.snake_ate == 0:
  26.             self.snake_body.pop(0)
  27.  
  28.         if new_direction == 'right':
  29.  
  30.             if snake_head[1] == self.screen_width - 1:
  31.                 self.snake_body.append([snake_head[0], 1])
  32.             else:
  33.                 self.snake_body.append([snake_head[0], snake_head[1] + 1])
  34.  
  35.         elif new_direction == 'left':
  36.  
  37.             if snake_head[1] == 0:
  38.                 self.snake_body.append([snake_head[0], self.screen_width - 2])
  39.             else:
  40.                 self.snake_body.append([snake_head[0], snake_head[1] - 1])
  41.  
  42.         elif new_direction == 'up':
  43.  
  44.             if snake_head[0] == 0:
  45.                 self.snake_body.append([self.screen_height - 2, snake_head[1]])
  46.             else:
  47.                 self.snake_body.append([snake_head[0] - 1, snake_head[1]])
  48.  
  49.         elif new_direction == 'down':
  50.  
  51.             if snake_head[0] == self.screen_height - 1:
  52.                 self.snake_body.append([1, snake_head[1]])
  53.             else:
  54.                 self.snake_body.append([snake_head[0] + 1, snake_head[1]])
  55.  
  56.         self.snake_ate = 0
  57.  
  58.     def is_snake_dead(self):
  59.         body = self.snake_body
  60.         if body[len(body) - 1] in body[:len(body) - 2]:
  61.             self.snake_life = 'dead'
  62.  
  63.     def did_snake_ate(self, food):
  64.         if self.snake_body[len(self.snake_body) - 1] in food:
  65.             self.snake_ate = 1
  66.  
  67.  
  68.  
  69. class Food():
  70.  
  71.     def __init__(self, screen_width, screen_height):
  72.         self.screen_width = screen_width
  73.         self.screen_height = screen_height
  74.  
  75.         self.x_coord = 20
  76.         self.y_coord = 20
  77.  
  78.     def generate_new_food(self):
  79.         self.x_coord = randint(1, self.screen_height - 2)
  80.         self.y_coord = randint(1, self.screen_width - 2)
  81.  
  82.  
  83. class Screen():
  84.  
  85.     def __init__(self, std_scr):
  86.         # Use the curses.wrapper to initialize this screen
  87.  
  88.         # Settin up screen settings
  89.         self.screen = std_scr
  90.         self.screen.border()
  91.         self.screen.nodelay(1)
  92.         self.screen.keypad(1)
  93.  
  94.         # Defining the keyboard settings
  95.         self.keyboard_input = KEY_RIGHT
  96.         self.previous_input = KEY_RIGHT
  97.         self.valid_inputs = [KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP, ord('q'), -1]
  98.         self.not_valid_new_inputs = {KEY_RIGHT: KEY_LEFT, KEY_LEFT: KEY_RIGHT, KEY_UP: KEY_DOWN, KEY_DOWN: KEY_UP}
  99.  
  100.         # Setting up curses settings
  101.         curses.curs_set(0)
  102.         curses.noecho()
  103.  
  104.         y, x = self.screen.getmaxyx()
  105.         self.scr_width = x
  106.         self.scr_height = y
  107.  
  108.         # Initializing objects
  109.         self.snake = Snake(self.scr_width, self.scr_height)
  110.         self.food = Food(self.scr_width, self.scr_height)
  111.  
  112.     def bootstrap(self):
  113.  
  114.         while self.keyboard_input != ord('q'):
  115.             self.get_key()
  116.             self.draw_snake()
  117.             self.draw_food()
  118.             self.snake.snake_walk(self.keyboard_input)
  119.  
  120.     def draw_snake(self):
  121.  
  122.         for i in self.snake.snake_body:
  123.             self.screen.addch(i[0], i[1], "@")
  124.  
  125.         self.screen.refresh()
  126.  
  127.     def draw_food(self):
  128.         self.screen.addch(self.food.y_coord, self.food.x_coord, "&")
  129.  
  130.         self.screen.refresh()
  131.  
  132.     def get_key(self):
  133.         keyboard_input = self.screen.getch()
  134.  
  135.         try:
  136.             if keyboard_input == -1:
  137.                 pass
  138.             elif keyboard_input in self.valid_inputs:
  139.                 self.previous_input = self.keyboard_input
  140.                 self.keyboard_input = keyboard_input
  141.             elif keyboard_input != self.not_valid_new_inputs[int(keyboard_input)]:
  142.                 self.keyboard_input = self.previous_input
  143.         except KeyError:
  144.             self.keyboard_input = self.previous_input
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement