找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25341|回复: 7

[游戏娱乐] 批处理[显示特效]有重力的弹珠

[复制链接]
发表于 2011-3-26 20:41:57 | 显示全部楼层 |阅读模式
  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. )
复制代码

评分

参与人数 1技术 +1 收起 理由
vsbat + 1 EN

查看全部评分

发表于 2011-3-26 22:20:47 | 显示全部楼层
怎么说呢~ 批处理用到这份上真是不容易了
发表于 2011-3-27 09:36:52 | 显示全部楼层
我觉得楼主对变量的应用相当灵活,很有特色,特别是在楼主的一些复杂脚本中。有空写点简单例子出来让大家学习学习?呵呵...
发表于 2011-3-27 09:39:54 | 显示全部楼层
太高级了!up
有个想法,引入tab退行之后,貌似还可以实现拖影...
发表于 2011-3-27 14:22:21 | 显示全部楼层
为什么是cols=81呢?试了一下cols=80也是没有问题的
发表于 2011-4-12 14:59:56 | 显示全部楼层
好好研究,肯定会学习到很多东西...
发表于 2011-4-13 08:56:12 | 显示全部楼层
真是高手呀
 楼主| 发表于 2021-11-6 02:35:12 | 显示全部楼层
  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. )
复制代码

评分

参与人数 1PB +6 技术 +1 收起 理由
523066680 + 6 + 1 一种爱好

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:18 , Processed in 0.019915 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表