Пример #1
0
class SnakeGame:
    # constructor
    def __init__(self, width, height, secs, border):
        self.width = width
        self.height = height
        self.secs = secs

        self.playing = True
        self.reseting = False
        self.border = border

        self.buildGrid()

        self.move = Move()

        self.snake = Snake(width, height, border)
        self.food = Food(width, height, self.snake)
        self.score = 0

    def play(self):
        while self.playing:
            self.reseting = False

            while self.playing and not self.isMoving():
                time.sleep(self.secs)

            while self.playing and self.isMoving():
                time.sleep(self.secs)
                self.moveSnake()

            while self.playing and not self.reseting:
                time.sleep(self.secs)
        print("stop playing")

    def stop(self):
        self.playing = False

    def reset(self):
        self.move = Move()
        time.sleep(self.secs)

        self.buildGrid()

        self.move = Move()
        self.snake = Snake(self.width, self.height, self.border)
        self.food = Food(self.width, self.height, self.snake)
        self.score = 0

        self.reseting = True

    def isMoving(self):
        return self.move.isMoving()

    # return len of snake body
    def lenOfSnake(self):
        return self.snake.lenOfBody()

    # build grid for game
    def buildGrid(self):
        addBorder = 0
        if self.border:
            addBorder = 2
        self.grid = [[]] * (self.height + addBorder)
        for line in range(self.height + addBorder):
            self.grid[line] = [0] * (self.width + addBorder)

        if self.border:
            self.buildGridBorder()

    # build grid border
    def buildGridBorder(self):
        for line in range(self.height + 2):
            for column in range(self.width + 2):
                if line == 0 or line == self.height + 1 or column == 0 or column == self.width + 1:
                    self.grid[line][column] = -1

    def changeMoveOfSnake(self, newMove):
        turnBack = self.snake.lenOfBody() == 1
        self.move.changeMove(newMove, turnBack)

    # move snake
    def moveSnake(self):
        movement = self.move.getMove()

        if self.snake.move(movement):
            head = self.snake.head()
            scoreFood = self.food.eatFood(head[0], head[1])
            if scoreFood > 0:
                self.score += 1
                self.snake.addPArt(movement, scoreFood)

            return True

        self.move.stop()
        return False