add menu
This commit is contained in:
@@ -11,8 +11,8 @@ class Food:
|
||||
)
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.x = random.randint(0, 26) * 30
|
||||
self.y = random.randint(0, 20) * 30
|
||||
self.x = random.randint(0, 25) * 30
|
||||
self.y = random.randint(0, 19) * 30
|
||||
self.type = random.choice(self.FOOD)
|
||||
|
||||
|
||||
|
@@ -3,6 +3,7 @@ import time
|
||||
from random import choice
|
||||
|
||||
import pygame as pg
|
||||
import pygame_menu as pgm
|
||||
|
||||
from .snake import Snake
|
||||
from .food import Food
|
||||
@@ -13,39 +14,72 @@ class Game:
|
||||
self.screen_hight = 600
|
||||
self.clock = pg.time.Clock()
|
||||
pg.font.init()
|
||||
self.font = pg.font.SysFont(choice(pg.font.get_fonts()), 72)
|
||||
self.font = pg.font.SysFont('arial', 72)
|
||||
self.score = 0
|
||||
|
||||
self.paused = True
|
||||
self.title = 'Snakessss'
|
||||
self.done = False
|
||||
self.done = False # Флаг главного цикла
|
||||
self.need_reset = False
|
||||
self.bg = pg.image.load(os.path.join(os.curdir, 'snake', 'img', 'bg.png'))
|
||||
self.screen = pg.display.set_mode((self.screen_widht, self.screen_hight))
|
||||
self.fps = 60
|
||||
|
||||
self.set_title()
|
||||
self.menu = None
|
||||
|
||||
def game_init(self):
|
||||
pg.init()
|
||||
|
||||
def get_menu(self):
|
||||
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)
|
||||
self.menu.add.button('Exit', pgm.pygame_menu.events.EXIT)
|
||||
self.menu.mainloop(self.screen)
|
||||
|
||||
def disable_menu(self):
|
||||
self.menu.disable()
|
||||
|
||||
def set_title(self):
|
||||
pg.display.set_caption(self.title)
|
||||
|
||||
def set_bg(self):
|
||||
self.screen.blit(self.bg, (0, 0))
|
||||
|
||||
def start_new_game(self):
|
||||
self.paused = False
|
||||
self.disable_menu()
|
||||
self.need_reset = True
|
||||
|
||||
def restore_game(self):
|
||||
self.disable_menu()
|
||||
self.paused = False
|
||||
|
||||
def save_game(self):
|
||||
pass
|
||||
|
||||
def load_game(self):
|
||||
pass
|
||||
|
||||
def gameover(self):
|
||||
self.done = True
|
||||
surf = self.font.render('Game over', True, (20, 20, 20))
|
||||
rect = surf.get_rect()
|
||||
rect.midtop = (390, 250)
|
||||
self.screen.blit(surf, rect)
|
||||
pg.display.flip()
|
||||
time.sleep(5)
|
||||
pg.quit()
|
||||
time.sleep(3)
|
||||
|
||||
self.get_menu()
|
||||
|
||||
|
||||
def mainloop():
|
||||
game = Game()
|
||||
snake =Snake(90, 300)
|
||||
game.game_init()
|
||||
game.set_title()
|
||||
game.get_menu()
|
||||
snake =Snake()
|
||||
foods_array = []
|
||||
|
||||
def update_game_window():
|
||||
while len(foods_array) < 2:
|
||||
food = Food()
|
||||
@@ -68,10 +102,20 @@ def mainloop():
|
||||
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'
|
||||
@@ -83,7 +127,8 @@ def mainloop():
|
||||
snake.direction = 'left'
|
||||
if pressed[pg.K_RIGHT]:
|
||||
if snake.direction != 'left':
|
||||
snake.direction = 'right'
|
||||
|
||||
snake.direction = 'right'
|
||||
|
||||
update_game_window()
|
||||
|
||||
game.clock.tick(game.fps)
|
||||
|
@@ -4,9 +4,9 @@ import pygame as pg
|
||||
|
||||
|
||||
class Snake:
|
||||
def __init__(self, x, y) -> None:
|
||||
self.x = x
|
||||
self.y = y
|
||||
def __init__(self, **kwargs) -> None:
|
||||
self.x = kwargs.get('x', 90)
|
||||
self.y = kwargs.get('y', 300)
|
||||
self.snake_head = {
|
||||
'left': pg.image.load(os.path.join(os.curdir, 'snake', 'img', 'snake_left.png')),
|
||||
'right': pg.image.load(os.path.join(os.curdir, 'snake', 'img', 'snake_right.png')),
|
||||
@@ -24,11 +24,21 @@ class Snake:
|
||||
|
||||
self.direction = 'right'
|
||||
self.direction_prev = 'right'
|
||||
self.length = 2
|
||||
self.speed = 10 # скорость движения змейки чем меньше, тем быстрее
|
||||
self.length = 10
|
||||
self.speed = 40 # скорость движения змейки чем меньше, тем быстрее
|
||||
self.counter = 0 # Просто счетчик, для регулировки скорости нужен
|
||||
self.body = [('h', 60, 300), ('h', 30, 300)]
|
||||
self.body = kwargs.get('body', [('h', 60, 300), ('h', 30, 300)])
|
||||
self.impacted = False
|
||||
|
||||
def reset(self):
|
||||
self.x = 90
|
||||
self.y = 300
|
||||
self.body = [('h', 60, 300), ('h', 30, 300)]
|
||||
self.direction = 'right'
|
||||
self.direction_prev = 'right'
|
||||
self.impacted = False
|
||||
self.length = 2
|
||||
self.speed = 40
|
||||
|
||||
def get_head_coords(self):
|
||||
return self.x, self.y
|
||||
|
Reference in New Issue
Block a user