aW1wb3J0IHB5Z2FtZQppbXBvcnQgbWF0aAppbXBvcnQgc3lzCgojIOC5gOC4o+C4tOC5iOC4oeC4leC5ieC4mSBQeWdhbWUKcHlnYW1lLmluaXQoKQoKIyDguIHguLPguKvguJnguJTguILguJnguLLguJTguKvguJnguYnguLLguJXguYjguLLguIcKd2lkdGgsIGhlaWdodCA9IDgwMCwgNjAwCnNjcmVlbiA9IHB5Z2FtZS5kaXNwbGF5LnNldF9tb2RlKCh3aWR0aCwgaGVpZ2h0KSkKCiMg4LiB4Liz4Lir4LiZ4LiU4LiK4Li34LmI4Lit4Lir4LiZ4LmJ4Liy4LiV4LmI4Liy4LiHCnB5Z2FtZS5kaXNwbGF5LnNldF9jYXB0aW9uKCZxdW90O0kgTG92ZSBZb3UgaW4gSGVhcnQgU2hhcGUmcXVvdDspCgojIOC4geC4s+C4q+C4meC4lOC4quC4tQp3aGl0ZSA9ICgyNTUsIDI1NSwgMjU1KQpyZWQgPSAoMjU1LCAwLCAwKQoKIyDguJ/guK3guJnguJXguYwKZm9udCA9IHB5Z2FtZS5mb250LlN5c0ZvbnQoJnF1b3Q7QXJpYWwmcXVvdDssIDMwKQoKIyDguILguYnguK3guITguKfguLLguKHguJfguLXguYjguIjguLDguILguKLguLHguJoKdGV4dCA9IGZvbnQucmVuZGVyKCZxdW90O0kgTG92ZSBZb3UmcXVvdDssIFRydWUsIHJlZCkKCiMg4LiB4Liz4Lir4LiZ4LiU4LiE4Lin4Liy4Lih4LmA4Lij4LmH4Lin4LmD4LiZ4LiB4Liy4Lij4LmA4LiE4Lil4Li34LmI4Lit4LiZ4LiX4Li14LmICnNwZWVkID0gMC4wNQp0ID0gMCAgIyDguJXguLHguKfguYHguJvguKPguJfguLXguYjguYPguIrguYnguYPguJnguIHguLLguKPguITguLPguJnguKfguJPguJXguLPguYHguKvguJnguYjguIcKCiMg4Lil4Li54Lib4Lir4Lil4Lix4LiB4LiC4Lit4LiH4LmA4LiB4LihCndoaWxlIFRydWU6CiAgICAjIOC4leC4o+C4p+C4iOC4quC4reC4muC5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jCAoZXZlbnQpCiAgICBmb3IgZXZlbnQgaW4gcHlnYW1lLmV2ZW50LmdldCgpOgogICAgICAgIGlmIGV2ZW50LnR5cGUgPT0gcHlnYW1lLlFVSVQ6CiAgICAgICAgICAgIHB5Z2FtZS5xdWl0KCkKICAgICAgICAgICAgc3lzLmV4aXQoKQoKICAgICMg4LmA4LiV4Li04Lih4Lie4Li34LmJ4LiZ4Lir4Lil4Lix4LiHCiAgICBzY3JlZW4uZmlsbCh3aGl0ZSkKCiAgICAjIOC4hOC4s+C4meC4p+C4k+C4leC4s+C5geC4q+C4meC5iOC4h+C4leC4suC4oeC4o+C4ueC4m+C4q+C4seC4p+C5g+C4iAogICAgeCA9IDQwMCArIDIwMCAqIG1hdGguc2luKHQpICoqIDMKICAgIHkgPSAzMDAgLSAoMTYgKiBtYXRoLmNvcyh0KSAqKiAyICogbWF0aC5zaW4odCkpCgogICAgIyDguKfguLLguJTguILguYnguK3guITguKfguLLguKHguKXguIfguJrguJnguKvguJnguYnguLLguIjguK0KICAgIHNjcmVlbi5ibGl0KHRleHQsICh4LCB5KSkKCiAgICAjIOC4reC4seC4nuC5gOC4lOC4l+C4q+C4meC5ieC4suC4iOC4rQogICAgcHlnYW1lLmRpc3BsYXkudXBkYXRlKCkKCiAgICAjIOC5gOC4nuC4tOC5iOC4oeC4hOC5iOC4suC4leC4seC4p+C5geC4m+C4oyB0IOC5gOC4nuC4t+C5iOC4reC5g+C4q+C5ieC4guC5ieC4reC4hOC4p+C4suC4oeC4guC4ouC4seC4muC5hOC4m+C4leC4suC4oeC4o+C4ueC4m+C4q+C4seC4p+C5g+C4iAogICAgdCArPSBzcGVlZAogICAgaWYgdCAmZ3Q7IDIgKiBtYXRoLnBpOgogICAgICAgIHQgPSAwICAjIOC4o+C4teC5gOC4i+C5h+C4leC4hOC5iOC4siB0IOC5gOC4oeC4t+C5iOC4reC4hOC4o+C4miAxIOC4o+C4reC4mgoKICAgICMg4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LmA4Lif4Lij4Lih4LmA4Lij4LiVCiAgICBweWdhbWUudGltZS5DbG9jaygpLnRpY2soNjAp
import pygame
import math
import sys
# เริ่มต้น Pygame
pygame.init()
# กำหนดขนาดหน้าต่าง
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
# กำหนดชื่อหน้าต่าง
pygame.display.set_caption("I Love You in Heart Shape")
# กำหนดสี
white = (255, 255, 255)
red = (255, 0, 0)
# ฟอนต์
font = pygame.font.SysFont("Arial", 30)
# ข้อความที่จะขยับ
text = font.render("I Love You", True, red)
# กำหนดความเร็วในการเคลื่อนที่
speed = 0.05
t = 0 # ตัวแปรที่ใช้ในการคำนวณตำแหน่ง
# ลูปหลักของเกม
while True:
# ตรวจสอบเหตุการณ์ (event)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# เติมพื้นหลัง
screen.fill(white)
# คำนวณตำแหน่งตามรูปหัวใจ
x = 400 + 200 * math.sin(t) ** 3
y = 300 - (16 * math.cos(t) ** 2 * math.sin(t))
# วาดข้อความลงบนหน้าจอ
screen.blit(text, (x, y))
# อัพเดทหน้าจอ
pygame.display.update()
# เพิ่มค่าตัวแปร t เพื่อให้ข้อความขยับไปตามรูปหัวใจ
t += speed
if t > 2 * math.pi:
t = 0 # รีเซ็ตค่า t เมื่อครบ 1 รอบ
# ตั้งค่าเฟรมเรต
pygame.time.Clock().tick(60)