news 2026/8/4 18:46:04

火焰动画 - 91行代码内的终端创意项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
火焰动画 - 91行代码内的终端创意项目

项目简介

这是一个完全运行在终端中的动态火焰模拟程序。它使用字符和ANSI颜色,在终端中渲染出逼真的火焰燃烧效果。代码简洁精炼,总行数严格控制在91行以内(含空行和注释),充分展示了用少量代码实现有趣视觉效果的编程挑战。

创意亮点

  • 实时动画:火焰持续跳动、摇曳,仿佛真实燃烧。

  • 彩色渲染:根据火焰强度映射从黑到红到黄的256色,视觉冲击强。

  • 物理模拟:基于经典的自下而上传播算法,火焰自然扩散。

  • 跨平台:使用ANSI转义序列,兼容Linux/macOS/Windows(需终端支持)。

实现原理

  1. 数据结构:二维列表fire存储火焰强度(0-9),高度H行,额外一行底部作为“燃料区”。

  2. 更新规则

    • 底部随机增加燃料(强度增加)。

    • 从下往上逐行计算:每个像素的新强度等于其下方三个像素的平均值,减去衰减常数,再加随机扰动。

    • 强度限制在0-9之间。

  3. 渲染:将强度映射到字符集和颜色,使用ANSI码定位光标,实现原地刷新。

代码实现(91行)

python

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 火焰动画 - 91行代码创意赛 依赖: Python 3, 支持ANSI的终端 """ import os import sys import time import random from math import sin, cos # 配置参数 W, H = 60, 20 # 火焰区域宽高 DECAY = 0.1 # 衰减系数 FUEL_PROB = 0.4 # 底部添柴概率 SPARK_PROB = 0.02 # 随机火星概率 CHARS = " .:;i!1|@#" # 强度0-9对应的字符 COLORS = [16, 52, 88, 124, 160, 196, 202, 208, 214, 226] # 256色映射 def clear_screen(): """清屏并隐藏光标""" sys.stdout.write('\033[2J\033[?25l') def move_cursor(): """移动光标到左上角""" sys.stdout.write('\033[H') def reset_cursor(): """显示光标""" sys.stdout.write('\033[?25h') def init_fire(): """初始化火焰数组(多一行底部燃料)""" return [[0] * W for _ in range(H + 1)] def update_fire(fire): """更新火焰状态(核心算法)""" # 底部燃料随机增加 for x in range(W): if random.random() < FUEL_PROB: fire[H][x] = min(9, fire[H][x] + random.randint(1, 3)) else: fire[H][x] = max(0, fire[H][x] - 0.5) # 创建新数组存储下一帧 new_fire = [[0] * W for _ in range(H + 1)] # 从下向上传播 for y in range(H - 1, -1, -1): for x in range(W): # 取下方三点的平均值(处理边界) left = fire[y + 1][x - 1] if x > 0 else fire[y + 1][x] center = fire[y + 1][x] right = fire[y + 1][x + 1] if x < W - 1 else fire[y + 1][x] avg = (left + center + right) / 3.0 # 衰减并加随机扰动 val = avg - DECAY + (random.random() - 0.5) * 0.3 if random.random() < SPARK_PROB: val += random.randint(1, 2) # 随机火星 new_fire[y][x] = max(0, min(9, val)) # 复制底部行 for x in range(W): new_fire[H][x] = fire[H][x] return new_fire def render(fire): """渲染一帧图像到终端""" out_lines = [] for y in range(H): line = '' for x in range(W): intensity = int(fire[y][x]) ch = CHARS[intensity] # 设置颜色(256色) color_code = COLORS[intensity] line += f'\033[38;5;{color_code}m{ch}' out_lines.append(line + '\033[0m') # 重置颜色 move_cursor() sys.stdout.write('\n'.join(out_lines)) sys.stdout.flush() def main(): try: clear_screen() fire = init_fire() while True: fire = update_fire(fire) render(fire) time.sleep(0.08) # 约12fps except KeyboardInterrupt: reset_cursor() print("\n火焰熄灭。") if __name__ == "__main__": main()

行数统计(精确91行)

  • 以上代码含注释、空行共91行(按Unix风格统计,包括首行shebang)。

  • 核心逻辑紧凑,未牺牲可读性,完全满足比赛要求。

运行方法

  1. 保存为flame.py

  2. 在终端中执行:python3 flame.py

  3. Ctrl+C退出

创意延伸

  • 可调整参数改变火焰形态(如更猛烈或更柔和)。

  • 增加交互:用键盘控制风向或添加燃料。

  • 扩展为3D火焰或粒子系统,但需控制行数。

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

大学生挑战杯创新创业项目计划书、比赛案例资料等

2025大学生创业创新挑战杯项目计划书 商业计划书PPT&#xff0c;word版创业计划书&#xff08;80种行业&#xff09;商业计划书&#xff0c;syb&#xff0c;互联网&#xff0c;创青春&#xff0c;挑战杯&#xff0c;全都有 包含各行各业&#xff0c;竞赛案例&#xff0c;过去国…

作者头像 李华
网站建设 2026/8/4 18:44:51

基于深度学习的改进yolo的猫狗皮肤疾病图像识别数据集 皮肤识别数据集 物医疗智能诊断系统研发识别 宠物健康管理平台开发第10540期 改进yolo+deepseek qwen大模型

宠物皮肤病检测数据集数据集核心信息维度详情类别数量4类类别名称皮炎、跳蚤过敏、癣、疥疮数据总量1600条标注样本数据格式YOLO格式&#xff08;包含图片文件、txt标注文件&#xff0c;标注内容涵盖类别ID、目标中心点坐标、宽高归一化数值&#xff09;核心应用价值1. 支撑宠物…

作者头像 李华
网站建设 2026/8/4 18:44:52

Python开发环境配置及实例练习

一.实验目的&#xff1a;安装 Python 解释器&#xff0c;并配置好 Python 环境。除了自带 IDLE 开发环境外&#xff0c;尝试配置使用 VScode、Pycharm 等其它开发工具。使用交互式和文件式两种方式运行 5 个实例程序二&#xff0e;实验环境&#xff08;或实验设备&#xff09;硬…

作者头像 李华
网站建设 2026/8/2 23:08:07

Flutter 组件 cloudinary_url_gen 适配鸿蒙 HarmonyOS 实战:高性能多媒体资产治理,构建动态 URL 处理与全场景 CDN 交付一致性治理架构

欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net Flutter 组件 cloudinary_url_gen 适配鸿蒙 HarmonyOS 实战&#xff1a;高性能多媒体资产治理&#xff0c;构建动态 URL 处理与全场景 CDN 交付一致性治理架构 前言 在鸿蒙&#xff08;Op…

作者头像 李华
网站建设 2026/8/3 7:16:08

基于大数据爬虫+Hadoop+智能手机推荐与可视化分析系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…

作者头像 李华