标题: [游戏娱乐] 批处理画图形:对称曲线、矩形、圆 [打印本页]
作者: lhjoanna 时间: 2008-11-9 11:51 标题: 批处理画图形:对称曲线、矩形、圆
最近用批处理画了一些图形,觉得很好玩,拿出来给大家分享下。
<1>作关于x轴对称的曲线- @echo off&setlocal enabledelayedexpansion
- set a=O
- for /l %%i in (1 1 10) do (
- for /l %%j in (1 1 %%i) do set "str=!!str!! "
- echo !str!!a!
- ping -n 1 127.1>nul
- )
- set t=!str!
- for /l %%i in (10 -1 2) do (
- set "t=!t:~%%i!"
- echo !t!!a!
- ping -n 1 127.1>nul
- )
- pause
复制代码
这个还有多方法,弯曲程度,大小都可以变,大家都来尝试看啊。
<2>画矩形- @echo off&setlocal enabledelayedexpansion
- :begin
- set /p length=请输入长度:
- set /p width=请输入宽度:
- set "c=│"&set "l=─"
- set "w=┏"&set "x=┓"&set "y=┗"&set "z=┛"
- set /a _length=%length%-1
- set /a _width=%width%-1
- for /l %%k in (1 1 !_length!) do set "str=!str! "
- set "var= "
- for /l %%i in (1 1 %length%) do set "var=!var!%l%"
- set var1=!w!!var:~1,-1!!x!
- echo !var1!
- for /l %%j in (1 1 %_width%) do echo !c!!str!!c!
- set var2=!y!!var:~1,-1!!z!
- echo !var2!
- set str=
- set var=
- goto begin
复制代码
感觉矩形挺简单的,可还是费了不少功夫,希望大家有更简单的代码啊。
<3>画圆- @echo off&setlocal enabledelayedexpansion
- set "str= "
- for /l %%i in (0 1 20) do (
- for /l %%j in (0 1 20) do (
- set /a num1=10-%%i,num2=10-%%j
- set /a num=!num1!*!num1!+!num2!*!num2!
- set /a num-=100
- if !num! lss 0 set /a num=-num
- if !num! lss 4 ( set /p=o<nul) else set /p=!str!<nul
- )
- echo.
- )
- pause
复制代码
唉,这个也是最不成功的,批处理下好像不能处理浮点数吧,我也只能写出这么粗糙的代码了,设置了数值为4的误差,因为若误差为0,这样的点寥寥无几,必须得半径很大才会多些,但这样又显得很空,结合图形的效果,我也只能达到这样了,希望大家有更好的改进方法啊。
欢迎大家跟帖讨论!!
作者: lhjoanna 时间: 2008-11-9 12:17
改进了一下画圆的精度问题,增加了可以输入半径,上面那个半径若为1根本看不出来是个圆。也只能达到这样了,大家来讨论啊。- @echo off&setlocal enabledelayedexpansion
- :begin
- set /p radius=请输入半径:
- if %radius% lss 0 echo 输入有误&goto begin
- set /a precision=radius/3+1
- set "str= "
- set /a diameter=%radius%*2
- for /l %%i in (0 1 !diameter!) do (
- for /l %%j in (0 1 !diameter!) do (
- set /a num1=!radius!-%%i,num2=!radius!-%%j
- set /a num=!num1!*!num1!+!num2!*!num2!
- set /a num-=!radius!*!radius!
- if !num! lss 0 set /a num=-num
- if !num! lss %precision% ( set /p=o<nul) else set /p=!str!<nul
- )
- echo.
- )
- goto begin
复制代码
作者: batman 时间: 2008-11-9 14:09 标题: 也来个画矩形的
- @echo off
- :again
- setlocal
- cls&set /p long=请输入矩形的长度:
- set /p high=请输入矩形的宽度:
- set /a long-=2,high-=2
- call :lp ┌ ┐
- for /l %%a in (1,1,%high%) do call :lp │ │
- call :lp └ ┘
- pause>nul&endlocal&goto again
- :lp
- set /p=%1<nul
- for /l %%i in (1,1,%long%) do (
- if "%1" neq "│" (
- set /p=─<nul
- ) else (
- set /p= <nul
- )
- )
- set /p=%2<nul&echo.
复制代码
作者: batman 时间: 2008-11-9 15:41 标题: 再来画个台阶
- @echo off&setlocal enabledelayedexpansion
- set /p num=请输入台阶级数:
- echo.&echo.&echo 由此下^>^>
- for /l %%a in (1,1,%num%) do (
- set /a a+=2
- if %%a equ 1 (
- echo ━━┓
- ) else (
- echo ┗━┓
- )
- for /l %%i in (1,1,!a!) do set /p= <nul
- )
- echo ┗━━━ ^<^<由此上
- pause>nul
复制代码
作者: lhjoanna 时间: 2008-11-9 20:31
batman有创意啊,不过在运行时有点问题啊,是不是回复代码时哪句遗漏了??我稍微改了一下,在我这里运行可以。
- @echo off&setlocal enabledelayedexpansion
- :begin
- set /p num=请输入台阶级数:
- echo.&echo.
- echo _ @
- echo ^/
- echo ^/
- for /l %%a in (1 1 %num%) do (
- if %%a equ 1 (
- echo ━━━┓
- ) else (
- echo ┗━━┓
- )
- for /l %%i in (1 1 %%a) do set /p= <nul
- )
- echo ┗━━━ ^<^<由此上
- goto begin
复制代码
呵呵,加了个小人。我一直在考虑能不能让小人下楼梯或者上楼梯呢。试验了一下午还是不行,一条直线的话可以沿直线走,可是保持楼梯不动,小人上下却达不到。看来是我能力有限啊,batman有好办法吗?静候......
作者: flywin 时间: 2010-3-9 19:51
有些乱,据此修改整理了一下供各位参考。(rar无法上载,请把扩展名inf改回rar解压即可)
作者: sl543001 时间: 2010-4-5 21:21
好,俺也写过类似的代码...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |