news 2026/5/12 9:59:37

如何用python制作妈妈我爱你动画

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用python制作妈妈我爱你动画

昨天是母亲节,今天我来教大家如何在python中制作一个关于妈妈我爱你的简单小动画

import time

import random

import os

import math

import sys

# 尝试导入颜色支持库,如果没有则使用基本输出

try:

import colorama

from colorama import Fore, Back, Style, init

init(autoreset=True)

COLORAMA_AVAILABLE = True

except ImportError:

COLORAMA_AVAILABLE = False

print("提示: 安装colorama可以获得更好的颜色效果: pip install colorama")

class LoveEffect:

def __init__(self):

self.colors = [

'\033[91m', '\033[92m', '\033[93m', '\033[94m',

'\033[95m', '\033[96m', '\033[97m', '\033[91m',

'\033[38;5;196m', '\033[38;5;200m', '\033[38;5;201m',

'\033[38;5;213m', '\033[38;5;219m', '\033[38;5;225m'

]

self.reset = '\033[0m'

def clear_screen(self):

os.system('cls' if os.name == 'nt' else 'clear')

def heart_pattern(self, size=15):

"""生成心形图案"""

heart = []

for y in range(size, -size-1, -1):

row = ""

for x in range(-size, size+1):

# 心形方程: (x^2 + y^2 - 1)^3 - x^2 * y^3 = 0

formula = (x*0.04)**2 + (y*0.1)**2 - 1

value = formula**3 - (x*0.04)**2 * (y*0.1)**3

if value <= 0:

row += "♥"

else:

row += " "

heart.append(row)

return heart

def print_rainbow_text(self, text, delay=0.05):

"""彩虹色打字效果"""

colors = [Fore.RED, Fore.YELLOW, Fore.GREEN, Fore.CYAN,

Fore.BLUE, Fore.MAGENTA] if COLORAMA_AVAILABLE else self.colors

for i, char in enumerate(text):

color = colors[i % len(colors)]

if COLORAMA_AVAILABLE:

print(color + char, end='', flush=True)

else:

print(f"{self.colors[i % len(self.colors)]}{char}", end='', flush=True)

time.sleep(delay)

print()

def heart_rain(self):

"""心形雨效果"""

width = 60

height = 15

hearts = ['♥', '❤', '💕', '💖', '💗', '💝', '💘']

# 初始化雨滴位置

raindrops = []

for _ in range(20):

raindrops.append({

'x': random.randint(0, width-1),

'y': random.randint(-height, -1),

'speed': random.uniform(0.3, 1.0),

'char': random.choice(hearts)

})

for _ in range(50):

self.clear_screen()

screen = [[' ' for _ in range(width)] for _ in range(height)]

# 更新和绘制雨滴

for drop in raindrops:

drop['y'] += drop['speed']

if drop['y'] >= height:

drop['y'] = 0

drop['x'] = random.randint(0, width-1)

x, y = int(drop['x']), int(drop['y'])

if 0 <= y < height and 0 <= x < width:

screen[y][x] = '\033[91m' + drop['char'] + self.reset

# 打印屏幕

for row in screen:

print(''.join(row))

time.sleep(0.1)

def sparkle_text(self, text, duration=3):

"""闪烁文字效果"""

end_time = time.time() + duration

while time.time() < end_time:

self.clear_screen()

# 随机颜色

color = random.choice(self.colors)

# 随机位置(居中带偏移)

offset = random.randint(-5, 5)

padding = " " * (20 + offset)

# 随机大小写

display_text = text.upper() if random.random() > 0.5 else text

# 添加星星装饰

stars = "✨" * random.randint(1, 5)

print(f"\n\n\n{padding}{color}{stars} {display_text} {stars}{self.reset}")

time.sleep(0.2)

def expanding_heart(self):

"""扩展心形动画"""

for size in range(3, 12, 2):

self.clear_screen()

heart = self.heart_pattern(size)

color = self.colors[random.randint(0, len(self.colors)-1)]

print(f"\n{color}妈妈我爱你{self.reset}\n")

for row in heart:

if row.strip():

print(f" {color}{row}{self.reset}")

time.sleep(0.3)

def matrix_love(self):

"""矩阵风格的心形雨"""

width = 50

height = 15

chars = '❤妈妈我爱你'

columns = [random.randint(0, height-1) for _ in range(width)]

for _ in range(100):

self.clear_screen()

for y in range(height):

row = ""

for x in range(width):

if columns[x] == y:

color = self.colors[random.randint(0, len(self.colors)-1)]

char = random.choice(chars)

row += f"{color}{char}"

elif columns[x] < y:

row += " "

else:

if random.random() < 0.1:

color = self.colors[random.randint(0, len(self.colors)-1)]

row += f"{color}{random.choice(chars)}"

else:

row += " "

print(row)

# 更新列位置

for i in range(len(columns)):

if random.random() < 0.1:

columns[i] = (columns[i] + 1) % height

time.sleep(0.15)

def bounce_text(self, text):

"""弹跳文字效果"""

width = 40

height = 10

x, y = width//2, height//2

dx, dy = 1, 1

text_len = len(text)

for _ in range(50):

self.clear_screen()

# 更新位置

x += dx

y += dy

# 边界检测

if x <= 0 or x >= width - text_len:

dx = -dx

if y <= 0 or y >= height:

dy = -dy

# 绘制

for row in range(height):

if row == y:

padding = " " * x

color = self.colors[random.randint(0, len(self.colors)-1)]

hearts = "💕" * 2

print(f"{padding}{color}{hearts} {text} {hearts}{self.reset}")

else:

print()

time.sleep(0.1)

def ascii_art_love(self):

"""ASCII艺术字效果"""

art = """

💗💗💗💗💗💗💗💗💗💗💗💗💗💗

💗 ✨ 妈妈我爱你 ✨ 💗

💗💗💗💗💗💗💗💗💗💗💗💗💗💗

❤️❤️ ❤️❤️

❤️ ❤️ ❤️ ❤️

❤️ ❤️ ❤️ ❤️

❤️ ❤️ ❤️

❤️ ❤️

❤️ ❤️

❤️ ❤️

❤️ ❤️

❤️ ❤️

❤️❤️

❤️

"""

for _ in range(5):

self.clear_screen()

color = random.choice(self.colors)

print(f"{color}{art}{self.reset}")

time.sleep(0.5)

self.clear_screen()

time.sleep(0.3)

def gradient_text(self, text):

"""渐变色文字"""

colors = [

(255, 0, 0), (255, 127, 0), (255, 255, 0),

(0, 255, 0), (0, 255, 255), (0, 0, 255), (139, 0, 255)

]

for _ in range(3):

self.clear_screen()

print("\n\n")

for i, char in enumerate(text):

# 计算渐变色

ratio = i / len(text)

color_index = ratio * (len(colors) - 1)

idx1 = int(color_index)

idx2 = min(idx1 + 1, len(colors) - 1)

fraction = color_index - idx1

r = int(colors[idx1][0] + (colors[idx2][0] - colors[idx1][0]) * fraction)

g = int(colors[idx1][1] + (colors[idx2][1] - colors[idx1][1]) * fraction)

b = int(colors[idx1][2] + (colors[idx2][2] - colors[idx1][2]) * fraction)

print(f"\033[38;2;{r};{g};{b}m{char}", end='', flush=True)

time.sleep(0.1)

print("\n")

time.sleep(0.5)

def fireworks(self):

"""烟花效果"""

width = 40

height = 12

for _ in range(5):

self.clear_screen()

# 随机烟花位置

cx, cy = random.randint(5, width-5), random.randint(2, height-4)

# 动画帧

for radius in range(1, 8):

self.clear_screen()

screen = [[' ' for _ in range(width)] for _ in range(height)]

# 绘制烟花粒子

for angle in range(0, 360, 15):

rad = math.radians(angle)

x = int(cx + radius * math.cos(rad))

y = int(cy + radius * math.sin(rad))

if 0 <= x < width and 0 <= y < height:

# 粒子颜色和样式

particles = ['❤', '✨', '💕', '💖', '*', '♥']

screen[y][x] = random.choice(particles)

# 绘制屏幕

for row in screen:

line = ''.join(row)

# 添加颜色

colored_line = ""

for char in line:

if char != ' ':

color = self.colors[random.randint(0, len(self.colors)-1)]

colored_line += f"{color}{char}{self.reset}"

else:

colored_line += char

print(colored_line)

time.sleep(0.15)

time.sleep(0.3)

def run_full_show(self):

"""运行完整表演"""

print("准备开始表演...")

time.sleep(1)

# 1. 彩虹文字出场

print("\n" * 3)

self.print_rainbow_text("✨ 妈妈我爱你 ✨")

time.sleep(1)

# 2. 心形扩展

self.expanding_heart()

time.sleep(0.5)

# 3. 弹跳文字

self.bounce_text("妈妈我爱你")

time.sleep(0.5)

# 4. 烟花表演

self.fireworks()

# 5. 闪烁效果

self.sparkle_text("妈妈我爱你", 2)

# 6. 心形雨

self.heart_rain()

# 7. ASCII艺术

self.ascii_art_love()

# 8. 渐变色

self.gradient_text("妈妈我爱你")

# 9. 矩阵风格

self.matrix_love()

# 最终展示

self.clear_screen()

final_art = """

╔════════════════════════════════╗

║ ║

║ 💕 妈妈,我爱您 💕 ║

║ ║

║ 感谢您的养育之恩和无私的爱 ║

║ ║

║ 🌹🌹🌹🌹🌹🌹🌹🌹🌹 ║

║ ║

╚════════════════════════════════╝

"""

print("\033[91m" + final_art + "\033[0m")

time.sleep(2)

print("\n❤️ ❤️ ❤️ 永远爱您! ❤️ ❤️ ❤️\n")

if __name__ == "__main__":

try:

show = LoveEffect()

show.run_full_show()

except KeyboardInterrupt:

print("\n\n💕 爱您的心永远不会停止!💕\n")

except Exception as e:

print(f"出了点小问题: {e}")

print("但是爱妈妈的心是一样的!❤️")

代码中准备了多种报错后的运行方式,以防万一。注意安装依赖

pip install colorama

会使得表达效果更好,如果没有你用的是Visual Studio Code的话会自动下载。

希望我的文章能够帮到你,谢谢观看

部分内容展示

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 9:58:52

基于RAG与LangChain的AI阅读助手BookWith架构与实现

1. 项目概述&#xff1a;当AI成为你的阅读伙伴作为一名深度阅读爱好者和技术实践者&#xff0c;我一直在寻找一种能真正“理解”内容&#xff0c;并与我进行深度对话的阅读工具。传统的电子书阅读器&#xff0c;无论是Kindle还是其他应用&#xff0c;本质上都只是将纸质书数字化…

作者头像 李华
网站建设 2026/5/12 9:56:36

从零打造蒸汽朋克辉光管时钟:驱动方案、定制管与系统集成实战

1. 项目概述&#xff1a;从零开始的蒸汽朋克辉光管时钟作为一个在电子制作和复古硬件领域折腾了十多年的老玩家&#xff0c;我始终对那些散发着温暖橘红色光芒的辉光管&#xff08;Nixie Tube&#xff09;情有独钟。它们不仅仅是时间的显示器&#xff0c;更像是一件连接过去与未…

作者头像 李华
网站建设 2026/5/12 9:52:11

英雄联盟国服换肤终极指南:5分钟掌握R3nzSkin免费解锁全皮肤

英雄联盟国服换肤终极指南&#xff1a;5分钟掌握R3nzSkin免费解锁全皮肤 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 还在为英雄联盟国服昂贵的皮肤…

作者头像 李华