70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
from turtle import Screen, Turtle
|
|
from snake import Snake
|
|
from food import Food
|
|
import time
|
|
|
|
class GameManager:
|
|
|
|
BOARD_WIDTH=600
|
|
BOARD_HEIGHT=600
|
|
|
|
def __init__(self):
|
|
self.screen = Screen()
|
|
|
|
self.screen.setup(width=self.BOARD_WIDTH, height=self.BOARD_HEIGHT)
|
|
self.screen.bgcolor("black")
|
|
self.screen.title("Snake game")
|
|
self.screen.tracer(0)
|
|
self.snake = Snake()
|
|
self.screen.update()
|
|
|
|
self.food_on_screen = False
|
|
|
|
self.game_on = True
|
|
|
|
def control_snake(self):
|
|
self.screen.listen()
|
|
self.screen.onkey(self.snake.up, "Up")
|
|
self.screen.onkey(self.snake.right, "Right")
|
|
self.screen.onkey(self.snake.down, "Down")
|
|
self.screen.onkey(self.snake.left, "Left")
|
|
self.snake.move()
|
|
self.screen.update()
|
|
|
|
def check_collision(self):
|
|
x, y = self.snake.get_head_position()
|
|
wall_collision = x >= self.BOARD_WIDTH/2 or x <= -self.BOARD_WIDTH/2 or y >= self.BOARD_HEIGHT/2 or y <= -self.BOARD_HEIGHT/2
|
|
snake_collision = self.snake.tailbite()
|
|
|
|
return wall_collision or snake_collision
|
|
|
|
def is_food_eaten(self):
|
|
snake_head = self.snake.get_head()
|
|
|
|
if snake_head.distance(self.food) <= 15:
|
|
self.food.hide()
|
|
self.snake.extend()
|
|
self.food_on_screen = False
|
|
|
|
def game_round(self):
|
|
if not self.food_on_screen:
|
|
self.food = Food(self.BOARD_WIDTH, self.BOARD_HEIGHT)
|
|
self.food_on_screen = True
|
|
|
|
self.control_snake()
|
|
if self.check_collision():
|
|
self.game_on = False
|
|
self.game_over()
|
|
|
|
self.is_food_eaten()
|
|
time.sleep(0.1)
|
|
|
|
def get_screen(self):
|
|
return self.screen
|
|
|
|
def game_over(self):
|
|
turtle = Turtle()
|
|
turtle.color("yellow")
|
|
turtle.write("Game over!", move=False, align='center', font=('Arial', 32, 'normal'))
|
|
|