Untitled
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