Example #1
0
def main():
    win = pygame.display.set_mode((Constants.WIDTH, Constants.WIDTH))
    pygame.display.set_caption("Snake Game")

    snake = Snake(Constants.SNAKE_COLOR)
    cookie = Cookie(snake)
    flag = True
    clock = pygame.time.Clock()  # create an object to help track time
    while flag:
        # pause the program for an amount of time
        pygame.time.delay(90)
        # clock.tick(FPS) # game will be capped at FPS fps
        snake.move()
        Utils.check_crossing(snake, cookie)
        Utils.redraw_window(win, snake, cookie)
Example #2
0
    def loop(self):
        clock = pygame.time.Clock()
        snake = Snake(self.display)
        x_change = 0
        y_change = 0

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                # Detect Arrow key movement
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x_change = -Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x_change = Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_UP:
                        x_change = 0
                        y_change = -Config['snake']['speed']
                    elif event.key == pygame.K_DOWN:
                        x_change = 0
                        y_change = Config['snake']['speed']

            # Fill background and draw game area
            self.display.fill(Config['colors']['green'])

            pygame.draw.rect(self.display, Config['colors']['black'], [
                Config['game']['bumper_size'], Config['game']['bumper_size'],
                Config['game']['height'] - Config['game']['bumper_size'] * 2,
                Config['game']['width'] - Config['game']['bumper_size'] * 2
            ])

            # Snake movement
            snake.move(x_change, y_change)
            snake.draw()

            # Text
            pygame.font.init()
            font = pygame.font.Font('./assets/Now-Regular.otf', 28)

            score_text = 'Score: {}'.format(self.score)
            score = font.render(score_text, True, Config['colors']['white'])
            title = font.render('Anaconda', True, Config['colors']['white'])

            title_rect = title.get_rect(center=(Config['game']['width'] / 2,
                                                Config['game']['bumper_size'] /
                                                2))

            score_rect = score.get_rect(
                center=(500 / 2, Config['game']['height'] -
                        Config['game']['bumper_size'] / 2))

            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()
            clock.tick(Config['game']['fps'])
Example #3
0
    def loop(self):
        clock = pygame.time.Clock()
        snake = Snake(self.display)

        x_change = 0
        y_change = 0

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x_change = -Settings['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x_change = Settings['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_UP:
                        x_change = 0
                        y_change = -Settings['snake']['speed']
                    elif event.key == pygame.K_DOWN:
                        x_change = 0
                        y_change = Settings['snake']['speed']

            self.display.fill(Settings['colors']['green'])

            pygame.draw.rect(self.display, Settings['colors']['black'], [
                Settings['game']['bumper_size'],
                Settings['game']['bumper_size'], Settings['game']['height'] -
                Settings['game']['bumper_size'] * 2,
                Settings['game']['width'] - Settings['game']['bumper_size'] * 2
            ])

            snake.move(x_change, y_change)
            snake.draw()

            pygame.font.init()
            font = pygame.font.Font('./assets/Now-Regular.otf', 28)

            score_text = 'Score: {}'.format(self.score)
            score = font.render(score_text, True, Settings['colors']['white'])
            title = font.render('Anaconda', True, Settings['colors']['white'])

            title_rect = title.get_rect(center=(Settings['game']['width'] / 2,
                                                10))

            score_rect = score.get_rect(center=(500 / 2,
                                                Settings['game']['height'] -
                                                10))

            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()
            clock.tick(Settings['game']['fps'])
Example #4
0
def main():
    display = pygame.display.set_mode(
        (Config['game']['width'], Config['game']['height']))
    pygame.display.set_caption(Config['game']['caption'])
    rl_agent = None
    if len(sys.argv) > 1 and sys.argv[1] == "-rl":
        rl_agent = DQNAgent()
        game = Game(display, rl_agent)
        apple = Apple(game.display)
        snake = Snake(game.display)
        game.rl_loop(snake, apple)
        print(game.scores)
    else:
        game = Game(display, rl_agent)
        game.loop()
Example #5
0
    def loop(self):
        clock = pygame.time.Clock()
        snake = Snake(self.display)
        apple = Apple(self.display)

        x_change = 0
        y_change = 0

        self.score = 0

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x_change = -Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x_change = Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_UP:
                        x_change = 0
                        y_change = -Config['snake']['speed']
                    elif event.key == pygame.K_DOWN:
                        x_change = 0
                        y_change = Config['snake']['speed']

            # Fill background and draw game area
            self.display.fill(Config['colors']['green'])

            pygame.draw.rect(self.display, Config['colors']['black'], [
                Config['game']['bumper_size'], Config['game']['bumper_size'],
                Config['game']['height'] - Config['game']['bumper_size'] * 2,
                Config['game']['width'] - Config['game']['bumper_size'] * 2
            ])

            # Draw an apple
            apple_rect = apple.draw()

            # Move and Re-Draw Snake
            snake.move(x_change, y_change)
            snake_rect = snake.draw()
            snake.draw_body()

            # Detect collison with wall
            bumper_x = Config['game']['width'] - Config['game']['bumper_size']
            bumper_y = Config['game']['height'] - Config['game']['bumper_size']

            if (snake.x_pos < Config['game']['bumper_size']
                    or snake.y_pos < Config['game']['bumper_size']
                    or snake.x_pos + Config['snake']['width'] > bumper_x
                    or snake.y_pos + Config['snake']['height'] > bumper_y):
                self.loop()

            # Detect collision with apple
            if apple_rect.colliderect(snake_rect):
                apple.randomize()
                self.score += 1
                snake.eat()

            # Collide with Self
            if len(snake.body) >= 1:
                for cell in snake.body:
                    if snake.x_pos == cell[0] and snake.y_pos == cell[1]:
                        self.loop()

            # Initialize font and draw title and score text
            pygame.font.init()
            font = pygame.font.Font('./assets/Now-Regular.otf', 28)

            score_text = 'Score: {}'.format(self.score)
            score = font.render(score_text, True, Config['colors']['white'])
            title = font.render('Anaconda', True, Config['colors']['white'])

            title_rect = title.get_rect(center=(Config['game']['width'] / 2,
                                                Config['game']['bumper_size'] /
                                                2))

            score_rect = score.get_rect(
                center=(500 / 2, Config['game']['height'] -
                        Config['game']['bumper_size'] / 2))

            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()
            clock.tick(Config['game']['fps'])
Example #6
0
    def loop(self):
        clock = pygame.time.Clock()
        self.score = 0
        apple = Apple(self.display)
        snake = Snake(self.display)
        x_change = 0
        y_change = 0
        while True:
            # This code below will be called for each frame
            # Iterate through our user input events
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x_change = -Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x_change = Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_UP:
                        x_change = 0
                        y_change = -Config['snake']['speed']
                    elif event.key == pygame.K_DOWN:
                        x_change = 0
                        y_change = Config['snake']['speed']

            self.display.fill(Config['colors']['green'])

            pygame.draw.rect(
                self.display,
                Config['colors']['black'],
                [
                    Config['game']['bumper_size'],
                    Config['game']['bumper_size'],
                    Config['game']['width'] - Config['game']['bumper_size']*2,
                    Config['game']['height'] - Config['game']['bumper_size']*2
                ]
            )

            apple_rect = apple.draw()
            snake.move(x_change, y_change)
            snake_rect = snake.draw()
            snake.draw_body()

            #Eating an apple
            if apple_rect.colliderect(snake_rect):
                apple.randomize()
                snake.eat()
                self.score += 1

            # Handling collision
            bumper_x = Config['game']['width'] - Config['game']['bumper_size']
            bumper_y = Config['game']['height'] - Config['game']['bumper_size']

            if (
                snake.x_pos < Config['game']['bumper_size'] or
                snake.y_pos < Config['game']['bumper_size'] or
                snake.x_pos + Config['snake']['width'] > bumper_x or
                snake.y_pos + Config['snake']['height'] > bumper_y or
                (snake.x_pos, snake.y_pos) in snake.body
            ):
                new_display = pygame.display.set_mode((Config['game']['width'], Config['game']['height']))
                pygame.display.set_caption(Config['game']['caption'])
                new_game = Game(new_display, self.rl_agent)
                new_game.loop()


            ## Handling score and title
            pygame.font.init()
            font = pygame.font.Font('./assets/Now-Regular.otf', 28)
            score_text = 'Score: {}'.format(self.score)
            score = font.render(score_text, True, Config['colors']['white'])
            title = font.render('Anaconda', True, Config['colors']['white'])

            title_rect = title.get_rect(
                center=(
                    Config['game']['width'] / 2,
                    Config['game']['bumper_size'] / 2
                )
            )

            score_rect = score.get_rect(
                center=(
                    Config['game']['width'] / 2,
                    Config['game']['height'] - Config['game']['bumper_size'] / 2
                )
            )

            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()
            #Slows the loop iteration rate down to the rate of the game.
            #It accepts a number of ticks per second, so we have set our game timer to 30 frames per second.
            clock.tick(Config['game']['fps'])
Example #7
0
    def loop(self):
        clock = pygame.time.Clock()  #get time (initializing time)
        apple = Apple(self.display)
        snake = Snake(self.display)
        x_change = 0
        y_change = 0
        self.score = 0
        while True:
            #pygame.event.get() returns all the events in queue
            #so we are iterating such events in queue
            for event in pygame.event.get():  #user input events
                if event.type == pygame.QUIT:  #type such as mouse,keyboard,exit the application
                    exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        self.pause = True
                        self.paused(Config['game']['width'] / 2,
                                    Config['game']['height'] / 4,
                                    Config['game']['width'] * 0.25,
                                    Config['game']['height'] * 0.1,
                                    Config['colors']['white'])
                        #print("Came out of pause")
                    if event.key == pygame.K_LEFT:
                        x_change = -Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x_change = Config['snake']['speed']
                        y_change = 0
                    elif event.key == pygame.K_UP:
                        y_change = -Config['snake']['speed']
                        x_change = 0
                    elif event.key == pygame.K_DOWN:
                        y_change = Config['snake']['speed']
                        x_change = 0

            self.display.fill(Config['colors']['brown'])  #wipe old position
            pygame.draw.rect(self.display, Config['colors']['black'], [
                Config['game']['bumper_size'], Config['game']['bumper_size'],
                Config['game']['height'] - Config['game']['bumper_size'] * 2,
                Config['game']['width'] - Config['game']['bumper_size'] * 2
            ])
            apple_rect = apple.draw()
            snake.move(x_change, y_change)
            snake_rect = snake.draw()  #
            bumper_x = Config['game']['width'] - Config['game']['bumper_size']
            bumper_y = Config['game']['height'] - Config['game']['bumper_size']
            if (snake.x_pos < 30 or snake.y_pos < 30
                    or snake.x_pos + Config['snake']['width'] > bumper_x
                    or snake.y_pos + Config['snake']['height'] > bumper_y):
                self.end_screen(self.score)
            if apple_rect.colliderect(
                    snake_rect
            ):  #pygame colliderect checks if two rectangles overlap
                apple.randomize()
                snake.eat()
                self.score += 1
            if len(snake.body) >= 1:
                for cell in snake.body:
                    if snake.x_pos == cell[0] and snake.y_pos == cell[1]:
                        self.end_screen(self.score)

            pygame.font.init()
            font = pygame.font.Font('./assets/Now-Regular.otf',
                                    28)  #load font from assets #font in object

            score_text = 'Score: {} '.format(self.score)
            score = font.render(score_text, True, Config['colors']['white'])
            title = font.render('Bite-Bite', True, Config['colors']['white'])
            #render is method of font (accepts the input string,boolean value (for anti aliasing),RGB value)

            title_rect = title.get_rect(center=(
                Config['game']['width'] / 2,  #width of box
                Config['game']['bumper_size'] / 2  #height of box
            ))

            score_rect = score.get_rect(
                center=(Config['game']['width'] / 2, Config['game']['height'] -
                        Config['game']['bumper_size'] / 2))
            #get_rect gives the bounding box size around the text
            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()
            clock.tick(Config['game']
                       ['fps'])  #to slow time rate (30 frames per second)
def test_empty_snake_has_zero_length():
    snake = Snake(X_POSITION_VALUE, Y_POSITION_VALUE)
    assert snake.length == 0
Example #9
0
    def loop(self):
        # This is class that will help us
        # to track amount of time or to manage framerate.
        clock = pygame.time.Clock()

        flag = False

        # Fonts.
        # pygame.font.init()
        font = pygame.font.Font('assets/Now-Regular.otf', 28)

        # Game name.
        title = font.render('Anaconda', True, Config['colors']['white'])
        # Gives the bounding box size around text.
        title_rect = title.get_rect(center=(Config['game']['width'] / 2,
                                            Config['game']['bumper_size'] / 2))

        # Background music.
        pygame.mixer.music.load('assets/S47-85_Mantis_Lords.wav')
        pygame.mixer.music.play(-1)
        # A music of eating apple.
        eat_apple = pygame.mixer.Sound('assets/crunch.wav')

        # Our snake.
        snake = Snake(self.display)
        dx = 0
        dy = 0
        self.score = 0

        # Apples.
        apple = Apple(self.display)

        while True:
            # This empties the event queue. Gives us our user input events.
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()

                # Checks if the key is one of the four commanding keys.
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT and dx != Config['snake'][
                            'speed']:
                        dx = -Config['snake']['speed']
                        dy = 0
                    elif event.key == pygame.K_RIGHT and dx != -Config[
                            'snake']['speed']:
                        dx = Config['snake']['speed']
                        dy = 0
                    elif event.key == pygame.K_UP and dy != Config['snake'][
                            'speed']:
                        dx = 0
                        dy = -Config['snake']['speed']
                    elif event.key == pygame.K_DOWN and dy != -Config['snake'][
                            'speed']:
                        dx = 0
                        dy = Config['snake']['speed']

                print(event)

            # Fills the entire screen with the green color
            # and than places black "background".
            # self.display.fill(Config['colors']['green'])

            pygame.draw.rect(
                self.display,
                Config['colors']['black'],
                [
                    # Config['game']['bumper_size'],
                    # Config['game']['bumper_size'],
                    # Config['game']['height'] - Config['game']['bumper_size'] * 2,
                    # Config['game']['width'] - Config['game']['bumper_size'] * 2
                    0,
                    0,
                    Config['game']['height'],
                    Config['game']['width']
                ])

            # Moves our snake.
            snake.move(dx, dy)
            snake_rect = snake.draw()
            apple_rect = apple.draw()

            # Collisions with the wall.
            # bumper_x = Config['game']['width'] - Config['game']['bumper_size']
            # bumper_y = Config['game']['height'] - Config['game']['bumper_size']
            # speed = Config['snake']['speed']
            #
            # if (
            #     snake.x_pos < Config['game']['bumper_size'] or
            #     snake.y_pos < Config['game']['bumper_size'] or
            #     snake.x_pos + Config['snake']['width'] > bumper_x or
            #     snake.y_pos + Config['snake']['height'] > bumper_y
            # ):
            #     flag = True

            # Checks collisions with apple.
            if apple_rect.colliderect(snake_rect):
                apple.randomize()
                self.score += 1
                snake.eat(eat_apple)

            # Checks collisions with itself.
            if len(snake.body) > 1:
                for cell in snake.body:
                    if snake.x_pos == cell[0] and snake.y_pos == cell[1]:
                        self.loop()

            # Adds score.
            score_text = 'Score: {}'.format(self.score)
            score = font.render(score_text, True, Config['colors']['white'])

            score_rect = score.get_rect(
                center=(Config['game']['width'] / 2, Config['game']['height'] -
                        Config['game']['bumper_size'] / 2))

            self.display.blit(score, score_rect)
            self.display.blit(title, title_rect)

            pygame.display.update()

            if flag:
                self.loop()

            # Tracks how many frames we have rendered.
            # Uses pygame.time.delay, so it's very precise
            clock.tick_busy_loop(Config['game']['fps'])