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

[特效代码] [求助]渐显效果的批处理优化

[复制链接]
发表于 2009-11-21 20:33:47 | 显示全部楼层 |阅读模式
唉,都说批处理不适合写特效,于是这些天我打算学opengl去,
折腾了一段时间,现在才懂一些基础操作,
想先做个简单的用批处理做过的效果,结果马上就碰钉了。
       我想写一个渐显的效果先看下高彩和高分辨率的效果~
思路和下面类似,但是高分辨率的假如是选择500*500的大小,
用这个思路做,那就是250000个变量啊 TxT
寻求比较节省资源的思路……
用批处理做,效率低的问题也更明显~ 你看,连ping 都不用……
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a cols=20,lines=10,act=0
  4. for /l %%a in (1,1,%cols%) do (set spc=+!spc!)
  5. for /l %%a in (1,1,%lines%) do (set l%%a=%spc%)
  6. for /l %%a in (1,1,%cols%) do (
  7. for /l %%b in (1,1,%lines%) do (
  8.     set /a act+=1
  9.     set num[!act!]="x=%%a,y=%%b"
  10. )
  11. )
  12. :act
  13.   set /a rand=%random% %% act + 1
  14.   set /a !num[%rand%]:"=!,xa=x-1
  15.   set num[%rand%]=!num[%act%]!
  16.   set l%y%=!l%y%:~0,%xa%! !l%y%:~%x%!
  17.   cls
  18.   for /l %%a in (1,1,%lines%) do (echo,!l%%a!)
  19. if %act% gtr 0 (set /a act-=1 &goto :act)
  20. pause
复制代码
在用c语言做的时候,临时解决这个是把点放大,于是坐标就放宽了……
见图

[ 本帖最后由 523066680 于 2009-11-21 21:05 编辑 ]
发表于 2009-11-21 22:30:39 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a cols=40,lines=20,act=0

  3. set cr=^


  4. rem 定义换行符号到变量,(注意要空两行)

  5. for /l %%a in (1,1,%cols%) do (set spc=+!spc!)
  6. for /l %%a in (1,1,%lines%) do (
  7.         set l%%a=%spc%

  8.         set ech=!ech!^^!L%%a^^!^^!cr^^!
  9.         rem 保存显示行变量名

  10.         set rrr=!rrr! ^^!RR%%a^^!
  11.         rem 保存随机数据变量名

  12.         for /l %%b in (1,1,%cols%) do (
  13.           set /a ra=!random!%%%lines%+1,rb=!random!%%2
  14.                 for %%c in (!ra!) do (
  15.                   if !rb! equ 0 (
  16.                         set RR%%c=!RR%%c! %%a_%%b
  17.                   ) else (
  18.                         set RR%%c=%%a_%%b !RR%%c!
  19.                   )
  20.                 )
  21.         )
  22. )
  23. rem 第一次打乱


  24. for %%a in (%rrr%) do (
  25.   set /a ra=!random!%%%lines%+1,rb=!random!%%2
  26.         for %%c in (!ra!) do (
  27.           if !rb! equ 0 (
  28.                 set RC%%c=!RC%%c! %%a
  29.           ) else (
  30.                 set RC%%c=%%a !RC%%c!
  31.           )
  32.         )
  33. )
  34. rem 第二次打乱


  35. rem 将打乱的空间数据按顺序取用
  36. for %%a in (%rrr:RR=RC%) do (
  37.   for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  38.         set/a x=%%c-1
  39.         for %%d in (!x!) do (
  40.            set l%%b=!l%%b:~0,%%d! !l%%b:~%%c!
  41.         )
  42.   )
  43.   cls&echo;%ech%
  44.   rem %ech% =>!L1!!cr!!L2!!cr!... =>显示数据
  45. )

  46. pause
  47. ::代码特点,在初始化时要较多时间,但是为刷屏争取到了时间
复制代码

评分

参与人数 1PB +18 收起 理由
523066680 + 18 感谢回帖

查看全部评分

发表于 2009-11-22 12:02:37 | 显示全部楼层
哇,好漂亮,先学习,有空研究
 楼主| 发表于 2009-11-22 12:08:58 | 显示全部楼层
转行那里学习了(当然,以前也见到netbenton用拉~)

在打乱上,我觉得用排除法还是不错的,
一维数组也可以用来记录二维信息,只要知道列和行即可实现,

我会把一维数组指定范围内随机抽取,然后缩小范围,把缩小后范围外没抽取的值拉进来
(反正固定是 抽取过的变量=此次被排在外的变量,假如抽的刚好就是被排的那个,那也刚好被排除了。
不用判断^_^)
(然后想了很久都没想到可以节省储存空间的思路。于是在c中就把点放大了做。)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a cols=20,lines=10,max=cols*lines
  4. for /l %%a in (1,1,%cols%) do (set spc=+!spc!)
  5. for /l %%a in (1,1,%lines%) do (set l%%a=%spc%)
  6. for /l %%a in (1,1,%max%) do (set num[%%a]=%%a)
  7. :act
  8.   set /a rand=%random% %% max + 1
  9.   set /a x=num[%rand%]%%cols,y=(num[%rand%]-1)/cols+1,xb=x+1
  10.   set /a num[%rand%]=num[%max%]
  11.   set l%y%=!l%y%:~0,%x%! !l%y%:~%xb%!
  12.   cls
  13.   for /l %%a in (1,1,%lines%) do (echo,!l%%a!)
  14. if %max% gtr 1 (set /a max-=1 &goto :act)
  15. pause
复制代码

[ 本帖最后由 523066680 于 2009-11-22 12:19 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 08:25 , Processed in 0.018706 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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