返回列表 发帖

[游戏娱乐] 批处理画图形:对称曲线、矩形、圆

最近用批处理画了一些图形,觉得很好玩,拿出来给大家分享下。
<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
)
pauseCOPY
这个还有多方法,弯曲程度,大小都可以变,大家都来尝试看啊。
<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 beginCOPY
感觉矩形挺简单的,可还是费了不少功夫,希望大家有更简单的代码啊。
<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.
)
pauseCOPY
唉,这个也是最不成功的,批处理下好像不能处理浮点数吧,我也只能写出这么粗糙的代码了,设置了数值为4的误差,因为若误差为0,这样的点寥寥无几,必须得半径很大才会多些,但这样又显得很空,结合图形的效果,我也只能达到这样了,希望大家有更好的改进方法啊。
     欢迎大家跟帖讨论!!
2

评分人数

改进了一下画圆的精度问题,增加了可以输入半径,上面那个半径若为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 beginCOPY

TOP

也来个画矩形的

@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.COPY
***共同提高***

TOP

再来画个台阶

@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>nulCOPY
***共同提高***

TOP

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 beginCOPY

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

TOP

有些乱,据此修改整理了一下供各位参考。(rar无法上载,请把扩展名inf改回rar解压即可)

TOP

好,俺也写过类似的代码...
SYBN QQ:354324773

TOP

返回列表