Untitled
unknown
plain_text
2 years ago
4.7 kB
4
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()Editor is loading...
Leave a Comment