标题: [练习]批处理解决小明搭积木 [打印本页]
作者: Seter 时间: 2009-10-8 10:23 标题: [练习]批处理解决小明搭积木
Eeee...原谅我起的这个俗名字...
小明很喜欢搭积木,但他很懒惰,想在开始搭积木前先知道搭出来的积木会是怎么样的
每块积木的大小是1*1*1(见链接: https://pan.baidu.com/s/1Dz6vu3SpIKZYbJ86XSCZ_A?pwd=fr6c)
code中居然自动省略了空格...看起来效果不好,请下载到本地查看
小明将搭在一个矩形的方块内(第一行,第一列,最后一行,最后一列不可能没有积木),他将每个区域要搭的积木数写入in.txt中复制代码
他希望执行ex.bat后得到out.txt(见链接: https://pan.baidu.com/s/1zsQxs6ZSgxNwtijtQS68Rw?pwd=jitd)
注意:这个例子并不是很好,因为第一列有一块积木恰好被挡住了,但是有时积木并不会被挡住,比如第二列
[挑战下大家的图形意识和批处理的图形意识^__^]
作者: wxcute 时间: 2009-10-8 21:49
我想应该有个坐标说明
- (Y向上)
-
- | /(Z向后)
- . .
- |/
- .---.---(X向右)
复制代码
in.txt 是从后到前表示数目,不知道是不是这样。
作者: Seter 时间: 2009-10-9 19:22
呃...我发现我的题目果然没出好
in.txt是ZX轴上的,数字为几就在该区域内向上(Y轴)叠几个积木
作者: flyinspace 时间: 2009-10-11 14:17
图形已经绘制完成...
只是...需要精简代码。..
先放上绘制图形的截图
下面的数据是这个批处理绘制的图形- 1 3 5 3 5 3 3 3 3 5
- 1 3 5 3 5 2 3 3 3 5
- 1 3 5 3 5 3 3 3 3 5
- 3 1 3 3 5 3 2 2 2 5
复制代码
作者: flyinspace 时间: 2009-10-11 15:27
这个....楼下太牛了..
我的代码3倍于他....
编辑掉..
[ 本帖最后由 flyinspace 于 2009-10-11 23:55 编辑 ]
作者: netbenton 时间: 2009-10-11 18:11
立方体定义到变量“v"了
图型则读取文件 in.txt,定义格式按楼主的方式- @echo off&setlocal enabledelayedexpansion
-
- set "v=@@*---*@/ /|*---* *| |/@*---*@@"
- set cr=^
-
-
- set/a ns=0,ms=0
- for /f "tokens=*" %%a in (in.txt) do (
- set/a na=n,ma=m
- for %%b in (%%a) do (
- set/a m+=4,n=na
- for /l %%c in (1,1,%%b) do (
- if !n! gtr !ng! set/a ng=n
- if !m! gtr !mg! set/a mg=m
- if !n! lss !ns! set/a ns=n
- if !m! lss !ms! set/a ms=m
- call :sub
- set/a n-=2
- )
- )
- set/a m=ma,n=na,n+=2,m-=2
- )
-
- pause
- goto :eof
-
- :cho
- set /a ngg=ng+5,mgg=mg+7
- set str=
- for /l %%a in (!ns!,1,!ngg!) do (
- for /l %%b in (!ms!,1,!mgg!) do (
- set "var=!_%%a.%%b! "
- set str=!str!!var:~,1!
- )
- set str=!str!!cr!
- )
- cls&echo;!str!
- ping -n 1 127.1 >nul
- goto :eof
-
- :sub
- for /l %%a in (0,1,34) do (
- set "o=!v:~%%a,1!"
- if defined o if "!o!" neq "@" (
- set/a "nx=%%a/7+n,my=%%a%%7+m"
- set _!nx!.!my!=!o!
- )
- )
- call :cho
-
- goto :eof
复制代码
作者: netbenton 时间: 2009-10-11 18:51
增加了读取ex.txt文件立方体数据到变量“v"- @echo off&setlocal enabledelayedexpansion&set cr=^
-
-
- set h=0123456789abcdef
- ::读取ex.txt文件立方体到变量“v"
- for /f "delims=" %%a in (ex.txt) do (
- set "str=@%%a@@@@@@@@@@@@@@@@"
- for /l %%b in (1,1,10) do (set str=!str: @=@@!&set str=!str:@ =@@!)
- set s=!h!%%a
- set/a s=0x!s:~-16,1!,x+=1
- if !s! gtr !yg! set/a yg=s
- set _!x!=!str!
- )
- set v=
- for /l %%a in (1,1,!x!) do (
- set v=!v!!_%%a:~1,%yg%!
- )
- set/a xy=x*yg-1
-
- ::根据in.txt数据,画立方图形,写到二维数组空间_n.m
- set/a ns=0,ms=0
- for /f "tokens=*" %%a in (in.txt) do (
- set/a na=n,ma=m
- for %%b in (%%a) do (
- set/a m+=4,n=na
- for /l %%c in (1,1,%%b) do (
- if !n! gtr !ng! set/a ng=n
- if !m! gtr !mg! set/a mg=m
- if !n! lss !ns! set/a ns=n
- if !m! lss !ms! set/a ms=m
- call :sub
- set/a n-=2
- )
- )
- set/a m=ma,n=na,n+=2,m-=2
- )
- pause
- goto :eof
- :cho 把二维空间的数据显示出来
- set /a ngg=ng+5,mgg=mg+7
- set str=
- for /l %%a in (!ns!,1,!ngg!) do (
- for /l %%b in (!ms!,1,!mgg!) do (
- set "var=!_%%a.%%b! "
- set str=!str!!var:~,1!
- )
- set str=!str!!cr!
- )
- cls&echo;!str!
- ping -n 1 127.1 >nul
- goto :eof
- :sub 把一个立方图形放到地址空间
- for /l %%a in (0,1,!xy!) do (
- set "o=!v:~%%a,1!"
- if defined o if "!o!" neq "@" (
- set/a "nx=%%a/7+n,my=%%a%%7+m"
- set _!nx!.!my!=!o!
- )
- )
- call :cho
- goto :eof
复制代码
[ 本帖最后由 netbenton 于 2009-10-11 18:54 编辑 ]
作者: netbenton 时间: 2009-10-12 13:03
小提速。。。
- @echo off&setlocal enabledelayedexpansion&set cr=^
-
-
- set h=0123456789abcdef
- set tt=!time!
- ::读取ex.txt文件立方体到变量“v"
- for /f "delims=" %%a in (ex.txt) do (
- set s=!h!%%a
- set/a s=0x!s:~-17,1!,x+=1
- set str=%%a
- set y=
- for /l %%b in (0,1,!s!) do (
- if "!str:~%%b,1!" neq " " set y=y
- if defined y set v=!v! "!x!$%%b$!str:~%%b,1!"
- )
- )
-
- ::根据in.txt数据,画立方图形,写到二维数组空间_n.m
- set/a ns=0,ms=0
- for /f "tokens=*" %%a in (in.txt) do (
- set/a na=n,ma=m
- for %%b in (%%a) do (
- set/a m+=4,n=na
- for /l %%c in (1,1,%%b) do (
-
- rem \\\根据实际大小来定义显示边界\\
- if !n! gtr !ng! set/a ng=n
- if !m! gtr !mg! set/a mg=m
- if !n! lss !ns! set/a ns=n
- if !m! lss !ms! set/a ms=m
- rem \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-
- rem 把一个立方图形放到地址空间
- for %%g in (%v%) do (
- for /f "tokens=1-3 delims=$" %%l in (%%g) do (
- set/a "nx=%%l+n,my=%%m+m"
- set _!nx!.!my!=%%n
- )
- )
- rem \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
- call :ech
-
- set/a n-=2
- )
- )
- set/a m=ma,n=na,n+=2,m-=2
- )
-
- echo !tt! %time%
- pause
- goto :eof
-
-
- rem 把二维空间的数据显示出来
- :ech
- set /a ngg=ng+5,mgg=mg+7
- set str=
- for /l %%a in (!ns!,1,!ngg!) do (
- for /l %%b in (!ms!,1,!mgg!) do (
- set "var=!_%%a.%%b! "
- set str=!str!!var:~,1!
- )
- set str=!str!!cr!
- )
- cls&echo;!str!
- goto :eof
- rem \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
复制代码
作者: Seter 时间: 2009-10-12 19:37
打错字 =___= 是熟练程度~
作者: sl543001 时间: 2009-11-17 14:21
很好很强大值得学习,
顺便对比研究提速过程!
作者: gbw911 时间: 2009-11-29 10:41
很好,对那些不常用到的能加一些说明就好了
作者: garyng 时间: 2011-8-22 14:20
作图的时候超帅的!!
作者: qc5111 时间: 2011-8-23 01:59
建议你们用自定义字符,魔塔2就是这样的,正准备研发2帧动画
作者: lmedwuzr 时间: 2012-7-19 20:01
非常酷哦,不顶对不起良心
宣传片制作www.shijibafang.com
作者: nhygvfr 时间: 2013-1-26 09:32
一个小问题:八楼netbenton写的批处理
如果把@echo off&******下面的两个自然段去掉,会有问题
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |