- @echo off&setlocal enabledelayedexpansion
-
- title 【独立不定速重力弹珠】 WIN10 CMD 调试通过。
- rem 由netbenton,发表于批处理之家,最后编辑时间:2021年11月6日
-
- ::定义缓冲区大小
- mode con: cols=81 lines=30&color 1f
-
- ::取一个40个全角空格字符串
- for /l %%i in (1 1 40) do set "spa= !spa!"
-
- ::取一个回车换行符到变量
- set CR=^
-
-
- ::定义弹珠个数
- for /l %%a in (1,1,7) do set curs=!curs! a%%a
-
- ::定义随机数的上限,用于调节速度
- set avar=30
-
-
- ::随机生成弹珠
- for %%a in (%curs%) do (
- set /a "%%ar=!random! %% %avar% +10"%/随机速度/%
- set /a "%%as=1,%%ah=1"%/步进方向/%
- set /a "%%av=!random!%%40,%%ai=!random!%%30"%/开始坐标/%
- )
-
- :loop
- (
- for %%a in (%curs%) do (
- if !%%aw! leq 0 (
- set /a %%aw=%%ar*19/38%/倒计数/%
- set/a %%ai+=%%as,%%av+=%%ah%/步进一次/%
- if !%%as! lss 0 (set /a %%ar+=1) else (set/a %%ar-=1)%/加速和减速/%
- )
- set /a %%aw-=1,#v=%%av+1
- for /f "tokens=1,2,3" %%b in ("!%%av! !#v! ec!%%ai!") do (%/值一、值二替换字符串的位置,值三为正在处理哪一行/%
-
- if defined %%d (set ec!%%ai!=!%%d:~,%%b!●!%%d:~%%c!) else (set ec!%%ai!=!spa:~,%%b!●!spa:~%%c!)%/一行同时有两个弹珠时处理方式不同/%
- )
- )
-
- set ecs=
- for /l %%i in (0 1 29) do set ecs=!ecs!!ec%%i!]!cr!
- cls&<nul set /p=珠!ecs:~1,-1!
- %/把多行连接到一个变量,cls后,同时显示,增加速度,避免闪烁。/%
- %/使用!cr!变量的换行符换行。/%
- %/set /p 显示会丢失开始的空格,造成显示错误,所以第一个字符加了”珠“字/%
- %/系统对空格和制表符做了优化,造成了想在cmd下显示图型越来越难。。。/%
-
-
- for %%a in (%curs%) do (
- set ec!%%ai!=%/清空缓存行/%
- if !%%av! geq 39 set/a %%ah=-1
- if !%%av! leq 0 set/a %%ah=1%//边界处理【反弹】//%
- if !%%ai! leq 0 set/a %%as=1
- if !%%ai! geq 29 set/a %%as=-1
- )
-
- for /l %%i in (1 1 25) do ver>nul%/延时,避免闪烁/%
-
- goto :loop
- )
复制代码
|