标题: [游戏娱乐] 批处理[显示特效]有重力的弹珠 [打印本页]
作者: netbenton 时间: 2011-3-26 20:41 标题: 批处理[显示特效]有重力的弹珠
- @echo off&setlocal enabledelayedexpansion
- mode con: cols=81 lines=30&color 1f
- for /l %%i in (1 1 40) do set "spa= !spa!"
- set cr=^
-
-
- ::在这个变量定义弹珠个数
- set curs=a1 a2 a3 a4 a5 a6 a7
-
- set avar=30
- ::定义随机数的上限
-
- ::随机定位
- for %%a in (%curs%) do (
- set /a "%%ar=!random! %% %avar% +10"
- set /a %%as=1,%%ah=2
- set /a %%av=!random!%%40*2,%%ai=!random!%%30
- )
-
- :loop
- (
- for %%a in (%curs%) do (
- if !%%aw! leq 0 (
- set /a %%aw=%%ar*22/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+2
- 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&set/p=!ecs:~,-1!<nul
- for %%a in (%curs%) do (
- set ec!%%ai!=
- if !%%av! geq 78 set/a %%ah=-2
- if !%%av! leq 0 set/a %%ah=2
- 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
- )
复制代码
作者: vsbat 时间: 2011-3-26 22:20
怎么说呢~ 批处理用到这份上真是不容易了
作者: wankoilz 时间: 2011-3-27 09:36
我觉得楼主对变量的应用相当灵活,很有特色,特别是在楼主的一些复杂脚本中。有空写点简单例子出来让大家学习学习?呵呵...
作者: CrLf 时间: 2011-3-27 09:39
太高级了!up
有个想法,引入tab退行之后,貌似还可以实现拖影...
作者: wc726842270 时间: 2011-3-27 14:22
为什么是cols=81呢?试了一下cols=80也是没有问题的
作者: jay_16 时间: 2011-4-12 14:59
好好研究,肯定会学习到很多东西...
作者: 377961686 时间: 2011-4-13 08:56
真是高手呀
作者: netbenton 时间: 2021-11-6 02:35
- @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
- )
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |