[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

唉,都说批处理不适合写特效,于是这些天我打算学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 编辑 ]

  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. ::代码特点,在初始化时要较多时间,但是为刷屏争取到了时间
复制代码
1

评分人数

TOP

哇,好漂亮,先学习,有空研究

TOP

转行那里学习了(当然,以前也见到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 编辑 ]

TOP

返回列表