Board logo

标题: [游戏娱乐] 批处理画图形:对称曲线、矩形、圆 [打印本页]

作者: lhjoanna    时间: 2008-11-9 11:51     标题: 批处理画图形:对称曲线、矩形、圆

最近用批处理画了一些图形,觉得很好玩,拿出来给大家分享下。
<1>作关于x轴对称的曲线
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=O
  3. for /l %%i in (1 1 10) do (
  4.     for /l %%j in (1 1 %%i) do set "str=!!str!! "
  5.     echo !str!!a!
  6.     ping -n 1 127.1>nul
  7. )
  8. set t=!str!
  9. for /l %%i in (10 -1 2) do (
  10.     set "t=!t:~%%i!"
  11.     echo !t!!a!
  12.     ping -n 1 127.1>nul
  13. )
  14. pause
复制代码
这个还有多方法,弯曲程度,大小都可以变,大家都来尝试看啊。
<2>画矩形
  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set /p length=请输入长度:
  4. set /p width=请输入宽度:
  5. set "c=│"&set "l=─"
  6. set "w=┏"&set "x=┓"&set "y=┗"&set "z=┛"
  7. set /a _length=%length%-1
  8. set /a _width=%width%-1
  9. for /l %%k in (1 1 !_length!) do set "str=!str!  "
  10. set "var= "
  11. for /l %%i in (1 1 %length%) do set "var=!var!%l%"
  12. set var1=!w!!var:~1,-1!!x!
  13. echo !var1!
  14. for /l %%j in (1 1 %_width%) do echo !c!!str!!c!
  15. set var2=!y!!var:~1,-1!!z!
  16. echo !var2!
  17. set str=
  18. set var=
  19. goto begin
复制代码
感觉矩形挺简单的,可还是费了不少功夫,希望大家有更简单的代码啊。
<3>画圆
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=  "
  3. for /l %%i in (0 1 20) do (
  4.     for /l %%j  in (0 1 20) do (
  5.         set /a num1=10-%%i,num2=10-%%j
  6.         set /a num=!num1!*!num1!+!num2!*!num2!
  7.         set /a num-=100
  8.         if !num! lss 0 set /a num=-num
  9.         if !num! lss 4 ( set /p=o<nul) else set /p=!str!<nul
  10.     )
  11.     echo.
  12. )
  13. pause
复制代码
唉,这个也是最不成功的,批处理下好像不能处理浮点数吧,我也只能写出这么粗糙的代码了,设置了数值为4的误差,因为若误差为0,这样的点寥寥无几,必须得半径很大才会多些,但这样又显得很空,结合图形的效果,我也只能达到这样了,希望大家有更好的改进方法啊。
     欢迎大家跟帖讨论!!
作者: lhjoanna    时间: 2008-11-9 12:17

改进了一下画圆的精度问题,增加了可以输入半径,上面那个半径若为1根本看不出来是个圆。也只能达到这样了,大家来讨论啊。
  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set /p radius=请输入半径:
  4. if %radius% lss 0 echo 输入有误&goto begin
  5. set /a precision=radius/3+1
  6. set "str=  "
  7. set /a diameter=%radius%*2
  8. for /l %%i in (0 1 !diameter!) do (
  9.     for /l %%j  in (0 1 !diameter!) do (
  10.         set /a num1=!radius!-%%i,num2=!radius!-%%j
  11.         set /a num=!num1!*!num1!+!num2!*!num2!
  12.         set /a num-=!radius!*!radius!
  13.         if !num! lss 0 set /a num=-num
  14.         if !num! lss %precision% ( set /p=o<nul) else set /p=!str!<nul
  15.     )
  16.     echo.
  17. )
  18. goto begin
复制代码

作者: batman    时间: 2008-11-9 14:09     标题: 也来个画矩形的

  1. @echo off
  2. :again
  3. setlocal
  4. cls&set /p long=请输入矩形的长度:
  5. set /p high=请输入矩形的宽度:
  6. set /a long-=2,high-=2
  7. call :lp ┌  ┐
  8. for /l %%a in (1,1,%high%) do call :lp │ │
  9. call :lp └  ┘
  10. pause>nul&endlocal&goto again
  11. :lp
  12. set /p=%1<nul
  13. for /l %%i in (1,1,%long%) do (
  14.      if "%1" neq "│" (
  15.         set /p=─<nul
  16.         ) else (
  17.         set /p=  <nul
  18.      )
  19. )
  20. set /p=%2<nul&echo.
复制代码

作者: batman    时间: 2008-11-9 15:41     标题: 再来画个台阶

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p num=请输入台阶级数:
  3. echo.&echo.&echo 由此下^>^>
  4. for /l %%a in (1,1,%num%) do (
  5.     set /a a+=2
  6.     if %%a equ 1 (
  7.       echo ━━┓
  8.       ) else (
  9.       echo ┗━┓
  10.     )
  11.     for /l %%i in (1,1,!a!) do set /p=  <nul
  12. )
  13. echo ┗━━━ ^<^<由此上
  14. pause>nul
复制代码

作者: lhjoanna    时间: 2008-11-9 20:31

batman有创意啊,不过在运行时有点问题啊,是不是回复代码时哪句遗漏了??我稍微改了一下,在我这里运行可以。
  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set /p num=请输入台阶级数:
  4. echo.&echo.
  5.     echo   _ @
  6.     echo    ^/     
  7.     echo   ^/  
  8. for /l %%a in (1 1 %num%) do (
  9.     if %%a equ 1 (
  10.       echo ━━━┓
  11.       ) else (
  12.       echo ┗━━┓
  13.     )
  14.     for /l %%i in (1 1 %%a) do set /p=      <nul
  15. )
  16. echo ┗━━━ ^<^<由此上
  17. goto begin
复制代码

呵呵,加了个小人。我一直在考虑能不能让小人下楼梯或者上楼梯呢。试验了一下午还是不行,一条直线的话可以沿直线走,可是保持楼梯不动,小人上下却达不到。看来是我能力有限啊,batman有好办法吗?静候......
作者: flywin    时间: 2010-3-9 19:51

有些乱,据此修改整理了一下供各位参考。(rar无法上载,请把扩展名inf改回rar解压即可)
作者: sl543001    时间: 2010-4-5 21:21

好,俺也写过类似的代码...




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