中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]全角字符地图编辑器(批处理)
作者:
标题: [原创]全角字符地图编辑器(批处理) 取消高亮 | 上一主题 | 下一主题
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『楼 主』:  [原创]全角字符地图编辑器(批处理)

纯cmd批处理制作
用来绘制全角文本图形

在绘制过程中:
按F1取得帮助
可以随时存盘,顺序地读取关级文件
可以随时添加画笔,选择画笔
可以上下左右翻页
可以选择连续画或者画点的状态
用数字直接修改步进单位,即方向键可以实现一次跳转N行或N列
可以方便地设置用在游戏中的机关数据,并为数据选择坐标提供了方便操作
可以使用填充功能,把当前连续的字符填充为画笔中的字符
可以使用字符转换功能,把与当前字符相同的点全部替换为画笔中的字符
可以使用多次恢复操作
@goto :begin
e 100 cd 16 86 c4 b4 02 cd 10 b4 4C CD 21
g
:begin
@echo off
set a=str= ■∷▓☆★大⊙♀△▲;bj=1;file=hdt;等=call :tczh^
;m=1;n=1;fn=0;b2=1;b3=2;b4=3;b5=4;b6=5;b7=6;b8=7;b9=8^
;Esc=exit/b;Ins=goto :m_ins;del=goto :m_del;paup=goto :m_paup;pado=goto :m_pado^
;f10=call :m_save;back=goto :m_back;home=goto :m_home;End=goto m_end^
;r23=字符表:空!str:~,10!  状态:!zt!  画笔:!zf!!ddb!  当前:!bac!!ddq!  步进:!bj!  帮助键F1 ^
;r24= 按 键:XASDFGHJKL;坐标:当前!n!.!m! 左上!n0!.!m0! 右下!n9!,!m9!   ^
;r25=最大边界:!nz!.!mz!  机关:!$jg!             ^
;r改写=移动;r移动=改写;zf=■^
;zt=移动;改写=!zf!;移动=!bac!^
;help=!cr!!cr!  F1本帮助   F4上一文件   F6下一文件   F10保存   Esc退出  回车刷屏!cr!!cr!  方向移动绘图坐标   空格转换状态^
  Up/Down/Home/End上/下/左/右 翻页!cr!!cr!  Ins加入一个绘图字符,直接回车则把当前字符作为画笔  !cr!^
  Del把当前绘图字符提出放到字符表最后(字符表移位)!cr!!cr!^
  Tab键为当前点加入机关设置项,以#号开头,保存在图形数据的后面!cr!!cr!^
  按=号进入填充/转换,当前字符==》画笔字符!cr!!cr!^
  Backspace恢复操作,  数字键选择步进单位!cr!!cr!   用对应的按键选择画笔,!cr!^
  并且在改写状态移动坐标自动绘图,在移动状态则按一个键画一个点!cr!
set %a:;=&set %

set "空格=set zt=^^!r!zt!^^!
set cr=^

&set bac= 
set/a n0=0,n9=21,m0=-1
set "Ent=set cls=cls^&if .!zt! equ .设置 goto :eof
set "f6=endlocal^&set /a fn+=1^&goto :restart
set "f4=endlocal^&set /a fn-=1^&goto :restart
set "f1=cls^^^&echo !help!^^^&pause
set "Tab=goto :m_Tab

::各字符分别存为变量

pushd "%~dp0"
chcp 437 >nul
graftabl 936 >nul

::c72=上;c80=下;c75=左;c77=右;
set @@=i15=Tab;i28=Ent;i14=back;i59=f1;i62=f4;i68=f10;i64=f6;i82=ins;i83=Del;i1=Esc^
;i13=等;i73=Paup;i81=Pado;i57=空格;i71=Home;i79=End;c72=n-;c75=m-;c80=n+;c77=m+
set %@@:;=&set %
set $a= &set $d=空

set /p file=输入文件名前缀:
for %%a in ("%file%") do set file=%%~na
set k45=!!
set cls=cls
:restart
setlocal enabledelayedexpansion
for /l %%a in (0,1,9) do (set kh=!kh!       )
if exist !file!!fn!.txt goto :m_open
:d_loop
if !mz! lss 38 set mz=38
for /l %%a in (0,1,9) do (set k3%%a=!str:~%%a,1!)
set zf=!str:~,1!
title 批处理版画图    文件:!file!!fn!.txt
:loop

(set bac=!m%n%.%m%!&set m!n!.!m!=⊕
if !n! geq !n9! set /a n0=n-21,n9=n
if !n0! lss 0 set /a n0=0,n9=21
if !n! lss !n0! set /a n0=n,n9=n+21

if !m! geq !m9! set /a m0=m-38,m9=m
if !m0! lss 0 set /a m0=0,m9=38
if !m! lss !m0! set /a m0=m,m9=m+38

if "!m0!!m9!" neq "%m0%%m9%" (
  set ebs=
  for /l %%b in (!m0!,1,!m9!) do (
     set "ebs=!ebs!^!@%%b^!^^^!$a^!@%%b^!^^^!
  )
)

set ebuf=
for /l %%a in (!n0!,1,!n9!) do (
    for %%c in ("!ebs:@=m%%a.!") do (
        for %%d in ("%%~c") do (set ebuf=!ebuf!%%~d:!cr!)
    )
)
set m!n!.!m!=!bac!&set ddq=!$d%bac%!&set ddb=!$d%zf%!
set $jg=!#%n%.%m%!
%cls%
set /p=!ebuf!%r23%!cr!%r24%!cr!%r25%<nul
set cls=
>nul debug <%~nx0
)
set err=%errorlevel%
set in=!i%err%! !err!
if defined c%err% goto :lrpd 上下左右
if defined k%err% goto :keyc 选择写入
if defined i%err% goto :cont 功能键
if defined b%err% set bj=!b%err%!
goto :loop

:keyc 画笔选择处理
set var=!k%err%!
set zf=%var%
if "!zt!" equ "移动" (set cone=!var!)
goto :loop

:cont 功能键处理
set comm=!i%err%!
set comm=!%comm%!
set comm=%comm%
%comm%
goto :loop

:lrpd 方向键处理过程
set var=!c%err%:~,1!
for /l %%a in (1,1,!bj!) do (call :lrpd_sub)
goto :loop

:lrpd_sub 方向子过程
(
if "!zt!" equ "改写" (set m!n!.!m!=%zf%) else (if defined cone set m!n!.!m!=%cone%)
set cone=
if !m%n%.%m%! neq !bac! set c_z=!n!.!m!=!bac!@!c_z:~,4096!
set /a !c%err%!=1
if !%var%! lss 0 set !var!=0
if !%var%! gtr !%var%z! set !var!z=!%var%!
)
set bac=!m%n%.%m%!&goto :eof

:m_back 恢复
if defined c_z (
set var=%c_z:@=&rem %
if !var! equ !c_z! set c_z=&goto :loop
set c_z=!c_z:*@=!
if "!var:~,2!" equ "zh" (set bac=!var:~2,1!&set zf=!var:~3,1!&call :unzh) else (
  if "!var:~,2!" equ "tc" (
    for /f "tokens=2-5 delims=." %%a in ("!var!") do set/a n=%%a,m=%%b&set bac=%%c&set zf=%%d
    call :fill
  )else (set m!var!)
)
)
goto :loop

:m_del
if "%zf%" neq "" (
  set str=!str:%zf%=!%zf%
  set zf=!str:~,1!
  goto :d_loop
)
goto :loop

:m_ins
set var=
set /p var=输入一个全角字符:
if not defined var set var=!bac!
set str=!var:~,1!!str:%var%=!
goto :d_loop

:m_paup
set/a n-=20,n0-=20,n9-=20
if !n! leq 0 set /a n=0
goto :m_pas

:m_pado
set/a n+=20,n0+=20,n9+=20
if !n9! gtr !nz! set /a n=nz,n9=nz

:m_pas
set zt=移动
set cls=cls
goto :loop

:m_Home
set/a m-=28,m0-=28,m9-=28
if !m! lss 0 set /a m=0
goto :m_pas

:m_End
set/a m+=28,m0+=28,m9+=28
if !m9! gtr !mz! set /a m=mz,m9=mz
goto :m_pas

:m_save  保存文件
setlocal enabledelayedexpansion
set ebs=
for /l %%b in (0,1,!mz!) do (
   set "ebs=!ebs!^!@%%b^!^^^!$a^!@%%b^!^^^!
)

(for /l %%a in (0,1,!nz!) do (
    for %%c in ("!ebs:@=m%%a.!") do for %%d in ("%%~c") do (set ebuf=%%~d)
    set ebuf=!ebuf: = !
    for %%c in ("1!ebuf!") do set ebuf=%%~nxc
    set ebuf=!ebuf: = !
    echo;!ebuf:~1!
)
set # 2>nul
)> !file!!fn!.txt

endlocal&goto :eof

:m_open 打开文件
set n=0
for /f "tokens=1* delims=:" %%j in ('findstr /n .* !file!!fn!.txt') do (
  set _str=%%k
  if defined _str (if "!_str:~,1!" equ "#" (set !_str!) else (
  set /a z=8180,x=0
  for /l %%a in (1,1,14) do (set/a "y=(z-x)/2+x"
    for %%b in (!y!) do if "!_str:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)
  )
  if !m! lss !y! set m=!y!
  for /l %%l in (0,1,!y!) do (
    for %%m in ("!_str:~%%l,1!") do (
      if "!str:%%~m=!" equ "!str!" set str=%%~m!str!
      set m!n!.%%l=%%~m
    )
   ))
  set/a n+=1
  )
)
set /a "mz=m,nz=n,n%%=14+4,m%%=22+6"
goto :d_loop

:m_Tab 设置机关功能

::set #n.m=#k@ #t@(内容) [信息]
set var=
echo !cr!!cr!方法:@代表将要输入坐标,输入空格后回车清除机关,直接回车不改变
set/p var=原机关:!#%n%.%m%!!cr!设置为:
if defined var if "!var!" equ " " (set #!n!.!m!=) else (set vara=&goto :aadr)
goto :loop

:aadr 为设置的机关描述添加坐标
set vara=!vara!%var:@=&rem %
set var=%var:*@=%&if "%var%" equ "!var!" (set #!n!.!m!=!vara!&goto :loop)
setlocal enabledelayedexpansion
set zt=设置
set r设置=设置
set r25=正在设置: @!var!
call :loop
endlocal&set vara=!vara!%n%.%m%
goto :aadr


:tczh 填充/转换
if "!bac!" equ "!zf!" goto :eof
set /p in=[1.填充  2.转换]:
if "!in!" equ "1" set m!n!.!m!=!zf!&set c_z=tc.!n!.!m!.!zf!.!bac!@!c_z:~,4096!&goto :fill
if "!in!" equ "2" (
set c_z=zh!zf!!bac!@!c_z:~,4096!
:unzh
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!)
)
goto :eof

:fill
if !caen! gtr 300 set cbuf=!n!.!m! !cbuf!&goto :eof
set /a vn=n-1,vm=m-1,xn=n+1,xm=m+1,caen+=1
for %%a in (!vn!.!m! !n!.!vm! !n!.!xm! !xn!.!m!) do (
    if "!m%%a!" equ "!bac!" (
        set m%%a=!zf!
        for /f "tokens=1,2 delims=." %%b in ("%%a") do (
            if %%b geq 0 if %%b leq !nz! if %%c geq 0 if %%c leq !mz! set/a n=%%b,m=%%c&call :fill
        )
    )
)
set/a caen-=1

if !caen! leq 1 if defined cbuf (
    set cbuf=
    for %%a in (%cbuf%) do (for /f "tokens=1,2 delims=." %%b in ("%%a") do (
            if %%b geq 0 if %%b leq !nz! if %%c geq 0 if %%c leq !mz! set/a n=%%b,m=%%c&call :fill
    )    )
)

goto :eof
[ Last edited by netbenton on 2009-9-13 at 11:45 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-9-10 12:42
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
matlan
初级用户




积分 87
发帖 63
注册 2008-8-23
状态 离线
『第 2 楼』:  

真强悍!

2009-9-12 13:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 3 楼』:  更新

增加了字符转换功能
增加了填充功能
增加了游戏机关设置功能

**已经在一楼更新**



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-9-13 13:47
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
antony521
新手上路




积分 14
发帖 14
注册 2010-3-29
状态 离线
『第 4 楼』:  

晕头转向

2010-4-5 11:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zaixinxiangnian
初级用户





积分 151
发帖 106
注册 2009-10-9
来自 河南省
状态 离线
『第 5 楼』:  

netbenton是对BAT有一定成就的了,但我对于初学BAT的看不懂,如果加个注释就好了

2010-4-5 12:33
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (657614933)  编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 6 楼』:  

怎么一闪而过呢?

2010-4-5 13:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by ZJHJ at 2010-4-5 13:27:
怎么一闪而过呢?

你那算不错的了,我运行后正常,按F1切到帮助,也不知道乱按哪几个键了,结果程序没反应了。结束了cmd进程,窗口依然在,转进程直接转到csrss进程上了。csrss进程的cpu使用率一路狂涨。。。。
按关机没有任何反应,只能强行关了重新启动机器了。。。。

[ Last edited by Hanyeguxing on 2010-4-5 at 13:50 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-5 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chardos
初级用户





积分 31
发帖 16
注册 2010-3-4
状态 离线
『第 8 楼』:  

......

2010-4-5 16:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 9 楼』:  

好东西正需要...要不一起合作搞个彩色版的?



SYBNQQ:354324773
2010-4-5 20:37
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: