
簡單的VT100繪圖引擎支持24位色最后由 HOPE 于 -9-11 12:11前兩天無意中看到用批處理制作繪圖引擎的提議。仔細想了一下,覺得在Windows 10中使用控制臺虛擬終端序列制作還是挺簡單的。于是我將常用的VT100轉義寫成了函數,下面是一些簡單的實例:VT 100 動畫 - 本樓中秋節快樂藝術字海報 - 2樓進度條時鐘 - 3 樓
運行效果:nclick="copycode($('code0'));">復制代碼
- @Mode Con: Cols=80 Lines=25 & Chcp 936 > Nul & @SetLocal Enableextensions & @Echo Off
- %= 利用 VT100 虛擬終端序列來制作繪圖引擎的實例 =%
- @Goto :Main
- :Main
- @Call :Ani
- Pause > Nul
- @Exit /B 0
- :Ani
- Call :SetConsoleCursorInfo 1 1
- Call :SetConsoleTextAttribute 0-0-0 0-128-0
- Call :Type Welcome to the
- Call :SetConsoleTextAttributeEx 4
- Call :Type future
- Call :SetConsoleTextAttributeEx 5
- Call :Type .
- TimeOut /T 2 > Nul 2> Nul
- Call :SetConsoleCursorInfo 2 0
- Cls
- For /L %%I in (0,1,2) Do (
- Call :GotoXY 1 13
- Set /P=Welcome to the future.< Nul
- For /L %%I in (1,1,58) Do (
- Help > Nul 2> Nul
- Call :GotoXY %%I 13
- Set /P=# Welcome to the future.< Nul
- )
- For /L %%I in (58,-1,1) Do (
- Help > Nul 2> Nul
- Call :GotoXY %%I 13
- Set /P=Welcome to the future. < Nul
- )
- )
- Cls
- For /L %%I in (0,16,255) Do (
- For /L %%J in (0,16,255) Do (
- For /L %%K in (0,16,255) Do (
- Call :SetConsoleTextAttribute %%I-%%J-%%K %%I-%%J-%%K
- Set /P=#< Nul
- )
- )
- )
- @Goto :Eof
- %================================================================%
- %= 日期:年 9 月 10 日 =%
- %= 名稱: Type =%
- %= 作用: 模擬打字 =%
- %= 參數: String 要顯示的字符串 =%
- %= 備注: 此函數要訪問環境變量 _._ =%
- %================================================================%
- :Type <String>
- If %~1== @Goto :Eof
- Set _._=%~1
- Set /P=#%_._:~0,1%< Nul
- Set _._=%_._:~1%
- TimeOut /T 0 > Nul 2> Nul
- If Defined _._ @Call :Type %_._%
- @Goto :Eof
- %================================================================================================================================%
- %= VT100 函數 =%
- %================================================================================================================================%
- %================================================================%
- %= 日期:年 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
- %================================================================%
- %= 日期:年 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
- %================================================================%
- %= 日期:年 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
- %================================================================%
- %= 日期:年 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
- %================================================================%
- %= 日期:年 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

