基于Batch实现带指定数字黄色高亮的矩阵数字雨
解决Batch矩阵数字雨的两个核心问题
问题A:单独高亮指定数字
要实现单个数字的颜色区分,不能整行调用颜色函数,必须逐个生成并判断每个数字:
- 先固定目标数字(比如
set "destined_digit=5") - 对每个生成的随机数字单独判断:匹配目标数字就用黄色(06)输出,否则用默认绿色(02)输出
- 依赖延迟扩展保证循环中变量能实时更新
问题B:实现多竖线矩阵雨效果
Batch没有原生数组,但可以用带后缀的变量模拟数组(比如col_1、col_2)跟踪每列状态:
- 定义矩阵列数、每列最大下落长度,控制雨滴的规模
- 逐行刷新屏幕,每列随机生成新数字,当列的长度达到上限后重置,模拟雨滴下落消失的效果
- 用短延迟控制刷新节奏,避免屏幕过度闪烁
完整改进代码
@echo off setlocal EnableDelayedExpansion color 02 :: 可自定义参数 set "destined_digit=5" :: 需要高亮的目标数字 set "cols=15" :: 矩阵雨的总列数 set "max_length=10" :: 每列雨滴的最大长度 set "delay=100" :: 刷新间隔(毫秒,值越小速度越快) :: 初始化每列的长度变量 for /l %%i in (1,1,%cols%) do set "col_len_%%i=0" :: 颜色输出工具函数 for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set "DEL=%%a" ) :color_print echo off echo !DEL! > "%~2" findstr /v /a:%1 /R "^$" "%~2" nul del "%~2" > nul 2>&1 goto :eof :loop cls :: 逐列生成当前行的数字 for /l %%i in (1,1,%cols%) do ( :: 生成单个随机数字 set "rand_num=!random:~-1!" :: 判断是否为目标数字,选择对应颜色输出 if "!rand_num!" equ "%destined_digit%" ( call :color_print 06 "!rand_num! " ) else ( call :color_print 02 "!rand_num! " ) :: 更新当前列的长度,超过上限后重置 set /a col_len_%%i+=1 if !col_len_%%i! gtr !max_length! set "col_len_%%i=0" ) :: 控制刷新速度 ping -n 1 -w %delay% 127.0.0.1 > nul goto loop
代码关键说明
- 用
col_len_%%i模拟数组,跟踪每列的下落进度,达到最大长度后重置,还原雨滴消失的视觉效果 - 每个数字单独调用颜色函数,实现目标数字的单独黄色高亮,不干扰整体绿色矩阵雨
- 修改
cols、max_length、delay这三个参数,可以自定义矩阵雨的宽度、雨滴长度和下落速度
内容的提问来源于stack exchange,提问作者keikats
相关产品推荐
相关产品推荐

