中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】点阵编码生成、解释器(震撼的字幕!)
作者:
标题: 【原创】点阵编码生成、解释器(震撼的字幕!) 取消高亮 | 上一主题 | 下一主题
tkaven
新手上路





积分 16
发帖 11
注册 2009-2-2
状态 离线
『楼 主』:  【原创】点阵编码生成、解释器(震撼的字幕!)

功能介绍:




                              ▓▓▓
                               ▓▓▓
                               ▓▓
                               ▓▓
                               ▓▓
                               ▓▓  ▓
                               ▓▓▓▓▓▓
                            ▓▓▓▓▓▓
                  ▓▓▓          ▓▓
                   ▓▓▓         ▓▓
                    ▓▓▓        ▓▓▓▓▓▓▓▓▓▓▓
                            ▓▓▓▓▓▓▓▓▓▓
                        ▓▓▓▓▓▓
                            ▓     ▓▓
                      ▓     ▓▓     ▓▓▓
                      ▓     ▓▓      ▓▓▓
                     ▓     ▓▓ ▓      ▓▓
                    ▓▓    ▓▓  ▓▓
                    ▓    ▓▓   ▓▓▓▓▓▓
                   ▓▓         ▓▓  ▓▓▓
                  ▓▓▓        ▓▓   ▓▓
                  ▓▓        ▓▓▓   ▓▓
                ▓▓▓▓        ▓▓▓▓ ▓▓
                 ▓▓        ▓▓   ▓▓▓
                 ▓▓       ▓▓    ▓▓▓▓
                        ▓▓     ▓▓ ▓▓▓
                       ▓▓     ▓▓   ▓▓▓▓▓
                      ▓      ▓▓      ▓▓▓▓▓▓▓
                            ▓         ▓▓▓▓▓▓▓▓
                          ▓▓


比如 上面的 这个点阵字 用 "点阵编码_生成器.bat" 转换后的代码为:



编码:
30 -3 / 31 -3 /# 3 31 -2 / 31 -2 2 -1 / 31 -6 / 28 -6 / 18 -3 10 -2 / 19 -3 9 -2 / 20 -3 8 -11 / 28 -10 / 24 -6 / 28 -1 5 -2 / 22 -1 5 -2 5 -3 / 22 -1 5 -2 6 -3 / 21 -1 5 -2 1 -1 6 -2 / 20 -2 4 -2 2 -2 / 20 -1 4 -2 3 -6 / 19 -2 9 -2 2 -3 / 18 -3 8 -2 3 -2 / 18 -2 8 -3 3 -2 / 16 -4 8 -4 1 -2 / 17 -2 8 -2 3 -3 / 17 -2 7 -2 4 -4 / 24 -2 5 -2 1 -3 / 23 -2 5 -2 3 -5 / 22 -1 6 -2 6 -7 / 28 -1 9 -8 / 26 -2 /
转换后的代码 用 "点阵编码_解释器.bat" 就能还原成 上面的点阵字

感觉挺过瘾的 (此套代码花了我两天时间,因该没BUG了)

代码中 反复利用到的批处理技巧有:
1.变量的延迟
2.穿插式被动叠加技术 (大概很少人用吧 但是作用却很大)
3.计算代码 地址的偏移
4.叠加压缩代码技术
5.还有.....  自己看 记不太清楚了(一些小技巧)

★.本代码编写格式是我一向喜欢用的模块形式 所以有兴趣的朋友 可以很容易的加入到 自己的作品当中

当用大大的 点阵字 来提示用户操作时 用户是种什么感觉? (应该会很过瘾吧! 哈哈)

注:本套代码 运行时 几乎不占CPU 效率很高



欢迎大家测试...


以下是两个文件的代码,
压缩包里附有 示例 与我推荐的两个在线点阵字生成网址


点阵编码_生成器.bat
@Echo off&color a
Title ☆Title 点阵编码生成器 -By 凌枫工作组  Q群:35962310-
setlocal EnableDelayedExpansion
set S=    

Rem 设置 ↓
SET 换行符=/
SET 循环符=#
Rem 设置↑


:输入文档路径
If "%1" == "" (
        FOR /L %%S IN (1,1,7) Do echo.
        Echo %S%%S%请将你要转换的点阵字本文文档 直接拖到本批处理上.
        FOR /L %%S IN (1,1,5) Do echo.
        Echo %S%%S%请在没有空格 与 特殊字符的 路径下操作.
        pause>nul&Exit
)



call :获取前背景 %1
:检测前背景
cls
FOR /L %%S IN (1,1,5) Do echo.
Echo %S%你的点阵字的前景为[%前景%],背景为[%背景%]
echo.
Echo %S%注意:文档中的 前背景字符 的全半角要一致。
FOR /L %%S IN (1,1,4) Do echo.
Echo %S%如果是请[直接回车],如果不是请按顺序输入你的前景与背景.
FOR /L %%S IN (1,1,3) Do echo.
SET /P 请输入=%S%请确认:
if /i Not "%请输入%" == "" (
        set 前景=!请输入:~0,1!
        set 背景=!请输入:~1,1!
        Goto 检测前背景
)
Rem 检测前背景↑


