Exemple #1
0
def move_head(direction):
    global head, tail, head_x, head_y, facing, opposite, snake_head_img

    if direction == opposite:
        direction = head['facing']

    if facing != direction:
        snake_head_img = orientate_snake(snake_head_img, head, direction.value)

    if direction == Directions.UP:
        head['rect'].top -= SEG_DIM
        head['facing'] = Directions.UP
        opposite = Directions.get_opposite(direction)

    elif direction == Directions.RIGHT:
        head['rect'].left += SEG_DIM
        head['facing'] = Directions.RIGHT
        opposite = Directions.get_opposite(direction)

    elif direction == Directions.DOWN:
        head['rect'].top += SEG_DIM
        head['facing'] = Directions.DOWN
        opposite = Directions.get_opposite(direction)

    elif direction == Directions.LEFT:
        head['rect'].left -= SEG_DIM
        head['facing'] = Directions.LEFT
        opposite = Directions.get_opposite(direction)
    def act(self, state):
        head_pos = state[0]
        apple_pos = state[1]
        step_size = state[2]
        facing = state[3]
        tail = state[4]

        shortest = None
        action = action_space[0]
        for i in range(0, len(action_space)):
            if Directions.get_opposite(facing) == directions[i]:
                continue
            direction = directions[i]
            opposite = Directions.get_opposite(direction)
            x, y = self.pred_position(head_pos.left, head_pos.top, direction,
                                      opposite, step_size)
            if not self.will_avoid_oneself(x, y, tail):
                continue

            distance = math.sqrt((apple_pos.top - y)**2 +
                                 (apple_pos.left - x)**2)
            if shortest == None or distance < shortest:
                shortest = distance
                action = action_space[i]

        return action
Exemple #3
0
def reset(settings, first_play=False):
    global head, tail, facing, opposite, direction, apple, snake_head_img, snake_body_img

    direction = settings['starting_direction']
    opposite = Directions.get_opposite(facing)
    head['rect'] = get_segment()
    head['facing'] = settings['starting_direction']
    apple = spawn_apple()

    snake_head_img = pygame.image.load("snake head.png")
    snake_head_img = pygame.transform.scale(snake_head_img, (settings['block_dim'], settings['block_dim']))

    snake_body_img = pygame.image.load("snake body.png")
    snake_body_img = pygame.transform.scale(snake_body_img, (settings['block_dim'], settings['block_dim']))

    if settings['autostart']:
        direction = facing

    if first_play:
        if settings['walls_on']:
            generate_walls()

        if settings['tunnels_on']:
            generate_tunnels()

    else:
        tail = []

    for _ in range(settings['starting_tail']):
        move_head(head['facing'])
        tail.append(get_segment())