Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import curses
- from curses import KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP
- from random import randint
- from time import sleep
- class Snake():
- def __init__(self, screen_width, screen_height):
- self.snake_ate = 0
- self.snake_life = 'alive'
- self.snake_direction = 'rigth'
- self.snake_body = [[40, 38], [40, 39], [40, 40]]
- # [y, x]
- self.screen_width = screen_width
- self.screen_height = screen_height
- def snake_walk(self, new_direction):
- snake_head = self.snake_body[len(self.snake_body) - 1]
- if self.snake_ate == 0:
- self.snake_body.pop(0)
- if new_direction == 'right':
- if snake_head[1] == self.screen_width - 1:
- self.snake_body.append([snake_head[0], 1])
- else:
- self.snake_body.append([snake_head[0], snake_head[1] + 1])
- elif new_direction == 'left':
- if snake_head[1] == 0:
- self.snake_body.append([snake_head[0], self.screen_width - 2])
- else:
- self.snake_body.append([snake_head[0], snake_head[1] - 1])
- elif new_direction == 'up':
- if snake_head[0] == 0:
- self.snake_body.append([self.screen_height - 2, snake_head[1]])
- else:
- self.snake_body.append([snake_head[0] - 1, snake_head[1]])
- elif new_direction == 'down':
- if snake_head[0] == self.screen_height - 1:
- self.snake_body.append([1, snake_head[1]])
- else:
- self.snake_body.append([snake_head[0] + 1, snake_head[1]])
- self.snake_ate = 0
- def is_snake_dead(self):
- body = self.snake_body
- if body[len(body) - 1] in body[:len(body) - 2]:
- self.snake_life = 'dead'
- def did_snake_ate(self, food):
- if self.snake_body[len(self.snake_body) - 1] in food:
- self.snake_ate = 1
- class Food():
- def __init__(self, screen_width, screen_height):
- self.screen_width = screen_width
- self.screen_height = screen_height
- self.x_coord = 20
- self.y_coord = 20
- def generate_new_food(self):
- self.x_coord = randint(1, self.screen_height - 2)
- self.y_coord = randint(1, self.screen_width - 2)
- class Screen():
- def __init__(self, std_scr):
- # Use the curses.wrapper to initialize this screen
- # Settin up screen settings
- self.screen = std_scr
- self.screen.border()
- self.screen.nodelay(1)
- self.screen.keypad(1)
- # Defining the keyboard settings
- self.keyboard_input = KEY_RIGHT
- self.previous_input = KEY_RIGHT
- self.valid_inputs = [KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP, ord('q'), -1]
- self.not_valid_new_inputs = {KEY_RIGHT: KEY_LEFT, KEY_LEFT: KEY_RIGHT, KEY_UP: KEY_DOWN, KEY_DOWN: KEY_UP}
- # Setting up curses settings
- curses.curs_set(0)
- curses.noecho()
- y, x = self.screen.getmaxyx()
- self.scr_width = x
- self.scr_height = y
- # Initializing objects
- self.snake = Snake(self.scr_width, self.scr_height)
- self.food = Food(self.scr_width, self.scr_height)
- def bootstrap(self):
- while self.keyboard_input != ord('q'):
- self.get_key()
- self.draw_snake()
- self.draw_food()
- self.snake.snake_walk(self.keyboard_input)
- def draw_snake(self):
- for i in self.snake.snake_body:
- self.screen.addch(i[0], i[1], "@")
- self.screen.refresh()
- def draw_food(self):
- self.screen.addch(self.food.y_coord, self.food.x_coord, "&")
- self.screen.refresh()
- def get_key(self):
- keyboard_input = self.screen.getch()
- try:
- if keyboard_input == -1:
- pass
- elif keyboard_input in self.valid_inputs:
- self.previous_input = self.keyboard_input
- self.keyboard_input = keyboard_input
- elif keyboard_input != self.not_valid_new_inputs[int(keyboard_input)]:
- self.keyboard_input = self.previous_input
- except KeyError:
- self.keyboard_input = self.previous_input
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement