86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
import pygame
|
|
import random
|
|
import sys
|
|
|
|
# Initialize Pygame
|
|
pygame.init()
|
|
|
|
# Set up the display window
|
|
screen_width, screen_height = 600, 600
|
|
screen = pygame.display.set_mode((screen_width, screen_height))
|
|
pygame.display.set_caption("Procedurally Generated Cartoon Faces")
|
|
|
|
def draw_face(surface):
|
|
"""Draws a cartoon face with random features on the given surface."""
|
|
# Fill background
|
|
surface.fill((255, 255, 255))
|
|
|
|
# --- Draw the Face ---
|
|
# Define face center and radius, then choose a random skin tone
|
|
face_center = (screen_width // 2, screen_height // 2)
|
|
face_radius = 200
|
|
skin_tones = [(255, 229, 204), (255, 204, 153), (204, 153, 102)]
|
|
face_color = random.choice(skin_tones)
|
|
pygame.draw.circle(surface, face_color, face_center, face_radius)
|
|
|
|
# --- Draw the Eyes ---
|
|
# Parameters for eyes
|
|
eye_radius = 20
|
|
pupil_radius = 10
|
|
# Random variations for eye positions
|
|
eye_offset_x = 60 + random.randint(-15, 15)
|
|
eye_y = face_center[1] - 40 + random.randint(-10, 10)
|
|
|
|
# Left eye position
|
|
left_eye_x = face_center[0] - eye_offset_x
|
|
left_eye_pos = (left_eye_x, eye_y)
|
|
# Right eye position
|
|
right_eye_x = face_center[0] + eye_offset_x
|
|
right_eye_pos = (right_eye_x, eye_y)
|
|
|
|
# Draw white part of eyes
|
|
pygame.draw.circle(surface, (255, 255, 255), left_eye_pos, eye_radius)
|
|
pygame.draw.circle(surface, (255, 255, 255), right_eye_pos, eye_radius)
|
|
# Draw pupils
|
|
pygame.draw.circle(surface, (0, 0, 0), left_eye_pos, pupil_radius)
|
|
pygame.draw.circle(surface, (0, 0, 0), right_eye_pos, pupil_radius)
|
|
|
|
# --- Draw the Nose ---
|
|
# Define nose points with some randomness
|
|
nose_top = (face_center[0], face_center[1] - 10 + random.randint(-5, 5))
|
|
nose_left = (face_center[0] - 20 + random.randint(-5, 5), face_center[1] + 30 + random.randint(-5, 5))
|
|
nose_right = (face_center[0] + 20 + random.randint(-5, 5), face_center[1] + 30 + random.randint(-5, 5))
|
|
pygame.draw.polygon(surface, (255, 153, 153), [nose_top, nose_left, nose_right])
|
|
|
|
# --- Draw the Mouth ---
|
|
# Define a rectangle where the mouth will be drawn and add some randomness
|
|
mouth_width, mouth_height = 80, 40
|
|
mouth_x = face_center[0] - mouth_width // 2 + random.randint(-10, 10)
|
|
mouth_y = face_center[1] + 40 + random.randint(-10, 10)
|
|
mouth_rect = pygame.Rect(mouth_x, mouth_y, mouth_width, mouth_height)
|
|
|
|
# Draw an arc to represent a smiling mouth; adjust angle for variation if desired
|
|
start_angle = 3.14 # π (start from the left side, roughly)
|
|
end_angle = 2 * 3.14 # 2π (end at the right side)
|
|
pygame.draw.arc(surface, (0, 0, 0), mouth_rect, start_angle, end_angle, 3)
|
|
|
|
# Update the display so the new face appears immediately
|
|
pygame.display.flip()
|
|
|
|
# Main loop
|
|
clock = pygame.time.Clock()
|
|
draw_face(screen) # Draw an initial face
|
|
|
|
while True:
|
|
for event in pygame.event.get():
|
|
# Allow the user to quit the window
|
|
if event.type == pygame.QUIT:
|
|
pygame.quit()
|
|
sys.exit()
|
|
# Press spacebar to generate a new face
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_SPACE:
|
|
draw_face(screen)
|
|
|
|
clock.tick(30) # Limit the frame rate to 30 FPS
|