Board logo

标题: [游戏娱乐] 批处理利用点阵制作小动画示例 [打印本页]

作者: batman    时间: 2008-9-19 10:36     标题: 批处理利用点阵制作小动画示例

之所以写下以下代码,主要目的还在于让大家都了解一下点阵及其应用
  1. @echo off&setlocal enabledelayedexpansion
  2. color 1f&mode con cols=46 lines=15
  3. for /f "skip=19 delims=" %%a in (%~fs0) do (
  4.     for %%b in (%%a) do (
  5.         cls&echo 当前坐标:%%b^(以当字位置为0-0^)
  6.         echo  ____________________________________________
  7.         for /f "tokens=1,2 delims=-" %%c in ("%%b") do (
  8.             for /l %%e in (1,1,%%d) do echo.
  9.             for /l %%f in (1,1,%%c) do set /p= <nul
  10.             set /p=★<nul&echo.
  11.             set /a num=9-%%d
  12.             for /l %%i in (1,1,!num!) do echo.
  13.             echo  ____________________________________________
  14.             for /l %%j in (1,1,1000) do echo>nul
  15.         )
  16.     )
  17. )
  18. pause>nul&goto :eof
  19. 以下是由横竖组坐标构成的点阵:
  20. 1-1 2-2 3-3 4-4 5-5 6-6 7-7 8-8 9-9
  21. 10-8 11-7 12-6 13-5 14-4 15-3 16-2 17-1
  22. 18-2 19-3 20-4 21-5 22-6 23-7 24-8 25-9
  23. 26-8 27-7 28-6 29-5 30-4 31-3 32-2 33-1
  24. 34-2 35-3 36-4 37-5 38-6 39-7 40-8 41-9
复制代码

作者: batman    时间: 2008-9-19 11:00

当然对以上这种有规律的情况,完全可以简化成如下代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. color 1f&mode con cols=46 lines=15
  3. for /l %%a in (1,1,41) do (
  4.     if defined - (
  5.        set "add=-"
  6.        ) else (
  7.        set "add=+"
  8.     )
  9.     set /a n!add!=1
  10.     if !n! equ 9 set "-=a"
  11.     if !n! equ 1 set "-="
  12.     cls&echo 当前坐标:%%a-!n!
  13.     echo  ____________________________________________
  14.     for /l %%b in (1,1,!n!) do echo.
  15.     for /l %%c in (1,1,%%a) do set /p= <nul
  16.     set /p=★<nul&echo.
  17.     set /a num=9-n
  18.     for /l %%e in (1,1,!num!) do echo.
  19.     echo  ____________________________________________
  20.     for /l %%f in (1,1,1000) do echo>nul
  21. )
  22. pause>nul
复制代码

作者: lixiaodaoaaa    时间: 2008-9-19 11:59     标题: 太难了

太难了,看不懂。。汗死啊。。
郁闷啊。。。
作者: wxcute    时间: 2008-9-19 13:18

哇,楼主用这个做个“桌面弹球”游戏不是很好玩?

[ 本帖最后由 wxcute 于 2008-9-19 13:20 编辑 ]
作者: hongcheng668    时间: 2009-11-10 21:06

code[ ]
echo 不懂 慢慢学习中
code[/]
作者: wzahj    时间: 2009-12-4 16:09

谢谢楼主了 支持了 啊
作者: neorobin    时间: 2009-12-13 00:37     标题: 回复 1楼 的帖子

点轨迹预存算法, 有空我想做个大动画~~
作者: 523066680    时间: 2009-12-13 09:44     标题: 回复 7楼 的帖子

偶曾经做过一个体力类动画(题外话。跟点阵无关~)
是老东西了,虽然外人看来很累赘,不过我觉得没精力去弄了。
瞧我签名还有老东西~
  1. @echo off
  2. title made by 523066680 2008-08-08
  3. ::这一版本由www.cn-dos.net & www.bathome.net 成员523066680编辑
  4. setlocal enabledelayedexpansion
  5. set fu= ^/ ^\
  6. set "kong=                                                                            "
  7. set "kong2=____________________________________________________________________________"
  8. set /a a=0,b=0,e=2,tiao=0
  9. :a
  10. set /a b+=1,c=30-%b%+%e%
  11. cls
  12. echo,  仁有三急……狂奔厕所中……¥#……
  13. for /l %%a in (1,1,6) do echo,
  14. echo,!kong:~0,%b%!_ @
  15. echo,!kong:~0,%b%! ^/
  16. echo,!kong2:~0,%b%!!fu:~%a%,2!!kong2:~0,%c%!
  17. ping -n>nul
  18. if %a% equ 4 (set /a a=0) else (set /a a+=1)
  19. if %a% leq 2 (set e=2)
  20. if %a% equ 3 (set e=3)
  21. if %a% equ 4 (set e=4)
  22. if not %b% equ 30 goto :a else goto :b
  23. set /a b=30,j=0,k=6
  24. :b
  25. if not %j% equ 6 (set /a j+=1,tiao=%j%) else (set /a k-=1,tiao=%k%)
  26. set /a b+=1,up=6-%tiao%
  27. cls
  28. for /l %%a in (1,1,%up%) do echo,
  29. echo,!kong:~0,%b%!  @/    偶跳
  30. echo,!kong:~0,%b%!^<^/
  31. echo,!kong:~0,%b%!!/^>   
  32. for /l %%a in (1,1,%tiao%) do echo,
  33. echo,!kong2:~0,30!
  34. ping -n>nul&ping -n>nul
  35. if %a% equ 4 (set /a a=0) else (set /a a+=1)
  36. if %k%==0 (goto :c1) else (goto :b)
  37. :c1
  38. set /a cc=0,dd=0
  39. set call1=非礼勿视......
  40. :c
  41. if not %tiao% equ 10 set /a tiao+=1
  42. if not %b% equ 60 set /a b+=1
  43. if not "%cc%" == "31" (set /a cc+=1,num=30-%cc%)
  44. if "%cc%"=="31" if not "%dd%"=="31" set /a dd+=1
  45. cls
  46. for /l %%a in (1,1,9) do echo,
  47. echo,!kong2:~0,%num%!
  48. for /l %%a in (1,1,%tiao%) do echo,
  49. if %tiao% equ 10 echo,!kong:~0,%b%!!call1:~0,%dd%!
  50. echo,!kong:~0,%b%!_ @   
  51. echo,!kong:~0,%b%! ^/\  
  52. echo,!kong:~0,%b%!!fu:~%a%,2!
  53. if %tiao% lss 10 (ping -n>nul&ping -n>nul&ping -n>nul) else (ping -n>nul)
  54. if %a% equ 4 (set /a a=0) else (set /a a+=1)
  55. if "%dd%"=="30" (ping -n 2 127.1>nul &exit) else (goto :c)
复制代码

[ 本帖最后由 523066680 于 2009-12-13 09:56 编辑 ]
作者: neorobin    时间: 2009-12-13 15:27     标题: 回复 8楼 的帖子

不错, 代码很简洁, 没仔细看啊, 看效果感觉算法和楼主的差不多, 我的念头是图层粘贴类的算法, 可行性尚未知, 效率是一个大的挑战
作者: vincentzhou    时间: 2010-12-29 13:38     标题: 给代码加个注释(图方便就用c的方式了)

  1. @echo off&setlocal enabledelayedexpansion                        //关闭回显并开启变量延迟
  2. color 1f&mode con cols=46 lines=15 //调整颜色和屏幕大小
  3. for /f "skip=19 delims=" %%a in (%~fs0) do (                     //%~fs0表示当前文件全目录的 短目录,本句意思是读取下面的坐标表中的坐标
  4.     for %%b in (%%a) do ( // 对每一个坐标执行
  5.         cls&echo 当前坐标:%%b^(以当字位置为0-0^) //清除屏幕并显示当前坐标
  6.         echo  ____________________________________________ //显示上边界
  7.         for /f "tokens=1,2 delims=-" %%c in ("%%b") do (   // 分别提取横纵坐标
  8.             for /l %%e in (1,1,%%d) do echo. //空纵坐标行
  9.             for /l %%f in (1,1,%%c) do set /p= <nul //光标移动横坐标列
  10.             set /p=★<nul&echo.          //显示★并换行
  11.             set /a num=9-%%d   
  12.             for /l %%i in (1,1,!num!) do echo. //空9-%%d行 也就是说整个显示区域为10行
  13.             echo  ____________________________________________   //显示下边界
  14.             for /l %%j in (1,1,500) do echo>nul                  //两次显示★间的延时
  15.         )
  16.     )
  17. )  
  18. pause>nul&goto :eof //暂停 并在按任意键之后退出
  19. 以下是由横竖组坐标构成的点阵:
  20. 1-1 2-2 3-3 4-4 5-5 6-6 7-7 8-8 9-9
  21. 10-8 11-7 12-6 13-5 14-4 15-3 16-2 17-1
  22. 18-2 19-3 20-4 21-5 22-6 23-7 24-8 25-9
  23. 26-8 27-7 28-6 29-5 30-4 31-3 32-2 33-1
  24. 34-2 35-3 36-4 37-5 38-6 39-7 40-8 41-9
复制代码





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