Untitled

mail@pastecode.io avatar
unknown
plain_text
9 months ago
4.7 kB
0
Indexable
import pygame
import sys

def sad(screen):
    eye_state = {'pupil_position_y': 0, 'lid_position_y': -110}

    def update():
        eye_state['pupil_position_y'] += 1
        eye_state['lid_position_y'] += 1

    def draw(progress):
        screen.fill((0, 0, 0))

        def sad_eye(eye_x, eye_y, lid_x, lid_y, eye_state):
            eye_state['pupil_position_y'] = min(max(eye_state['pupil_position_y'], 0), 27)
            eye_state['lid_position_y'] = min(max(eye_state['lid_position_y'], -200), -80)

            pupil_x = eye_x
            pupil_y = eye_y + eye_state['pupil_position_y']
            lid_y = eye_y + eye_state['lid_position_y']

            pygame.draw.circle(screen, (255, 255, 255), (eye_x, eye_y), 45)  # White circle
            pygame.draw.circle(screen, (0, 0, 0), (lid_x, lid_y - 5), 90)  # Dark circle
            pygame.draw.circle(screen, (0, 0, 100), (pupil_x, pupil_y), 15)  # Pupil

        sad_eye(180, 150, 180, eye_state['lid_position_y'], eye_state)
        sad_eye(300, 150, 300, eye_state['lid_position_y'], eye_state)

    return update, draw

def happy(screen):
    eye_state = {'pupil_position_y': 0, 'lid_position_y': -110}

    def update():
        eye_state['pupil_position_y'] += 1
        eye_state['lid_position_y'] += 1


    def draw(progress):
        screen.fill((0, 0, 0))

        def happy_eye(eye_x, eye_y, lid_x, lid_y, eye_state):
            eye_state['pupil_position_y'] = min(max(eye_state['pupil_position_y'], 0), 10)
            eye_state['lid_position_y'] = min(max(eye_state['lid_position_y'], -200), -90)

            pupil_x = eye_x
            pupil_y = eye_y - eye_state['pupil_position_y']
            lid_y = eye_y - eye_state['lid_position_y']

            pygame.draw.circle(screen, (255, 255, 255), (eye_x, eye_y), 45)  # White circle
            pygame.draw.circle(screen, (0, 0, 100), (pupil_x, pupil_y), 15)
            pygame.draw.circle(screen, (0, 0, 0), (lid_x, lid_y - 5), 90)  # Dark circle
              # Pupil

        happy_eye(200, 200, 200, eye_state['lid_position_y'], eye_state)
        happy_eye(330, 200, 330, eye_state['lid_position_y'], eye_state)

    return update, draw

def angry(screen):
    eye_states = {'triangle_coords1': [(140, 90), (300, 20), (250, 140)],
                  'triangle_coords2': [(200, 90), (395, 20), (280, 140)]}
    new_triangle_coords1 = [(140, 170), (300, 100), (250, 220)]
    new_triangle_coords2 = [(200, 110), (395, 165), (280, 220)]
    animation_duration = 1000  # Adjusted for faster movement

    def update():
        pass

    def draw(progress):
        screen.fill((0, 0, 0))

        def angry_eye(eye_x, eye_y, triangle_coords1, triangle_coords2):
            interpolated_coords1 = [
                (
                    int(start[0] + (end[0] - start[0]) * progress),
                    int(start[1] + (end[1] - start[1]) * progress),
                )
                for start, end in zip(triangle_coords1, new_triangle_coords1)
            ]
            interpolated_coords2 = [
                (
                    int(start[0] + (end[0] - start[0]) * progress),
                    int(start[1] + (end[1] - start[1]) * progress),
                )
                for start, end in zip(triangle_coords2, new_triangle_coords2)
            ]

            pygame.draw.circle(screen, (255, 255, 255), (eye_x, eye_y), 50)
            pygame.draw.circle(screen, (0, 0, 100), (eye_x, 195), 15)

            pygame.draw.polygon(screen, (0, 0, 0), interpolated_coords2)
            pygame.draw.polygon(screen, (0,0, 0), interpolated_coords1)

        angry_eye(200, 200, eye_states['triangle_coords1'], eye_states['triangle_coords2'])
        angry_eye(330, 200, eye_states['triangle_coords1'], eye_states['triangle_coords2'])

    return update, draw, animation_duration

def main():
    pygame.init()
    screen = pygame.display.set_mode((480, 320))

    emotion = input("Enter 'sad', 'happy', or 'angry': ")

    if emotion == 'sad':
        update_func, draw_func = sad(screen)
    elif emotion == 'happy':
        update_func, draw_func = happy(screen)
    elif emotion == 'angry':
        update_func, draw_func, animation_duration = angry(screen)

    start_time = pygame.time.get_ticks()

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

        current_time = pygame.time.get_ticks()
        elapsed_time = current_time - start_time
        progress = min(1.0, elapsed_time / animation_duration) if emotion == 'angry' else 0

        update_func()
        draw_func(progress)

        pygame.display.flip()
        pygame.time.delay(50)

if _name_ == "_main_":
    main()
Leave a Comment