Rem 主体开始↓
Set 循环次数=1
set 循环次数编码=1
cls
FOR /L %%S IN (1,1,11) Do echo.
Echo %S%%S%%S%正在转换 请稍后.......
for /f "tokens=*" %%i in ('type "%1"') do (
        set Line=%%i
        if Not "!Line!" == "!BLine!" (
                if Not "!需循环编码!" == "" call :替换需循环编码
                call :获取当前行编码
        ) else (
                If "!开始行数!" == "" Set 开始行数=!行数!
                Set /a 循环次数=!循环次数!+1
                set /a 循环次数编码=!循环次数编码!+1
                if "!需循环编码!" == "" Call :获取需循环编码
        )
        set BLine=%%i
        set /a 行数=!行数!+1
)

for %%I in (%1) do (
        FOR /L %%S IN (1,1,2) Do echo.>>"%%~dI%%~pI%%~nI_点阵编码.txt"
        echo %编码%>>"%%~dI%%~pI%%~nI_点阵编码.txt"
        cls
        FOR /L %%S IN (1,1,11) Do echo.
        Echo %S%%S%%S%  转换 已顺利完成!
        FOR /L %%S IN (1,1,5) Do echo.
        echo %S%编码已存入 "%%~dI%%~pI%%~nI_点阵编码.txt"  按任意键退出...&pause>nul&Exit
)
Exit
Rem 主体结束↑


:获取前背景
for /f "tokens=*" %%i in ('type "%1"') do (
    set "str=%%i"
    if not defined 背景 set 背景=!str:~,1!
    call,set 前景=%%str:!背景!=%%
    if defined 前景 (set "前景=!前景:~,1!"&goto :eof)
)
goto :eof


:获取需循环编码
if "%已执行过一次%" == "Y" (Set /a 开始行数=%开始行数%-%循环次数%+2&set /a 循环次数编码=%循环次数编码%+1) Else (Set 已执行过一次=Y)
For /F "tokens=%开始行数% delims=%换行符%" %%c in ("%编码%") do Set 需循环编码=%%c
GOTO :EOF

:替换需循环编码
set 编码=!编码:%换行符%%需循环编码%%换行符%=!
set 编码=%编码%%换行符%%循环符% %循环次数编码%%需循环编码%%换行符%
set 开始行数=
set 需循环编码=
set 循环次数编码=
GOTO :EOF


:获取当前行编码
if Not "%本次负编码%" == "" set 编码=%编码%%本次正编码%
if Not "%本次正编码%" == "" set 编码=%编码%%本次负编码%
set 本次正编码=&set 本次负编码=

set 本次列数=0&set 下个列数=0
set 本次字符=&set 下个字符=


        :继续获取
        set 本次字符=!Line:~%本次列数%,1!
        set /a 本次列数=%本次列数%+1
        set 下个字符=!Line:~%本次列数%,1!

        if Not "%本次字符%" == "%前景%" (
                set /a 本次正编码=%本次正编码%+1
                if not "%编码%" == "%编码%%本次负编码%" Set 编码=%编码%%本次负编码% &set 本次负编码=

                ) else (
               
                if Not "%本次字符%" == "%背景%" (
                        set /a 本次负编码=%本次负编码%-1
                        if Not "%编码%" == "%编码%%本次正编码%" Set 编码=%编码%%本次正编码% &set 本次正编码=
                )
        )
       
        if "%本次字符%" == "" (
                set 编码=%编码%%换行符%&Goto :EOF
                ) else (
Goto 继续获取
)
点阵编码_解释器.bat
@Echo off&color a
Title -☆Title 点阵编码解释模块- By 凌枫工作组 Q群:35962310
setlocal EnableDelayedExpansion
set S=    

Rem 设置 ↓
SET 前景=▓
SET 背景= 
SET 换行符=/
SET 循环符=#
Rem 设置↑


:输入文档路径
If "%1" == "" (
FOR /L %%S IN (1,1,7) Do echo.
Echo %S%%S%请将点阵字的编码本文文档 直接拖到本批处理上.
FOR /L %%S IN (1,1,5) Do echo.
Echo %S%%S%请在没有空格 与 特殊字符的 路径下操作.
pause>nul&Exit
)
Mode con cols=127 lines=44



Rem 调用时 记得加引号 call :点阵编码解释模块 "编码"
for /f "tokens=*" %%i in ('type "%1"') do call :点阵编码解释模块 "%%i"



Exit


:点阵编码解释模块
set 点阵编码=%1
set 点阵编码=%点阵编码:~1,-1%
for %%i in (%点阵编码%) do (

set A=%%i
set B=!A:-=!

if "%%i"=="%换行符%" (
if Not "!循环编码!" == "" (
set 循环编码=!循环编码!
For /l %%N in (1,1,!循环次数!) do (Call :解释循环编码 "!循环编码!")
echo.
set 循环编码=
) else (
echo.
)
) else (

if "%%i"=="%换行符%%循环符%" (
set 循环编码=%换行符%
Set 下一步获取循环次数=Y

) else (

if Not "!循环编码!" == "" (
if /i "!下一步获取循环次数!"=="Y" (Set 循环次数=%%i&Set 下一步获取循环次数=) Else (set 循环编码=!循环编码! %%i )
) else (
If %%i GTR 0 (
for /l %%N in (1,1,%%i) do (set /p=%背景%<NUL)
) else (
for /l %%S in (1,1,!B!) do (set /p=%前景%<NUL)
)
)
)
)

)
pause>nul
GOTO :EOF



:解释循环编码
set 循环编码=%1
set 循环编码=%循环编码:~1,-1%
for %%c in (%循环编码%) do (
if "%%c"=="%换行符%" (
echo.
) else (
set C=%%c
set D=!C:-=!

if %%c GTR 0 (
for /l %%N in (1,1,%%c) do (set /p=%背景%<NUL)
) else (
for /l %%S in (1,1,!D!) do (set /p=%前景%<NUL)
)
)

)
GOTO :EOF
本来还想 发几个 示例的 但是字数受限啊 呵呵


http://upload.cn-dos.net/img/1589.rar

[ Last edited by tkaven on 2009-7-8 at 02:38 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 zzz19760225 分数: +2  时间:2017-11-14 17:45


2009-7-7 08:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tkaven
新手上路





积分 16
发帖 11
注册 2009-2-2
状态 离线
『第 2 楼』:  

这么好的帖子 怎么没人回?

2009-7-7 11:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
radem
高级用户

CMD感染者


积分 691
发帖 383
注册 2008-5-23
状态 离线
『第 3 楼』:  

感谢分享!
先顶,再慢慢欣赏



2009-7-7 11:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 4 楼』:  

哦,有过类似的
@echo off &setlocal enabledelayedexpansion
title CodeBy523066680
for /l %%x in (3,-1,1) do (
for /f "delims== tokens=1" %%a in ('set') do (set %%a=)
set "k=                    "
for /l %%a in (1,1,15) do (set l%%a=!k!)
for /f "delims=x" %%a in (%~snx0) do (
  if "%%a"==":%%xend" (set "yes=")
  if defined yes (set /a "n+=1" &set S!n!=%%a)
  if "%%a"==":%%x" (set /a yes=1,n=0)
)
for /l %%a in (1,1,12) do (
   for /l %%b in (0,1,15) do (
   if "!S%%a:~%%b,1!"=="*" (set x_!random!_%%a_%%b_x=x)
   )
)
for /f "delims=_ tokens=3,4" %%a in ('set x_') do (
   set /a x=%%b+1
   call set l%%a=!l%%a:~0,%%b!*%%l%%a:~!x!%%
   call :a 50
   cls
   for /l %%a in (1,1,15) do (echo,!l%%a!)
)
call :a 500
)
pause
exit

:a
for /l %%a in (1,1,%1) do (echo,>nul)
goto :eof
:3
***************
***************
            ***
            ***
            ***
***************
***************
            ***
            ***
            ***
***************
***************
:3end
:2
***************
***************
            ***
            ***
            ***
***************
***************
***
***
***
***************
***************
:2end
:1
      ***
      ***
      ***
      ***
      ***
      ***
      ***
      ***
      ***
      ***
      ***
      ***
:1end


   此帖被 +2 点积分    点击查看详情   
评分人:【 zzz19760225 分数: +2  时间:2018-12-6 12:17




综合型编程论坛

我的作品索引
  
2009-7-7 22:17
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
tkaven
新手上路





积分 16
发帖 11
注册 2009-2-2
状态 离线
『第 5 楼』:  

修正了 一个BUG

2009-7-8 02:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 6 楼』:  

拖放后直接窗口关了,楼主花费了九牛二虎之力,在一个小小的问题上测试者不能看到效果,实在可惜。



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2009-8-6 20:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





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

拖放后直接窗口关了

2009-8-7 00:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tkaven
新手上路





积分 16
发帖 11
注册 2009-2-2
状态 离线
『第 8 楼』:  注意 是拖动到 P处理的图标上 不是拖到窗口上

注意 是拖动到 P处理的图标上 不是拖到窗口上

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

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 9 楼』:  

要么需要有现成的点阵编码记录文本,要么要有现成的点阵字记录文本。我还以为是输入文字能自动转换为点阵字或相应的编码。

2009-8-8 13:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: