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

[特效代码] 【挑战】用批处理画出正方形和抛物线

题1******
要求:1---以圆点“.”,全屏模式,在cmd的中央显示正方形
           2--在程序运行时,要求顺时针,逐渐的显示点运动的轨迹
题2******
要求:1---画出函数y=x^2(x>0) 的图像。
           2--程序运行时,以点的形式,逐渐的显示画图轨迹。
-------------------------------------------------------------------------------------
     此题确实很有难度,不适合新手来完成,因此移至本版块,并修改
了标题,事先未来得及和楼主商量,还请楼主谅解。
                                                                      ----------batman----------
-------------------------------------------------------------------------------------
  1. @echo off&setlocal enabledelayedexpansion&color 0A &cls
  2. rem by myzwd 2009 -3 -10
  3. rem  逆时针描点正方形
  4. :main
  5. set "sp=        "
  6. set "sp1=       "
  7. set "sp2=             "
  8. call:1
  9. goto:eof
  10. :1 向上运动
  11. for /l %%i in (1 1 8) do (
  12. set /a n+=1
  13. set /a m=8-!n!
  14. for /l %%i in (1 1 7) do echo.
  15. for /l %%i in (!m! -1 1) do (echo. !sp!)
  16. for /l %%i in (1 1 !n!) do (echo !sp!a)
  17. echo.
  18. echo ----------------------------
  19. for /l %%1 in (1 1 200) do (call echo.>nul)
  20. cls
  21. )
  22. :2 向左运动
  23. for /l %%i in (1 1 8) do (
  24.    for /l %%i in (1 1 7) do echo.
  25.    set aa=!aa! a
  26.    set /p "=!sp1!!aa!"<nul
  27.    echo.
  28.    for /l %%i in (1 1 7) do (echo !SP!a)
  29. echo.
  30. echo ----------------------------
  31. for /l %%1 in (1 1 200) do (call echo.>nul)
  32. cls
  33. )
  34. :3  向下运动
  35. set n=
  36. set m=
  37. for /l %%i in (1 1 8) do (set cc=!cc!a )
  38. for /l %%i in (1 1 7) do (
  39.   for /l %%i in (1 1 7) do echo.
  40.   echo !sp!!cc!
  41.   set /a n+=1
  42.   set /a m=7-!n!
  43.   for /l %%i in (1 1 !n!) do (echo !sp!a!sp2!a)
  44.   for /l %%i in  (1 1 !m!) do (echo !sp!a)
  45.   echo.
  46. echo ----------------------------
  47. for /l %%1 in (1 1 200) do (call echo.>nul)
  48. cls
  49. )
  50. :4 向右运动
  51. set "sp=          "
  52. set "sp2=             "
  53. set "sp5=        "
  54. set n=
  55. set cc=
  56. for /l %%i in (1 1 8) do (set cc=!cc!a )
  57. for /l %%i in (1 1 16) do (set "sp3=   !sp2!")
  58. for /l %%i in (1 1 8) do (
  59.   for /l %%i in (1 1 7) do echo.
  60.   set /a n+=2&set /a "n1=!n!>>1"
  61.   echo !sp5!!cc!
  62.   for /l %%i in (1 1 6) do (set "sp4=!sp5!a   !sp!a"&echo !sp4!)
  63.   call set /p "=!sp5!%%sp3:~0,-!n!%%"<nul
  64.   for /l %%i in (1 1 !n1!) do (set /p=a<nul )
  65.   echo.&echo.
  66. echo ----------------------------
  67. for /l %%1 in (1 1 180) do (call echo.>nul)
  68. cls
  69. )
  70. :The End
  71. for /l %%i in (1 1 7) do echo.
  72. echo !sp1! !cc!
  73. for /l %%i in (1 1 6) do (set "sp4= !sp1!a   !sp!a" &echo !sp4!)
  74. echo !sp1! !cc!
  75. echo ----------------------------
复制代码
  1. @echo off &setlocal enabledelayedexpansion &cls &color 1a
  2. for /l %%1 in (1 1 80) do set "space= !space!"
  3. mode con cols=80 lines=35
  4. rem 抛物线方程为--(y-16)*(y-16)=x edited by myzwd
  5. for /l %%i in (8 -1 1) do (
  6.   set y=%%i
  7.   set /a "x=y*y"
  8.   call echo %%space:~-!x!%%●
  9.   echo.
  10.   for /l %%1 in (1 1 30) do call echo.>nul
  11. )
  12. for /l %%i in (1 1 8) do (
  13.   set y=%%i
  14.   set /a "x=y*y"
  15.   call echo %%space:~-!x!%%●
  16.   echo.
  17.   for /l %%1 in (1 1 30) do call echo.>nul
  18. )
  19. pause
复制代码


说明:抛物线的画法主要是计算y坐标的增量。不是计算y坐标。

[ 本帖最后由 myzwd 于 2009-3-18 23:45 编辑 ]
1

评分人数

