Board logo

标题: [游戏娱乐] 批处理[显示特效]有重力的弹珠 [打印本页]

作者: netbenton    时间: 2011-3-26 20:41     标题: 批处理[显示特效]有重力的弹珠

  1. @echo off&setlocal enabledelayedexpansion
  2. mode con: cols=81 lines=30&color 1f
  3. for /l %%i in (1 1 40) do set "spa=  !spa!"
  4. set cr=^
  5. ::在这个变量定义弹珠个数
  6. set curs=a1 a2 a3 a4 a5 a6 a7
  7. set avar=30
  8. ::定义随机数的上限
  9. ::随机定位
  10. for %%a in (%curs%) do (
  11. set /a "%%ar=!random! %% %avar% +10"
  12. set /a %%as=1,%%ah=2
  13. set /a %%av=!random!%%40*2,%%ai=!random!%%30
  14. )
  15. :loop
  16. (
  17. for %%a in (%curs%) do (
  18.     if !%%aw! leq 0 (
  19. set /a %%aw=%%ar*22/38
  20. set/a %%ai+=%%as,%%av+=%%ah
  21. if !%%as! lss 0 (set /a %%ar+=1) else (set/a %%ar-=1)
  22.     )
  23.         set /a %%aw-=1,#v=%%av+2
  24. for /f "tokens=1,2,3" %%b in ("!%%av! !#v! ec!%%ai!") do (
  25. if defined %%d (set ec!%%ai!=!%%d:~,%%b!●!%%d:~%%c!) else (set ec!%%ai!=!spa:~,%%b!●!spa:~%%c!)
  26. )
  27. )
  28. set ecs=
  29. for /l %%i in (0 1 29) do set ecs=!ecs!!ec%%i!!cr!
  30. cls&set/p=!ecs:~,-1!<nul
  31. for %%a in (%curs%) do (
  32.   set ec!%%ai!=
  33.   if !%%av! geq 78 set/a %%ah=-2
  34.   if !%%av! leq 0 set/a %%ah=2
  35.   if !%%ai! leq 0 set/a %%as=1
  36.   if !%%ai! geq 29 set/a %%as=-1
  37. )
  38. for /l %%i in (1 1 25) do ver>nul
  39. goto :loop
  40. )
复制代码

作者: 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

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





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2