| @echo off&setlocal enabledelayedexpansion | | | | title 【独立不定速重力弹珠】 WIN10 CMD 调试通过。 | | | | | | ::定义缓冲区大小 | | 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 | | )COPY |
|