这题对新手来说是难了点。。。
***共同提高***

TOP

先发一个画正方形的,但没完成逐步显示这个步骤(左边竖边比较困难,还没想到好的办法),给大家做参考了:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p l=请输入正方形的边长(小于46的偶数):
  3. echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
  4. chcp 437 >nul
  5. graftabl 936 >nul
  6. set /a g=l/2,kk=40-l/2
  7. for /l %%a in (1,1,%kk%) do set "kkk=!kkk! "
  8. echo.&echo.
  9. for /l %%a in (1,1,%g%) do (
  10.     set /p=%kkk%<nul&set "a="
  11.   for %%c in (1 %g%) do if %%a equ %%c set "a=a"
  12.     for /l %%b in (1,1,%l%) do (
  13.         set "_%%a-%%b= "
  14.         for %%d in (1 %l%) do if %%b equ %%d set "b=a"
  15.         if defined a (
  16.            set /p=.<nul
  17.            ) else (
  18.            if defined b (
  19.               set /p=.<nul&set "b="
  20.               ) else (
  21.               set /p= <nul
  22.            )
  23.         )
  24.     )
  25.     echo.
  26. )
  27. pause>nul
复制代码
ps:楼主出的题很有难度,不适合新手来完成,所以移至代码咨询区。

[ 本帖最后由 batman 于 2009-3-2 07:44 编辑 ]
***共同提高***

TOP

我运行了

我运行了,没成功
报告是:此时不因有‘do’
现在可以了 ok。

因为我不知道批处理能否办到,所以出了这个题目。没想到还真可以。我也学习学习。呵呵

[ 本帖最后由 myzwd 于 2009-3-3 23:08 编辑 ]

TOP

回复 3楼 的帖子

我运行了,没有报错。
但是没有实现完全意义上的居中,因为代码没有判断屏幕的高度。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2009-3-2 15:33 发表
我运行了,没有报错。
但是没有实现完全意义上的居中,因为代码没有判断屏幕的高度。

这是因为用代码根本没办法判断全屏的高度的,这是和显示器的高度有关的参数,不同型号的显示器上这个数值是不同的,所以就没有用代码进行计算了。。。
***共同提高***

TOP

回复 6楼 的帖子

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

实现了逐步画图,但效果实在不怎么样:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p l=请输入正方形的边长(小于46的偶数):
  3. echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
  4. chcp 437 >nul
  5. graftabl 936 >nul
  6. set /a g=l/2,kk=40-l/2,l1=l-1,g1=g-2,s1=l,s2=s1+g1,s3=s2+l
  7. for /l %%a in (1,1,%kk%) do set "kkk=!kkk! "
  8. for /l %%a in (1,1,%l1%) do set "k1=!k1! "
  9. echo.&echo.
  10. for /l %%a in (1,1,%l%) do set /a n+=1&set "_!n!=."
  11. for /l %%a in (1,1,%g1%) do set /a n+=1&set "_!n!=%k1%."
  12. for /l %%a in (1,1,%l%) do (
  13.     set /a a=l-%%a
  14.     for /l %%b in (1,1,!a!) do set "k2=!k2! "
  15.     for /l %%c in (1,1,%%a) do set ".=!.!."
  16.     set /a n+=1&set "_!n!=!k2!!.!"&set "k2="&set ".="
  17. )
  18. set /a n+=g1
  19. for /l %%a in (1,1,%n%) do (
  20.     for /l %%b in (1,1,%%a) do (
  21.         if %%b leq %s1% (
  22.            if %%b equ 1 set /p=%kkk%<nul>temp
  23.            set /p=!_%%b!<nul>>temp
  24.            if %%b equ %s1% echo.>>temp
  25.            ) else (
  26.            if %%b leq %s2% (
  27.               echo %kkk%!_%%b!>>temp
  28.               ) else (
  29.               if %%b leq %s3% (
  30.                  set /a a=kk+%%b
  31.                  for /l %%c in (1,1,!a!) do set /p= <nul>>temp
  32.                  set /p=%kkk%!_%%b!<nul>>temp
  33.               )
  34.            )
  35.          )
  36.     )
  37.     cls&type temp
  38.     if %%a gtr %s3% (
  39.        set /a a=s2+s3-%%a
  40.        for /l %%d in (%s2%,-1,!a!) do set "a=!_%%d!"&set "a=.!a:~1!"&set "_%%d=!a!"
  41.     )
  42. )
  43. pause>nul&del /q temp
复制代码

[ 本帖最后由 batman 于 2009-3-5 23:31 编辑 ]
***共同提高***

TOP

这次效果上没问题了(不用全屏):
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p l=请输入正方形的边长(小于46的偶数):
  3. set /a g=l/2,kk=40-l/2,l1=l-1,g1=g-2,s1=l,s2=s1+g1,s3=s2+l
  4. for /l %%a in (1,1,%kk%) do set "kkk=!kkk! "
  5. for /l %%a in (1,1,%l1%) do set "k1=!k1! "
  6. for /l %%a in (1,1,%l%) do (
  7.     set /a n+=1&set "_!n!=."
  8.     set "str=!str!."
  9. )
  10. for /l %%a in (1,1,%g1%) do set /a n+=1&set "_!n!=%k1%."
  11. for /l %%a in (1,1,%l%) do (
  12.     set /a a=l-%%a
  13.     for /l %%b in (1,1,!a!) do set "k2=!k2! "
  14.     for /l %%c in (1,1,%%a) do set ".=!.!."
  15.     set /a n+=1&set "_!n!=!k2!!.!"&set "k2="&set ".="
  16. )
  17. set /a n+=g1
  18. for /l %%a in (1,1,%n%) do (
  19.     for /l %%b in (1,1,%%a) do (
  20.         if %%b leq %s1% (
  21.            if %%b equ 1 set /p=%kkk%<nul>temp
  22.            set /p=!_%%b!<nul>>temp
  23.            if %%b equ %s1% echo.>>temp
  24.            ) else (
  25.            if %%b leq %s2% (
  26.               echo %kkk%!_%%b!>>temp
  27.               ) else (
  28.               set "flag=a"
  29.               if %%b geq %s3% set "ok=a"  
  30.             )
  31.          )
  32.     )
  33.     if defined ok (
  34.        echo %kkk%%str%>>temp
  35.        ) else (
  36.        if defined flag echo %kkk%!_%%a!>>temp
  37.     )
  38.     for /l %%d in (1,1,50) do echo>nul
  39.     cls&type temp
  40.     if %%a gtr %s3% (
  41.        set /a a=s2+s3-%%a
  42.        for /l %%e in (%s2%,-1,!a!) do set "a=!_%%e!"&set "a=.!a:~1!"&set "_%%e=!a!"
  43.     )
  44. )
  45. pause>nul&del /q temp
复制代码

[ 本帖最后由 batman 于 2009-3-6 00:32 编辑 ]
***共同提高***

TOP

回复 9楼 的帖子

不错收藏了。挺好的,学习学习

TOP

回复 10楼 的帖子

啥时候把你自己的代码拿出来跟他的比较一下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11楼 的帖子

我真弄不出来。我都说了,我以为批处理做不出来。我是看了随风的那个小球后,才知道批处理可以做这些。
其实我学习批处理,就是一种业余爱好。还得多象你们学习。呵呵

TOP

回复 12楼 的帖子

哦,原来如此。
不过,大家一般以出题的形式发帖时,通常都是自己有了完整的代码。
看来误解你的意思了^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

做的并不严密~  发出来了
  1. @echo off &setlocal enabledelayedexpansion
  2. set /p inp="1~46内的偶数: "
  3. set /a lx=inp/2,la=0,hx=lx,left=(80-inp)/2
  4. for /l %%a in (1,1,80) do (set k= !k!)
  5. set left=!k:~0,%left%!
  6. set "do=" &set "do2=::"
  7. :la
  8. set /a la+=1,lb=0
  9. if %la% gtr 1 (set "do=::" &set h%la%=!k:~-%inp%,-1!.)
  10. if %la% equ %lx% (set "do=")
  11. %do2% set /a lx-=1
  12. %do2% set h%lx%=.!h%lx%:~1!
  13.      :lb
  14. %do% set /a lb+=1
  15. %do% set h%la%=!h%la%!.
  16. %do% set h%la%=!h%la%:~-%inp%!
  17.      ping -n 1 127.1>nul
  18.      cls
  19.      for /l %%a in (1,1,%hx%) do echo,%left%!h%%a!
  20. %do% if %lb% lss %inp% (goto :lb) else (set lb=0)
  21. %do% if %la% equ %lx% (set "do=::" &set "do2=")
  22. if %lx% neq 0 goto :la
  23. pause
复制代码


我觉得改成+号会方一些~

[ 本帖最后由 523066680 于 2009-3-8 14:35 编辑 ]
1

评分人数

    • batman: 强,不愧是existPB + 15

TOP

刚刚有想做y=x^2 的  不过想想又停止了
因为 x=5 的时候就飙到25行了~

如果是col=line^2 的话可能有看头。

哈哈 改来了, x=y^2的  感觉挺漂亮的
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. mode con cols=102 lines=25
  4. for /l %%a in (1,1,100) do (set k= !k!)
  5. for /l %%a in (-10,1,10) do (set h%%a=%k%)
  6. set la=-11
  7. :la
  8. set /a la+=1,lb=la*la,tlb=100-lb
  9. set h%la%=!h%la%:~%tlb%!.
  10. ping -n 1 127.1>nul
  11. cls
  12. for /l %%a in (-10,1,10) do echo,!h%%a!
  13. if %la% lss 10 goto :la
  14. pause
复制代码

[ 本帖最后由 523066680 于 2009-3-8 14:57 编辑 ]
1

评分人数

    • wxcute: 漂亮,我就想不出。PB + 8

TOP

返回列表