Board logo

标题: [游戏娱乐] 批处理全角字符画图板 [打印本页]

作者: netbenton    时间: 2009-9-14 00:34     标题: 批处理全角字符画图板

纯cmd批处理制作

用来绘制全角文本图形
在绘制过程中:
按F1取得帮助
可以随时存盘,顺序地读取关级文件
可以随时添加画笔,选择画笔
可以上下左右翻页
可以选择连续画或者画点的状态
用数字直接修改步进单位,即方向键可以实现一次跳转N行或N列
可以方便地设置用在游戏中的机关数据,并为数据选择坐标提供了方便操作
可以使用填充功能,把当前连续的字符填充为画笔中的字符
可以使用字符转换功能,把与当前字符相同的点全部替换为画笔中的字符
可以使用多次恢复操作
  1. @goto :begin  by netbenton at bathome
  2. e 100 cd 16 86 c4 b4 02 cd 10 b4 4C CD 21
  3. g
  4. :begin
  5. @echo off
  6. set a=str= ■∷▓☆★大⊙♀△▲;bj=1;file=hdt;等=call :tczh^
  7. ;m=1;n=1;fn=0;b2=1;b3=2;b4=3;b5=4;b6=5;b7=6;b8=7;b9=8^
  8. ;Esc=exit/b;Ins=goto :m_ins;del=goto :m_del;paup=goto :m_paup;pado=goto :m_pado^
  9. ;f10=call :m_save;back=goto :m_back;home=goto :m_home;End=goto m_end^
  10. ;r23=字符表:空!str:~,10!  状态:!zt!  画笔:!zf!!ddb!  当前:!bac!!ddq!  步进:!bj!  帮助键F1 ^
  11. ;r24= 按 键:XASDFGHJKL;坐标:当前!n!.!m! 左上!n0!.!m0! 右下!n9!,!m9!   ^
  12. ;r25=最大边界:!nz!.!mz!  机关:!$jg!             ^
  13. ;r改写=移动;r移动=改写;zf=■^
  14. ;zt=移动;改写=!zf!;移动=!bac!^
  15. ;help=!cr!!cr!  F1本帮助   F4上一文件   F6下一文件   F10保存   Esc退出  回车刷屏!cr!!cr!  方向移动绘图坐标   空格转换状态^
  16.   Up/Down/Home/End上/下/左/右 翻页!cr!!cr!  Ins加入一个绘图字符,直接回车则把当前字符作为画笔  !cr!^
  17.   Del把当前绘图字符提出放到字符表最后(字符表移位)!cr!!cr!^
  18.   Tab键为当前点加入机关设置项,以#号开头,保存在图形数据的后面!cr!!cr!^
  19.   按=号进入填充/转换,当前字符==》画笔字符!cr!!cr!^
  20.   Backspace恢复操作,  数字键选择步进单位!cr!!cr!   用对应的按键选择画笔,!cr!^
  21.   并且在改写状态移动坐标自动绘图,在移动状态则按一个键画一个点!cr!
  22. set %a:;=&set %
  23. set "空格=set zt=^^!r!zt!^^!
  24. set cr=^
  25. &set bac= 
  26. set/a n0=0,n9=21,m0=-1
  27. set "Ent=set cls=cls^&if .!zt! equ .设置 goto :eof
  28. set "f6=endlocal^&set /a fn+=1^&goto :restart
  29. set "f4=endlocal^&set /a fn-=1^&goto :restart
  30. set "f1=cls^^^&echo !help!^^^&pause
  31. set "Tab=goto :m_Tab
  32. ::各字符分别存为变量
  33. pushd "%~dp0"
  34. chcp 437 >nul
  35. graftabl 936 >nul
  36. ::c72=上;c80=下;c75=左;c77=右;
  37. set @@=i15=Tab;i28=Ent;i14=back;i59=f1;i62=f4;i68=f10;i64=f6;i82=ins;i83=Del;i1=Esc^
  38. ;i13=等;i73=Paup;i81=Pado;i57=空格;i71=Home;i79=End;c72=n-;c75=m-;c80=n+;c77=m+
  39. set %@@:;=&set %
  40. set $a= &set $d=空
  41. set /p file=输入文件名前缀:
  42. for %%a in ("%file%") do set file=%%~na
  43. set k45=!!
  44. set cls=cls
  45. :restart
  46. setlocal enabledelayedexpansion
  47. for /l %%a in (0,1,9) do (set kh=!kh!       )
  48. if exist !file!!fn!.txt goto :m_open
  49. :d_loop
  50. if !mz! lss 38 set mz=38
  51. for /l %%a in (0,1,9) do (set k3%%a=!str:~%%a,1!)
  52. set zf=!str:~,1!
  53. title 批处理版画图    文件:!file!!fn!.txt
  54. :loop
  55. (set bac=!m%n%.%m%!&set m!n!.!m!=⊕
  56. if !n! geq !n9! set /a n0=n-21,n9=n
  57. if !n0! lss 0 set /a n0=0,n9=21
  58. if !n! lss !n0! set /a n0=n,n9=n+21
  59. if !m! geq !m9! set /a m0=m-38,m9=m
  60. if !m0! lss 0 set /a m0=0,m9=38
  61. if !m! lss !m0! set /a m0=m,m9=m+38
  62. if "!m0!!m9!" neq "%m0%%m9%" (
  63.   set ebs=
  64.   for /l %%b in (!m0!,1,!m9!) do (
  65.      set "ebs=!ebs!^!@%%b^!^^^!$a^!@%%b^!^^^!
  66.   )
  67. )
  68. set ebuf=
  69. for /l %%a in (!n0!,1,!n9!) do (
  70.     for %%c in ("!ebs:@=m%%a.!") do (
  71.         for %%d in ("%%~c") do (set ebuf=!ebuf!%%~d:!cr!)
  72.     )
  73. )
  74. set m!n!.!m!=!bac!&set ddq=!$d%bac%!&set ddb=!$d%zf%!
  75. set $jg=!#%n%.%m%!
  76. %cls%
  77. set /p=!ebuf!%r23%!cr!%r24%!cr!%r25%<nul
  78. set cls=
  79. >nul debug <%~nx0
  80. )
  81. set err=%errorlevel%
  82. set in=!i%err%! !err!
  83. if defined c%err% goto :lrpd 上下左右
  84. if defined k%err% goto :keyc 选择写入
  85. if defined i%err% goto :cont 功能键
  86. if defined b%err% set bj=!b%err%!
  87. goto :loop
  88. :keyc 画笔选择处理
  89. set var=!k%err%!
  90. set zf=%var%
  91. if "!zt!" equ "移动" (set cone=!var!)
  92. goto :loop
  93. :cont 功能键处理
  94. set comm=!i%err%!
  95. set comm=!%comm%!
  96. set comm=%comm%
  97. %comm%
  98. goto :loop
  99. :lrpd 方向键处理过程
  100. set var=!c%err%:~,1!
  101. for /l %%a in (1,1,!bj!) do (call :lrpd_sub)
  102. goto :loop
  103. :lrpd_sub 方向子过程
  104. (
  105. if "!zt!" equ "改写" (set m!n!.!m!=%zf%) else (if defined cone set m!n!.!m!=%cone%)
  106. set cone=
  107. if !m%n%.%m%! neq !bac! set c_z=!n!.!m!=!bac!@!c_z:~,4096!
  108. set /a !c%err%!=1
  109. if !%var%! lss 0 set !var!=0
  110. if !%var%! gtr !%var%z! set !var!z=!%var%!
  111. )
  112. set bac=!m%n%.%m%!&goto :eof
  113. :m_back 恢复
  114. if defined c_z (
  115. set var=%c_z:@=&rem %
  116. if !var! equ !c_z! set c_z=&goto :loop
  117. set c_z=!c_z:*@=!
  118. if "!var:~,2!" equ "zh" (set bac=!var:~2,1!&set zf=!var:~3,1!&call :unzh) else (
  119.   if "!var:~,2!" equ "tc" (
  120.     for /f "tokens=2-5 delims=." %%a in ("!var!") do set/a n=%%a,m=%%b&set bac=%%c&set zf=%%d
  121.     call :fill
  122.   )else (set m!var!)
  123. )
  124. )
  125. goto :loop
  126. :m_del
  127. if "%zf%" neq "" (
  128.   set str=!str:%zf%=!%zf%
  129.   set zf=!str:~,1!
  130.   goto :d_loop
  131. )
  132. goto :loop
  133. :m_ins
  134. set var=
  135. set /p var=输入一个全角字符:
  136. if not defined var set var=!bac!
  137. set str=!var:~,1!!str:%var%=!
  138. goto :d_loop
  139. :m_paup
  140. set/a n-=20,n0-=20,n9-=20
  141. if !n! leq 0 set /a n=0
  142. goto :m_pas
  143. :m_pado
  144. set/a n+=20,n0+=20,n9+=20
  145. if !n9! gtr !nz! set /a n=nz,n9=nz
  146. :m_pas
  147. set zt=移动
  148. set cls=cls
  149. goto :loop
  150. :m_Home
  151. set/a m-=28,m0-=28,m9-=28
  152. if !m! lss 0 set /a m=0
  153. goto :m_pas
  154. :m_End
  155. set/a m+=28,m0+=28,m9+=28
  156. if !m9! gtr !mz! set /a m=mz,m9=mz
  157. goto :m_pas
  158. :m_save  保存文件
  159. setlocal enabledelayedexpansion
  160. set ebs=
  161. for /l %%b in (0,1,!mz!) do (
  162.    set "ebs=!ebs!^!@%%b^!^^^!$a^!@%%b^!^^^!
  163. )
  164. (for /l %%a in (0,1,!nz!) do (
  165.     for %%c in ("!ebs:@=m%%a.!") do for %%d in ("%%~c") do (set ebuf=%%~d)
  166.     set ebuf=!ebuf: = !
  167.     for %%c in ("1!ebuf!") do set ebuf=%%~nxc
  168.     set ebuf=!ebuf: = !
  169.     echo;!ebuf:~1!
  170. )
  171. set # 2>nul
  172. )> !file!!fn!.txt
  173. endlocal&goto :eof
  174. :m_open 打开文件
  175. set n=0
  176. for /f "tokens=1* delims=:" %%j in ('findstr /n .* !file!!fn!.txt') do (
  177.   set _str=%%k
  178.   if defined _str (if "!_str:~,1!" equ "#" (set !_str!) else (
  179.   set /a z=8180,x=0
  180.   for /l %%a in (1,1,14) do (set/a "y=(z-x)/2+x"
  181.     for %%b in (!y!) do if "!_str:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)
  182.   )
  183.   if !m! lss !y! set m=!y!
  184.   for /l %%l in (0,1,!y!) do (
  185.     for %%m in ("!_str:~%%l,1!") do (
  186.       if "!str:%%~m=!" equ "!str!" set str=%%~m!str!
  187.       set m!n!.%%l=%%~m
  188.     )
  189.    ))
  190.   set/a n+=1
  191.   )
  192. )
  193. set /a "mz=m,nz=n,n%%=14+4,m%%=22+6"
  194. goto :d_loop
  195. :m_Tab 设置机关功能
  196. ::set #n.m=#k@ #t@(内容) [信息]
  197. set var=
  198. echo !cr!!cr!方法:@代表将要输入坐标,输入空格后回车清除机关,直接回车不改变
  199. set/p var=原机关:!#%n%.%m%!!cr!设置为:
  200. if defined var if "!var!" equ " " (set #!n!.!m!=) else (set vara=&goto :aadr)
  201. goto :loop
  202. :aadr 为设置的机关描述添加坐标
  203. set vara=!vara!%var:@=&rem %
  204. set var=%var:*@=%&if "%var%" equ "!var!" (set #!n!.!m!=!vara!&goto :loop)
  205. setlocal enabledelayedexpansion
  206. set zt=设置
  207. set r设置=设置
  208. set r25=正在设置: @!var!
  209. call :loop
  210. endlocal&set vara=!vara!%n%.%m%
  211. goto :aadr
  212. :tczh 填充/转换
  213. if "!bac!" equ "!zf!" goto :eof
  214. set /p in=[1.填充  2.转换]:
  215. if "!in!" equ "1" set m!n!.!m!=!zf!&set c_z=tc.!n!.!m!.!zf!.!bac!@!c_z:~,4096!&goto :fill
  216. if "!in!" equ "2" (
  217. set c_z=zh!zf!!bac!@!c_z:~,4096!
  218. :unzh
  219. for /l %%a in (0,1,!nz!) do for /l %%b in (0,1,!mz!) do (if "!m%%a.%%b!" equ "!bac!" set m%%a.%%b=!zf!)
  220. )
  221. goto :eof
  222. :fill
  223. if !caen! gtr 300 set cbuf=!n!.!m! !cbuf!&goto :eof
  224. set /a vn=n-1,vm=m-1,xn=n+1,xm=m+1,caen+=1
  225. for %%a in (!vn!.!m! !n!.!vm! !n!.!xm! !xn!.!m!) do (
  226.     if "!m%%a!" equ "!bac!" (
  227.         set m%%a=!zf!
  228.         for /f "tokens=1,2 delims=." %%b in ("%%a") do (
  229.             if %%b geq 0 if %%b leq !nz! if %%c geq 0 if %%c leq !mz! set/a n=%%b,m=%%c&call :fill
  230.         )
  231.     )
  232. )
  233. set/a caen-=1
  234. if !caen! leq 1 if defined cbuf (
  235.     set cbuf=
  236.     for %%a in (%cbuf%) do (for /f "tokens=1,2 delims=." %%b in ("%%a") do (
  237.             if %%b geq 0 if %%b leq !nz! if %%c geq 0 if %%c leq !mz! set/a n=%%b,m=%%c&call :fill
  238.     )    )
  239. )
  240. goto :eof
复制代码

作者: zhouyongjun    时间: 2009-9-14 15:33

太强大了
set cr=^
&set bac= 
这里似乎要改为set cr=&set bac= 才可以用,难道二者不一样,还是有连接符时不能这样转义回车?

这种设置变量的方法太棒了

[ 本帖最后由 zhouyongjun 于 2009-9-14 15:46 编辑 ]
作者: netbenton    时间: 2009-9-14 18:58

set cr=^

&set bac=
之间是要有空行才正确的,
本来是有一行空行的,只是论坛总是会自动把空给丢掉
作者: Batcher    时间: 2009-9-14 19:53     标题: 回复 3楼 的帖子

现在空行出来了,应该没有问题了吧?
作者: netbenton    时间: 2009-9-14 20:17

re 管理员
可以了,没问题了


原来刚贴进来的代码论坛是会自动丢弃空行的,
如果需要时,可以自己再加入的
作者: shenlong    时间: 2009-9-16 20:22

goto :eof是啥意思?




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