文章目录
想象一下,你轻轻敲下一行指令,屏幕上呈现的是一朵缓缓绽放的ASCII玫瑰,伴随着专属于你的祝福语。表白和浪漫不只是鲜花和烛光,代码的世界同样可以如此温柔动人。今天,我们一起用Python的魅力,为你的表达赋予新的生命。
1. 玫瑰动画的核心功能
这段代码的核心,是借助动态的ASCII图形,通过Python在终端中绘制一朵从含苞到盛开的玫瑰。结合终端操作与动画延迟,它以“帧”的概念呈现玫瑰的变化过程。而最终,通过 colorama
实现了带颜色的花朵,让画面更显生动。
1.1 完整代码如下
import os
import time
from colorama import init, Fore
import ctypes
init()
def set_fullscreen():
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
hwnd = kernel32.GetConsoleWindow()
if hwnd:
user32 = ctypes.WinDLL('user32', use_last_error=True)
SW_MAXIMIZE = 3
user32.ShowWindow(hwnd, SW_MAXIMIZE)
def clear_screen():
if os.name == 'nt':
os.system('cls')
else:
os.system('clear')
def print_rose_stage1():
return '''
*********************
***** *****
** * ***
** * * ** **
** * ** * * *
** * ** *** ****** * * ***
* * * * * ** * * ***
* * * ** * * ** ***
* * * * * * * *
* **** * ***** * **
* *** * * *** **
*** * ** *** ***
*** ** ** ** * *** ****
* ** ** **** ** ** **
* ** ** **** **
** ** ** *** **
*** ** ***
* ***** *****
*** *** **
* * * *********
*** * * **
* *
* *
**** *
* *
* *
* *
* *
* *
* *
* *
* *
* *
'''
def print_rose_stage2():
return '''
* ******************
** ** **********
**** ****
** * ***
** ** ** * **
** * ** * ** * ** * *
** ** *** ** * *** * *
** ** * * **** * * * * **
* ** * * * * * * **** * *****
* * * * ***** *** * *** * ** ***
* * * * * ** * * * **
* * ****** * * * *
* * *** ** **
* * * ***** **
*** * *** * **
** * ** * ***
**** ** **** *** * ****
* ** ********** ** **
* ** **** **
* ** **** **
** ** *** *** ***
*** ** ** *
** * ** ******
**** ****** ***
**** * ***** ** ***
* * **** * * ** *****
**** * ****
* ** *
* *
* **
****** *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
'''
def print_rose_stage3():
return '''
************* **
******* ** ****** **
*** ** ********
**** *****
** **
** ** ** * * ***
** ** * ** * ** * * *
** * * * ** * * * *** *
** * ** * ** * ** *** * * ** * *
** * * * ** ** * ** * * * **
*** * * * ** * ** * * * * ** **
* * * * * * * * *** ***** * * * *****
* * * * *** * *** **** ** ** * ***
* * * * * * * * ** * * ** **
* * ** * * ** * * * * **
* ** * * * *** ** * ** ** * *
* * * *** ** * ** ** *
* * *** ** **** ** **
* * ** ** *** ** * **
** * ** **** * * **
*** * ** *** * **
** * ** ****
** * ** ****** *** ****
* * ** ************** *** ***
** ** **** **
* ** **** *
** ** *** ** **
** *** * *** ** ***
** ** ** ** *** * *
** ** ** *** * ***
*** ** ****
** **** * *** ***
***** ** ***** ***
**** * * ***** ******* * **
* * **** * ** * *
**** *** **
* *******
* ** * *
* * * *
** **
** ** *
****** *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
'''
def print_rose_stage4():
return '''
* **
*********** ********** *****
***** ************
**** *******
*** ***
** ***
** ** **
** ** **
** *** ** ** * ** * *
** * ** * ** ** ** * * ** *
** * * * ** *** *** **** * * *
** * * ** ** * * * * * ***
*** * * ** * ** * *** ** ** ***
* ** * ** * * * * ** * * **** * ******
* * * * * * * * ********* * * * *** **
* * * * * * * ** *** *** * * ** **
* * *** * ** * * * *** * * ** ***
* * * * * ** * * * * *
* ** **** * ******** *** * * *
* ** **** * * ** ** *
* * * ***** *** **
* * *** **** * ** **
** * ** ***** **** **
** * ** **** ***
*** * ** **** ***
** * * ** ** * ***
*** * ** **** *** ****
** * ** ***************** *** ***
* ** **** **
* ** **** *
* ** **** * **
** ** **** ***
** ** *** * ***
** ** ** *** * *
*** ** *** * ***
**** *** *****
** *** *** ***
** ***** ** ***
**** * **** *** ***
***** ** *** **** ********* ***
* * ****** * * *** *
*** ** **
* *******
** * * *
* ** *
* * * *
** * * *
** *** *
**** * *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
'''
def print_centered(text):
# 获取终端大小
terminal_width = os.get_terminal_size().columns
terminal_height = os.get_terminal_size().lines
# 分割文本为行
lines = text.split('\n')
# 计算垂直居中的起始位置
vertical_padding = (terminal_height - len(lines)) // 2
# 打印垂直空行
print('\n' * vertical_padding)
# 打印每一行,水平居中
for line in lines:
print(line.center(terminal_width))
def animate_rose():
stages = [
print_rose_stage1(),
print_rose_stage2(),
print_rose_stage3(),
print_rose_stage4(),
]
for stage in stages:
clear_screen()
print_centered(Fore.RED+ stage + Fore.RESET)
time.sleep(0.8)
def main():
try:
# 设置全屏
set_fullscreen()
# 隐藏光标
os.system('powershell -command "$Host.UI.RawUI.CursorSize = 0"')
# 播放玫瑰花绽放动画
animate_rose()
# 最终状态
clear_screen()
print_centered(Fore.RED + print_rose_stage4() + Fore.RESET)
#print_centered(Fore.WHITE + "\n按任意键退出..." + Fore.RESET)
os.system('pause >nul')
except Exception as e:
print(f"发生错误: {e}")
os.system('pause')
if __name__ == "__main__":
main()
stages
内包含多个玫瑰不同成长阶段的图案。通过在每一帧清屏、居中打印,并设置适当延迟来实现。
1.2 使用方法
注意需要提前在windows上安装好python环境,如果不知道可以评论区留言,我教你怎么装python环境。
1.2.1 复制代码保存为rose.py
文档
1.2.2 安装必要的包
pip install colorama pyinstaller
1.2.3使用以下命令生成exe文件:
pyinstaller --onefile rose.py
在最后会生成的一个 rose.exe
文档, 在dist
文件夹中找到,可以在所有的window电脑上执行了,如有问题,记得在评论区@我!!!如果想要我已经生成好的文档,也可以评论区直接@我!
1.3 最后的效果
这里面提供的玫瑰图案实在是太丑了,没来得及弄精美的图案,如果大家有玫瑰图案的便捷制作思路,欢迎大家评论区交流!!!
2. 扩展功能:展示额外的祝福文字
如果你希望在玫瑰旁或者动画结束时,添加祝福语、表白文字等内容,可以通过简单修改满足细腻的表达需求。
2.1 动画结束后显示祝福语
修改方法
动画结束后,加入祝福语的显示逻辑。改造后的代码如下:
def animate_rose():
stages = [
print_rose_stage1(),
print_rose_stage2(),
print_rose_stage3(),
print_rose_stage4()
]
for stage in stages:
clear_screen()
print_centered(Fore.RED + stage + Fore.RESET)
time.sleep(0.8)
# 玫瑰绽放完成后,展示祝福语
clear_screen()
print_centered(Fore.GREEN + "玫瑰赠与你,愿未来无比绚烂!🌹" + Fore.RESET)
print_centered(Fore.CYAN + "爱你的每一天,都是晴天!☀️" + Fore.RESET)
- 动画结束后清屏,避免画面杂乱。
- 使用不同的颜色(如绿色、青色)区分文字与玫瑰,让内容更具层次感。
你也可以换成自己的文字:
print_centered(Fore.MAGENTA + "与你相遇,便是我今生最美的风景。" + Fore.RESET)
2.2 动态动画中加入祝福文字
如果希望文字在动画进行时出现,可以将文字嵌套到某个阶段的展示逻辑中。例如,当玫瑰到达第3阶段时展示自定义文字:
def animate_rose():
stages = [
print_rose_stage1(),
print_rose_stage2(),
print_rose_stage3(),
print_rose_stage4()
]
for index, stage in enumerate(stages):
clear_screen()
print_centered(Fore.RED + stage + Fore.RESET)
if index == 2: # 第三帧时打印表白文字
print_centered(Fore.YELLOW + "\n初见你时,仿佛玫瑰正绽放..." + Fore.RESET)
time.sleep(0.8)
- 动态表白时:让对方随着画面呈现感受到心意渐深。
- 阶段式祝福:分步骤打印,如在最终阶段补上一句“谢谢你的倾听”。
2.3 打印静态祝福语
如果你希望只显示一段简单的静态祝福语,而没有动态动画的效果,只需借助 print_centered()
直接输出文字即可。
修改方法
在主函数 main()
中使用:
def main():
try:
set_fullscreen()
clear_screen()
# 居中显示静态祝福语
print_centered(Fore.CYAN + "在程序和人生中,愿始终与你并肩,拥抱未来!✨" + Fore.RESET)
print_centered(Fore.MAGENTA + "\n这世上动人的事情千千万,但我只心动于你💖" + Fore.RESET)
os.system('pause >nul') # 停止等待用户按键
except Exception as e:
print(f"发生错误: {e}")
os.system('pause')
通过这种方式,你可以快速输出节日问候、婚礼贺词等内容。
2.4 逐行或滚动播放文字
想制作一段逐行滚动播放的祝福语效果,可以借助循环模拟。如下所示:
新增代码
def animate_text():
messages = [
"愿你拥有鲜花般灿烂的每一天 🌹",
"愿我们一起走过所有春夏秋冬 🍁",
"玫瑰虽易谢,但情常盛 ❤️"
]
for message in messages:
clear_screen()
print_centered(Fore.YELLOW + message + Fore.RESET)
time.sleep(1.5) # 每段话停留1.5秒
使用方法
在 main()
中调用:
animate_text()
2.5 用户输入动态内容
如果你希望让用户输入一段话,例如表白内容或祝福,最终在屏幕中借助代码呈现,可以这样实现:
新增代码
def input_custom_message():
clear_screen()
message = input("请输入你想展示的祝福语:")
clear_screen()
print_centered(Fore.GREEN + message + Fore.RESET)
os.system('pause >nul')
操作流程
- 提示用户输入自定义内容。
- 使用
print_centered()
居中显示输入的文字。
3. 给你更多启发
除了显示文字和动态玫瑰,你还可以尝试以下技巧:
- 加入动态字体效果:例如逐字打印文字,像打字机特效一样逐步呈现内容。
- 画其他图案:除了玫瑰,还可以尝试用ASCII绘制星星、心形等图案,增加多样性。
- 生成动态提示:例如在屏幕闪烁“Happy Birthday!”或“我爱你”。
如果你还有更多创意,比如:
- 如何加入更多层次的动画?
- 是否可以用代码生成整段情景故事?
欢迎在评论区留言,让我们一起碰撞灵感,为日常的惊喜和浪漫注入Python的魔力!💻🌹
如果想要我已经生成好的rose.exe
,也可以评论区直接@我!
表白要有创意,代码的温柔从不会迟到!