本帖最后由 HOPE2021 于 2022-9-11 21:47 编辑
今天是中秋节,我以此作品祝大家中秋节快乐:- @Mode Con: Cols=160 Lines=20 & Chcp 437 > Nul & Title Happy Mid-Autumn Day! & @SetLocal EnableExtensions EnableDelayedExpansion & @Echo Off
- %= 利用 VT100 虚拟终端序列来制作绘图引擎的实例 =%
- %= 此程序必须保存为ANSI编码 =%
- If "%1"=="" (
- For %%a in ( FontSize:0006000C
- ) Do For /F "tokens=1,2 delims=:" %%b in ("%%a") do (
- > Nul Reg Add HKCU\Console\Happy_Mid_Autumn_Day /V %%b /T Reg_DWORD /D 0x%%c /F
- )
- Start "Happy_Mid_Autumn_Day" "%ComSpec%" /C "%~s0" 1 & @Goto :Eof
-
- ) Else (
- > Nul Reg Delete HKCU\Console\Happy_Mid_Autumn_Day /F
- )
- @Goto :Main
-
- :Main
- @Call :Ani
- Pause > Nul
- @Exit /B 0
-
- :Ani
- Set "Chr[1]=0x0100,0x0100,0x0104,0x7FFE,0x4104,0x4104,0x4104,0x4104,0x7FFC,0x4104,0x0100,0x0100,0x0100,0x0100,0x0100,0x0100"
- Set "Chr[2]=0x0840,0x1C40,0xF040,0x1040,0x1144,0xFD4C,0x1150,0x3240,0x3840,0x54A0,0x50A0,0x9110,0x1108,0x120E,0x1404,0x1800"
- Set "Chr[3]=0x1080,0x1080,0x1080,0x1088,0x5BFC,0x5488,0x5088,0x9088,0x1088,0x1FFE,0x1080,0x1140,0x1120,0x1210,0x140E,0x1804"
- Set "Chr[4]=0x0020,0x00F0,0x1F00,0x1000,0x1100,0x1100,0x2104,0x7FFE,0x0100,0x0100,0x0920,0x0910,0x1108,0x210C,0x4504,0x0200"
- @Call :SetConsoleCursorInfo 2 2
- @Call :SetConsoleTextAttribute 0-0-0 251-193-1
- Cls
- @Call :DrawMoon
- @Call :SetConsoleTextAttribute 0-0-0 16-132-186
- @Call :DrawChr 22 3 "%Chr[1]%"
- @Call :DrawChr 57 3 "%Chr[2]%"
- @Call :DrawChr 92 3 "%Chr[3]%"
- @Call :DrawChr 127 3 "%Chr[4]%"
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 10 日 =%
- %= 名称: DrawMoon =%
- %= 作用: 输出月亮 =%
- %= 备注: 此函数要访问环境变量 _x_ / _y_ / _Temp_ =%
- %================================================================%
- :DrawMoon
- %={=%
- Set _x_=1
- Set _y_=1
- For /L %%_ in (1,1,11) Do (
- Set /A "_y_=%%_"
- For /L %%? in (1,1,11) Do (
- Set /A "_x_=%%?"
- Set /A "_Temp_=!_x_!*!_x_!+!_y_!*!_y_!-121"
- If !_Temp_! Leq 0 Set /P=圹< Nul
- )
- @Call :GotoXY 1 %%_
- )
- %={=%
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 10 日 =%
- %= 名称: DrawChr =%
- %= 作用: 输出点阵字符 =%
- %= 参数: x 字符左上角 X 轴坐标 =%
- %= 参数: y 字符左上角 Y 轴坐标 =%
- %= 参数: Code 点阵数据 =%
- %= 备注: 此函数要访问环境变量 _._ / _.._ / _..._ / _x_ / _y_ =%
- %================================================================%
- :DrawChr <x> <y> <Code>
- %={=%
- Set /A "_x_=%1"
- Set /A "_y_=%2"
- For %%_ in (%~3) Do (
- Set "_..._="
- Set /A "_.._=0"
- Set /A "_._=%%_"
- For /L %%? in (0,1,15) Do (
- Set /A "_.._=!_._!%%2"
- Set "_..._=!_.._!!_..._!"
- Set /A "_._=!_._!-!_.._!"
- Set /A "_._=_._/2"
- )
- Set _..._=!_..._:1=圹!
- Set _..._=!_..._:0= !
- Call :GotoXY !_x_! !_y_!
- Echo.!_..._!
- Set /A "_y_+=1"
- %= 下面这句是为了让画面更有年代感,可以删去 =%
- Help > Nul 2> Nul
- )
- Echo.
- %=}=%
- @Goto :Eof
-
- %================================================================================================================================%
- %= VT100 函数 =%
- %================================================================================================================================%
-
- %================================================================%
- %= 日期: 2022 年 9 月 9 日 =%
- %= 名称: InitVT100 =%
- %= 作用: 初始化 Windows 10 的 虚拟终端序列 =%
- %================================================================%
- :InitVT100
- %= { =%
-
- %= 获取 ESC 字符 =%
-
- Set "ESC="
-
- %= 如果没有定义 ESC 字符,这个过程是为了防止论坛误吞上文的 ESC 字符 =%
- If Not Defined ESC (
-
- For /F "Delims=#" %%_ in ('Prompt #$E# ^& Echo On ^& For %%$ in ^(1^) Do DosKey') Do Set "ESC=%%_"
-
- )
-
- %= } =%
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 9 日 =%
- %= 名称: GotoXY =%
- %= 作用: 定位光标到指定位置 =%
- %= 参数: X 光标的 X 轴坐标,如果省略或设为 0,则设其为1 =%
- %= 参数: Y 光标的 Y 轴坐标,如果省略或设为 0,则设其为1 =%
- %================================================================%
- :GotoXY <X> <Y>
- %= { =%
-
- %= 如果没有定义 ESC 字符 =%
- If Not Defined ESC (
-
- @Call :InitVT100
-
- )
-
- %= 定位光标 =%
- Set /P=%ESC%[%2;%1H< Nul
-
- %= } =%
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 9 日 =%
- %= 名称: SetConsoleTextAttribute =%
- %= 作用: 设置控制台文本颜色 =%
- %= 参数: BGCOL 背景 RGB 颜色值,格式为R-G-B =%
- %= 参数: FGCOL 前景 RGB 颜色值,格式为R-G-B =%
- %================================================================%
- :SetConsoleTextAttribute <BGCOL> <FGCOL>
- %= { =%
-
- %= 如果没有定义 ESC 字符 =%
- If Not Defined ESC (
-
- @Call :InitVT100
-
- )
-
- %= 设置背景色 =%
- For /F "Delims=-, Tokens=1,2,3" %%I in ("%1") Do (
- Set /P=%ESC%[48;2;%%I;%%J;%%Km< Nul
- )
-
- %= 设置前景色 =%
- For /F "Delims=-, Tokens=1,2,3" %%I in ("%2") Do (
- Set /P=%ESC%[38;2;%%I;%%J;%%Km< Nul
- )
-
- %= } =%
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 9 日 =%
- %= 名称: SetConsoleCursorInfo =%
- %= 作用: 设置控制台光标属性 =%
- %= 参数: CursorVisibility 光标可见和闪烁状态,取值1~4,分别为: =%
- %= 1 显示光标 =%
- %= 2 隐藏光标 =%
- %= 3 开始光标闪烁 =%
- %= 4 停止闪烁光标 =%
- %= 参数: CursorShape 自定义光标形状,取值0~6,分别为: =%
- %= 0 用户配置的默认光标形状 =%
- %= 1 闪烁块光标形状 =%
- %= 2 稳定块光标形状 =%
- %= 3 闪烁下划线光标形状 =%
- %= 4 稳定下划线光标形状 =%
- %= 5 闪烁条形光标形状 =%
- %= 6 稳定条形光标形状 =%
- %================================================================%
- :SetConsoleCursorInfo <CursorVisibility> <CursorShape>
- %= { =%
-
- %= 如果没有定义 ESC 字符 =%
- If Not Defined ESC (
-
- @Call :InitVT100
-
- )
-
- %= 设置光标可见和闪烁状态 =%
- For /F "Delims=-, Tokens=%1" %%I in ("25h-25l-12h-12l") Do (
- Set /P=%ESC%[?%%I< Nul
- )
-
- Set /P=%ESC%[%2 q< Nul
-
- %= } =%
- @Goto :Eof
-
- %================================================================%
- %= 日期: 2022 年 9 月 9 日 =%
- %= 名称: SetConsoleTextAttributeEx =%
- %= 作用: 格式化控制台文本 =%
- %= 参数: Code 操作代码,取值1~6,分别为: =%
- %= 1 默认,通常相当于Color 07 =%
- %= 2 粗体/亮 =%
- %= 3 无粗体/亮 =%
- %= 4 下划线 =%
- %= 5 无下划线 =%
- %= 6 交换前景色和背景色 =%
- %================================================================%
- :SetConsoleTextAttributeEx <Code>
- %= { =%
-
- %= 如果没有定义 ESC 字符 =%
- If Not Defined ESC (
-
- @Call :InitVT100
-
- )
-
- For /F "Delims=-, Tokens=%1" %%I in ("0-1-22-4-24-7") Do (
- Set /P=%ESC%[%%Im< Nul
- )
-
- %= } =%
- @Goto :Eof
复制代码
|