XMWAI 0.4.6__tar.gz → 0.4.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of XMWAI might be problematic. Click here for more details.

Files changed (133) hide show
  1. {xmwai-0.4.6 → xmwai-0.4.8}/MANIFEST.in +1 -1
  2. {xmwai-0.4.6/XMWAI.egg-info → xmwai-0.4.8}/PKG-INFO +2 -1
  3. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/__init__.py +4 -3
  4. xmwai-0.4.8/XMWAI/assets/like.png +0 -0
  5. xmwai-0.4.8/XMWAI/effects_core.py +205 -0
  6. xmwai-0.4.8/XMWAI/fortune_core.py +527 -0
  7. xmwai-0.4.8/XMWAI/gif/__init__.py +0 -0
  8. {xmwai-0.4.6 → xmwai-0.4.8/XMWAI.egg-info}/PKG-INFO +2 -1
  9. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI.egg-info/SOURCES.txt +4 -9
  10. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI.egg-info/requires.txt +1 -0
  11. {xmwai-0.4.6 → xmwai-0.4.8}/setup.py +4 -3
  12. xmwai-0.4.6/XMWAI/assets/1.png +0 -0
  13. xmwai-0.4.6/XMWAI/assets/g.png +0 -0
  14. xmwai-0.4.6/XMWAI/assets/h.png +0 -0
  15. xmwai-0.4.6/XMWAI/assets/l.png +0 -0
  16. xmwai-0.4.6/XMWAI/assets/m.png +0 -0
  17. xmwai-0.4.6/XMWAI/assets/s.png +0 -0
  18. xmwai-0.4.6/XMWAI/assets/t.png +0 -0
  19. xmwai-0.4.6/XMWAI/assets//345/276/256/350/275/257/351/233/205/351/273/221.ttf +0 -0
  20. xmwai-0.4.6/XMWAI/snake_core.py +0 -595
  21. {xmwai-0.4.6 → xmwai-0.4.8}/LICENSE.txt +0 -0
  22. {xmwai-0.4.6 → xmwai-0.4.8}/README.md +0 -0
  23. {xmwai-0.4.6/XMWAI/file → xmwai-0.4.8/XMWAI/assets}/__init__.py +0 -0
  24. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/bomb_core.py +0 -0
  25. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/core.py +0 -0
  26. {xmwai-0.4.6/XMWAI/gif → xmwai-0.4.8/XMWAI/file}/__init__.py +0 -0
  27. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/file/idiom.json +0 -0
  28. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/0.gif +0 -0
  29. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/1.gif +0 -0
  30. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/10.gif +0 -0
  31. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/11.gif +0 -0
  32. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/12.gif +0 -0
  33. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/13.gif +0 -0
  34. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/14.gif +0 -0
  35. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/15.gif +0 -0
  36. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/16.gif +0 -0
  37. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/17.gif +0 -0
  38. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/18.gif +0 -0
  39. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/19.gif +0 -0
  40. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/2.gif +0 -0
  41. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/20.gif +0 -0
  42. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/21.gif +0 -0
  43. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/22.gif +0 -0
  44. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/23.gif +0 -0
  45. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/24.gif +0 -0
  46. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/25.gif +0 -0
  47. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/26.gif +0 -0
  48. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/27.gif +0 -0
  49. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/28.gif +0 -0
  50. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/29.gif +0 -0
  51. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/3.gif +0 -0
  52. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/30.gif +0 -0
  53. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/31.gif +0 -0
  54. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/32.gif +0 -0
  55. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/33.gif +0 -0
  56. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/34.gif +0 -0
  57. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/35.gif +0 -0
  58. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/36.gif +0 -0
  59. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/37.gif +0 -0
  60. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/38.gif +0 -0
  61. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/39.gif +0 -0
  62. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/4.gif +0 -0
  63. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/40.gif +0 -0
  64. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/41.gif +0 -0
  65. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/42.gif +0 -0
  66. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/43.gif +0 -0
  67. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/44.gif +0 -0
  68. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/45.gif +0 -0
  69. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/46.gif +0 -0
  70. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/47.gif +0 -0
  71. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/48.gif +0 -0
  72. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/49.gif +0 -0
  73. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/5.gif +0 -0
  74. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/50.gif +0 -0
  75. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/51.gif +0 -0
  76. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/52.gif +0 -0
  77. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/53.gif +0 -0
  78. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/54.gif +0 -0
  79. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/55.gif +0 -0
  80. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/56.gif +0 -0
  81. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/57.gif +0 -0
  82. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/58.gif +0 -0
  83. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/59.gif +0 -0
  84. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/6.gif +0 -0
  85. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/60.gif +0 -0
  86. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/61.gif +0 -0
  87. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/62.gif +0 -0
  88. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/63.gif +0 -0
  89. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/64.gif +0 -0
  90. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/65.gif +0 -0
  91. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/66.gif +0 -0
  92. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/67.gif +0 -0
  93. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/68.gif +0 -0
  94. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/69.gif +0 -0
  95. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/7.gif +0 -0
  96. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/70.gif +0 -0
  97. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/71.gif +0 -0
  98. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/72.gif +0 -0
  99. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/73.gif +0 -0
  100. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/74.gif +0 -0
  101. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/75.gif +0 -0
  102. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/76.gif +0 -0
  103. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/77.gif +0 -0
  104. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/78.gif +0 -0
  105. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/79.gif +0 -0
  106. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/8.gif +0 -0
  107. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/80.gif +0 -0
  108. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/81.gif +0 -0
  109. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/82.gif +0 -0
  110. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/83.gif +0 -0
  111. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/84.gif +0 -0
  112. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/85.gif +0 -0
  113. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/gif/9.gif +0 -0
  114. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/idiom_core.py +0 -0
  115. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/magic_core.py +0 -0
  116. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/burger.js +0 -0
  117. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/BottomBun.png +0 -0
  118. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/TopBun.png +0 -0
  119. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/beef.png +0 -0
  120. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/bg.jpeg +0 -0
  121. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/bg.png +0 -0
  122. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/cheese.png +0 -0
  123. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/lettuce.png +0 -0
  124. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/sauce.png +0 -0
  125. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/static/images/tomato.png +0 -0
  126. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/templates/burger.html +0 -0
  127. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/templates/nutrition_pie.html +0 -0
  128. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/templates//345/210/233/346/204/217/350/217/234/350/260/261.html" +0 -0
  129. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/trial_class.py +0 -0
  130. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI/web_core.py +0 -0
  131. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI.egg-info/dependency_links.txt +0 -0
  132. {xmwai-0.4.6 → xmwai-0.4.8}/XMWAI.egg-info/top_level.txt +0 -0
  133. {xmwai-0.4.6 → xmwai-0.4.8}/setup.cfg +0 -0
@@ -2,4 +2,4 @@ recursive-include XMWAI/gif *
2
2
  recursive-include XMWAI/file *.json
3
3
  recursive-include XMWAI/templates *.html
4
4
  recursive-include XMWAI/static *.js *.css *.png *.jpg *.gif *.jpeg
5
- recursive-include XMWAI/assets *
5
+ recursive-include XMWAI/assets *.png
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: XMWAI
3
- Version: 0.4.6
3
+ Version: 0.4.8
4
4
  Summary: Small code King AI related library
5
5
  Home-page: https://github.com/Tonykai88/XMWAI.git
6
6
  Author: pydevelopment
@@ -18,6 +18,7 @@ Requires-Dist: numpy>=1.26.0
18
18
  Requires-Dist: flask>=3.1.0
19
19
  Requires-Dist: pyecharts>=2.0.8
20
20
  Requires-Dist: cvzone>=1.6.1
21
+ Requires-Dist: beautifulsoup4>=4.13.4
21
22
  Dynamic: author
22
23
  Dynamic: author-email
23
24
  Dynamic: classifier
@@ -4,10 +4,11 @@ from .bomb_core import bomb # 从子模块导入函数到顶层
4
4
  from .idiom_core import idiom, searchIdiom, get_json_path # 从子模块导入函数到顶层
5
5
  from .trial_class import make, get_file_content_as_base64, save_pic, detect_scale, open_image, get_file_content_as_base64_2, cartoon # 从子模块导入函数到顶层
6
6
  from .web_core import burger, cookbook # 从子模块导入函数到顶层
7
- from .snake_core import SnakeGame
8
-
7
+ from .effects_core import effects # 从子模块导入函数到顶层
8
+ from .fortune_core import fate, extract_number, extract_text, extract_fortune_description, get_default_data, download_image, web, fate_old # 从子模块导入函数到顶层
9
9
 
10
10
  __all__ = ["story", "photo", "reply", "poem", 'birthday', 'bomb',
11
11
  "idiom", "searchIdiom", "get_json_path", "crack", "show",
12
12
  "make", "get_file_content_as_base64", "save_pic", "detect_scale", "open_image",
13
- "get_file_content_as_base64_2", "cartoon", "burger", "cookbook", "SnakeGame"] # 可选:明确导出的内容
13
+ "get_file_content_as_base64_2", "cartoon", "burger", "cookbook",
14
+ "effects", "fate", "extract_number", "extract_text", "extract_fortune_description", "get_default_data", "download_image", "web", "fate_old"] # 可选:明确导出的内容
Binary file
@@ -0,0 +1,205 @@
1
+ import turtle
2
+ import random
3
+ import time
4
+ import math
5
+ import tkinter as tk
6
+ from importlib.resources import files
7
+ from pathlib import Path
8
+
9
+ # ---------------------------
10
+ # 高亮色彩库
11
+ # ---------------------------
12
+ _ALL_VIBRANT_COLORS = [
13
+ "#FF0000", "#FF4500", "#FF8C00", "#FFD700", "#ADFF2F", "#00FF7F",
14
+ "#00FA9A", "#00FFFF", "#1E90FF", "#7B68EE", "#9932CC", "#FF69B4",
15
+ "#FF1493", "#FF00FF", "#FF7F50", "#FFA500", "#40E0D0", "#7FFF00",
16
+ "#FF5733", "#FFC300", "#DAF7A6", "#C70039", "#900C3F", "#581845"
17
+ ]
18
+
19
+ # ---------------------------
20
+ # 资源文件获取函数
21
+ # ---------------------------
22
+
23
+
24
+ def get_resource_path(filename: str) -> str:
25
+ """返回包内资源的绝对路径"""
26
+ return str(files("XMWAI.assets").joinpath(filename))
27
+
28
+ # ---------------------------
29
+ # 特效函数
30
+ # ---------------------------
31
+
32
+
33
+ def _effect_stars(screen):
34
+ """炫彩星星闪烁"""
35
+ t = turtle.Turtle(visible=False)
36
+ t.speed(0)
37
+ t.hideturtle()
38
+ screen.tracer(False)
39
+
40
+ stars = [(random.randint(-250, 250), random.randint(-180, 200),
41
+ random.randint(10, 30)) for _ in range(30)]
42
+
43
+ for _ in range(12): # 闪烁次数
44
+ t.clear()
45
+ for x, y, size in stars:
46
+ t.penup()
47
+ t.goto(x, y)
48
+ t.pendown()
49
+ t.color(random.choice(_ALL_VIBRANT_COLORS))
50
+ t.begin_fill()
51
+ for _ in range(5):
52
+ t.forward(size)
53
+ t.right(144)
54
+ t.end_fill()
55
+ screen.update()
56
+ time.sleep(0.07)
57
+
58
+ t.clear()
59
+ screen.update()
60
+
61
+
62
+ def _effect_like(screen, img_path=None, flash_times=1, flash_interval=0.2):
63
+ """点赞动画"""
64
+ screen.tracer(False)
65
+ canvas = screen.getcanvas()
66
+ img_path = img_path or get_resource_path("like.png")
67
+
68
+ tk_img = tk.PhotoImage(file=img_path)
69
+ screen._tk_img_ref = tk_img # 保持引用
70
+
71
+ w = screen.window_width()
72
+ h = screen.window_height()
73
+ img_id = canvas.create_image(w//4, h//4, image=tk_img)
74
+
75
+ for _ in range(flash_times * 2):
76
+ canvas.itemconfigure(img_id, state='normal')
77
+ screen.update()
78
+ time.sleep(flash_interval)
79
+ canvas.itemconfigure(img_id, state='hidden')
80
+ screen.update()
81
+ time.sleep(flash_interval)
82
+
83
+ canvas.delete(img_id)
84
+ screen.update()
85
+
86
+
87
+ def _effect_fireworks(screen):
88
+ """极速瞬爆烟花"""
89
+ t = turtle.Turtle(visible=False)
90
+ t.speed(0)
91
+ t.hideturtle()
92
+ screen.tracer(False)
93
+
94
+ fireworks = []
95
+ for _ in range(random.randint(3, 6)):
96
+ start_x = random.randint(-300, 300)
97
+ peak_y = random.randint(150, 280)
98
+ fireworks.append({
99
+ "x": start_x,
100
+ "y": peak_y,
101
+ "particles": [
102
+ (random.uniform(0, 360), random.uniform(
103
+ 80, 220), random.choice(_ALL_VIBRANT_COLORS))
104
+ for _ in range(random.randint(100, 180))
105
+ ],
106
+ "color": random.choice(["white", "gold", "yellow"])
107
+ })
108
+
109
+ for y in range(-250, 0, 80):
110
+ t.clear()
111
+ for fw in fireworks:
112
+ t.penup()
113
+ t.goto(fw["x"], y)
114
+ t.dot(8, "white")
115
+ screen.update()
116
+ time.sleep(0.01)
117
+
118
+ steps = 12
119
+ for step in range(1, steps + 1):
120
+ t.clear()
121
+ scale = step / steps
122
+ fade = 1 - scale * 0.7
123
+ for fw in fireworks:
124
+ for angle, dist, color in fw["particles"]:
125
+ r, g, b = screen.cv.winfo_rgb(color)
126
+ r, g, b = int((r / 256) * fade), int((g / 256)
127
+ * fade), int((b / 256) * fade)
128
+ fade_color = f"#{r:02x}{g:02x}{b:02x}"
129
+ x = fw["x"] + math.cos(math.radians(angle)) * \
130
+ (dist * scale ** 1.5)
131
+ y = fw["y"] + math.sin(math.radians(angle)) * \
132
+ (dist * scale ** 1.5)
133
+ t.penup()
134
+ t.goto(x, y)
135
+ if random.random() > 0.1:
136
+ t.dot(max(2, 10 - step * 0.3), fade_color)
137
+ if step < 4:
138
+ t.penup()
139
+ t.goto(fw["x"], fw["y"])
140
+ t.dot(40 - step * 4, fw["color"])
141
+ screen.update()
142
+ time.sleep(0.03)
143
+
144
+ for i in range(3):
145
+ t.clear()
146
+ for fw in fireworks:
147
+ t.penup()
148
+ t.goto(fw["x"], fw["y"])
149
+ if i % 2 == 0:
150
+ t.dot(25, "white")
151
+ else:
152
+ t.dot(18, "gold")
153
+ screen.update()
154
+ time.sleep(0.05)
155
+
156
+ t.clear()
157
+ screen.update()
158
+
159
+
160
+ def _effect_heart(screen):
161
+ """快速跳动的爱心效果"""
162
+ t = turtle.Turtle(visible=False)
163
+ t.speed(0)
164
+ screen.tracer(False)
165
+ t.color("red", "red")
166
+
167
+ for s in [0.5, 0.7, 0.9, 1.1, 0.9, 1.1, 0.9, 0.7, 0.5]:
168
+ t.clear()
169
+ t.begin_fill()
170
+ t.setheading(140)
171
+ t.forward(120 * s)
172
+ t.circle(-60 * s, 200)
173
+ t.left(120)
174
+ t.circle(-60 * s, 200)
175
+ t.forward(120 * s)
176
+ t.end_fill()
177
+ screen.update()
178
+ time.sleep(0.05)
179
+
180
+ t.clear()
181
+ t.penup()
182
+ t.goto(0, -100)
183
+ t.pendown()
184
+ t.color("black")
185
+ t.write("点赞!", align="center", font=("Arial", 24, "bold"))
186
+ screen.update()
187
+ time.sleep(0.5)
188
+ t.clear()
189
+ screen.update()
190
+
191
+
192
+ # ---------------------------
193
+ # 统一接口
194
+ # ---------------------------
195
+ def effects(screen, effect_name: str):
196
+ if effect_name == "stars":
197
+ _effect_stars(screen)
198
+ elif effect_name == "like":
199
+ _effect_like(screen)
200
+ elif effect_name == "fireworks":
201
+ _effect_fireworks(screen)
202
+ elif effect_name == "heart":
203
+ _effect_heart(screen)
204
+ else:
205
+ print(f"未知特效: {effect_name}")