diff --git a/part2_OOP/lesson6/app.py b/part2_OOP/lesson6/app.py index ed8e376..bfda7e5 100644 --- a/part2_OOP/lesson6/app.py +++ b/part2_OOP/lesson6/app.py @@ -1,4 +1,9 @@ -from snake import game +from snake.game import Game if __name__ == "__main__": + game = Game() + game.game_init() + game.set_title() + game.get_menu() game.mainloop() + diff --git a/part2_OOP/lesson6/snake/config.py b/part2_OOP/lesson6/snake/config.py deleted file mode 100644 index 16a5d8e..0000000 --- a/part2_OOP/lesson6/snake/config.py +++ /dev/null @@ -1,7 +0,0 @@ -class GameConfig: - pass - - -class SnakeConfig: - pass - diff --git a/part2_OOP/lesson6/snake/game.py b/part2_OOP/lesson6/snake/game.py index 1037af7..9eb5e64 100644 --- a/part2_OOP/lesson6/snake/game.py +++ b/part2_OOP/lesson6/snake/game.py @@ -1,8 +1,8 @@ import os import time -from random import choice import pygame as pg +from pygame.key import name import pygame_menu as pgm from .snake import Snake @@ -17,6 +17,7 @@ class Game: self.font = pg.font.SysFont('arial', 72) self.score = 0 self.paused = True + self.started = False self.title = 'Snakessss' self.done = False # Флаг главного цикла self.need_reset = False @@ -25,6 +26,8 @@ class Game: self.fps = 60 self.set_title() self.menu = None + self.snake = Snake() + self.foods_array = [] def game_init(self): pg.init() @@ -33,13 +36,19 @@ class Game: self.set_bg() self.menu = pgm.Menu('Snakessss game', 400, 300, theme=pgm.pygame_menu.themes.THEME_DARK) self.menu.add.button('Start new game', self.start_new_game) - self.menu.add.button('Restore game', self.restore_game) + if self.started: + self.menu.add.button('Restore game', self.restore_game) + self.menu.add.selector('Speed', [('Slow', 40), ('Medium', 25), ('Fast', 10)], onchange=self.set_speed) self.menu.add.button('Exit', pgm.pygame_menu.events.EXIT) self.menu.mainloop(self.screen) def disable_menu(self): self.menu.disable() + def set_speed(self, value, difficulty): + self.snake.speed = difficulty + + def set_title(self): pg.display.set_caption(self.title) @@ -47,6 +56,7 @@ class Game: self.screen.blit(self.bg, (0, 0)) def start_new_game(self): + self.started = True self.paused = False self.disable_menu() self.need_reset = True @@ -70,65 +80,68 @@ class Game: time.sleep(3) self.get_menu() + + def update_game_window(self): + while len(self.foods_array) < 2: + food = Food() + if food.get_coords() not in self.snake.get_coords(): + self.foods_array.append(food) + for f in self.foods_array: + if self.snake.get_head_coords() == f.get_coords(): + self.foods_array.remove(f) + self.snake.length += 1 + + self.set_bg() + self.snake.draw(self.screen) + for f in self.foods_array: + f.draw(self.screen) + + pg.display.update() + + + if self.snake.impacted: + self.gameover() + self.started = False + -def mainloop(): + def mainloop(self): + while not self.done: + if self.need_reset: + self.snake.reset() + self.start_new_game() + self.need_reset = False + + for event in pg.event.get(): + if event.type == pg.QUIT: + self.done = True + pressed = pg.key.get_pressed() + if pressed[pg.K_ESCAPE]: + self.paused = False if self.paused else True + if self.paused: + self.get_menu() + + if pressed[pg.K_UP]: + if self.snake.direction != 'down': + self.snake.direction = 'up' + if pressed[pg.K_DOWN]: + if self.snake.direction != 'up': + self.snake.direction = 'down' + if pressed[pg.K_LEFT]: + if self.snake.direction != 'right': + self.snake.direction = 'left' + if pressed[pg.K_RIGHT]: + if self.snake.direction != 'left': + self.snake.direction = 'right' + + self.update_game_window() + + self.clock.tick(self.fps) + +if __name__ == "__main__": game = Game() game.game_init() game.set_title() game.get_menu() - snake =Snake() - foods_array = [] - - def update_game_window(): - while len(foods_array) < 2: - food = Food() - if food.get_coords() not in snake.get_coords(): - foods_array.append(food) - - for f in foods_array: - if snake.get_head_coords() == f.get_coords(): - foods_array.remove(f) - snake.length += 1 - - game.set_bg() - snake.draw(game.screen) - for f in foods_array: - f.draw(game.screen) - - pg.display.update() - - if snake.impacted: - game.gameover() - - while not game.done: - if game.need_reset: - snake.reset() - game.start_new_game() - game.need_reset = False - - for event in pg.event.get(): - if event.type == pg.QUIT: - game.done = True - pressed = pg.key.get_pressed() - if pressed[pg.K_ESCAPE]: - game.paused = False if game.paused else True - if game.paused: - game.get_menu() - - if pressed[pg.K_UP]: - if snake.direction != 'down': - snake.direction = 'up' - if pressed[pg.K_DOWN]: - if snake.direction != 'up': - snake.direction = 'down' - if pressed[pg.K_LEFT]: - if snake.direction != 'right': - snake.direction = 'left' - if pressed[pg.K_RIGHT]: - if snake.direction != 'left': - snake.direction = 'right' - - update_game_window() - - game.clock.tick(game.fps) + game.mainloop() +