Board logo

标题: [游戏娱乐] 点阵生成、解释器批处理版 [打印本页]

作者: zhouyongjun    时间: 2009-7-9 00:21     标题: 点阵生成、解释器批处理版

前天有位兄台发了个,感觉很好玩,回家就自己写了个
  1. @echo off&setlocal enabledelayedexpansion
  2. title 点阵生成-解释器
  3. :begin
  4. cls&color 3f&mode con cols=50 lines=16
  5. set fore=&set back=&call :blank 5
  6. set file=&set/p file=   拖入点阵文件到这里:
  7. if not defined file goto begin
  8. if not exist %file% goto begin
  9. type %file%|findstr "[0-9]"|findstr "\-" >nul 2>nul&&goto explain
  10. :_crate //**点阵生成编码**//
  11. call :foreback %file%
  12. call :file_name_path 编码
  13. >"%tee%" echo/%fore%%back%
  14. :crate
  15. cls&call :blank 5
  16. echo      程序检测到前景为[%fore%]背景为[%back%]
  17. echo      输入任意字母互换前背景,默认直接回车
  18. echo/&set choices=&set/p choices=   please choice:
  19. if defined choices (call :change back fore&goto crate)
  20. for /f "delims=" %%a in ('findstr/n ".*" "%_path%"') do (
  21.     set "var=%%a"&set var=!var:*:=!&set "m="&set "n="
  22.     if defined var (call :totext&echo/>>"%tee%") else echo/>>"%tee%"
  23. )
  24. echo/&echo                  生成编码成功!
  25. ping /n 2 127.1>nul&goto begin
  26. :explain //**编码解释成点阵**//
  27. cls&call :blank 5
  28. echo       输入任意字母彩色显示,默认颜色直接回车
  29. echo/&set input=&set/p input=   please input:
  30. cls&mode con cols=120 lines=60
  31. call :file_name_path
  32. set/p fb=<"%_path%"
  33. set "fore=%fb:~,1%"&set "back=%fb:~1%"
  34. if defined input <nul set/p= >%fore%
  35. for /f "skip=1 delims=" %%a in ('findstr/n ".*" "%_path%"') do (
  36.     set "_var=%%a"&set _var=!_var:*:=!
  37.     if defined _var (
  38.         for %%b in (!_var!) do (
  39.             if %%b gtr 0 (for /l %%c in (1,1,%%b) do <nul set/p=%back%) else (
  40.                 if defined input (
  41.                     set "_color=0123456789abcdef"
  42.                     set/a x=!random!%%16
  43.                     for %%i in (!x!) do set "_color=!_color:~%%i,1!"
  44.                     for /l %%c in (%%b,1,-1) do findstr /a:!_color! . %fore%*
  45.                     ) else (for /l %%c in (%%b,1,-1) do <nul set/p=%fore%)
  46.             )
  47.         )
  48.         echo/
  49.     ) else echo/
  50. )
  51. if defined input del %fore%>nul
  52. call :blank 3
  53. pause>nul&goto begin
  54. :foreback //**获取前背景**//
  55. for /f "usebackq delims=" %%i in ("%~1") do (
  56.     set "str=%%i"
  57.     if not defined back set back=!str:~,1!
  58.     call,set fore=%%str:!back!=%%
  59.     if defined fore (
  60.         set "fore=!fore:~,1!"
  61.         if "!fore!" equ " " call :change back fore
  62.         if "!fore!" equ " " call :change back fore
  63.         goto :eof
  64.     )
  65. )
  66. goto :eof
  67. :blank //**产生空行**//
  68. for /l %%i in (1,1,%1) do echo/
  69. goto :eof
  70. :change //**交换前背景**//
  71. set %1=%fore%&set %2=%back%&goto :eof
  72. :file_name_path //**文件名称,路径格式化**//
  73. for %%i in (%file%) do (set "dire=%%~dpi"&set "_path=%%~fi"&set "tee=!dire!%%~ni_%1.txt")
  74. goto :eof
  75. :totext //**逐个截取统计成编码写入文本**//
  76. if defined var (
  77.     set #var=%var:~,1%
  78.     if "!#var!" neq "%fore%" (
  79.         set/a n+=1&if defined m (>>"%tee%" <nul set/p=-%m% &set "m=")
  80.             ) else (set/a m+=1&if defined n (>>"%tee%" <nul set/p=%n% &set "n=")
  81.               )
  82.     set var=!var:~1!
  83.     goto totext
  84. )
  85. if defined n (>>"%tee%" <nul set/p=%n% ) else (
  86.     >>"%tee%" <nul set/p=-%m%
  87. )
  88. goto :eof
复制代码
测试文本
  1.                                                 
  2.                                                 
  3.       ▓  ▓  ▓     ▓    ▓        ▓▓▓▓▓▓▓         
  4.       ▓  ▓  ▓     ▓    ▓    ▓▓▓▓▓  ▓  ▓         
  5.     ▓▓▓▓ ▓  ▓     ▓▓▓▓ ▓      ▓ ▓▓▓▓▓▓▓         
  6.       ▓  ▓  ▓ ▓   ▓  ▓ ▓▓     ▓ ▓  ▓  ▓         
  7.       ▓  ▓▓ ▓▓   ▓   ▓ ▓ ▓  ▓▓▓▓▓  ▓  ▓         
  8.       ▓▓ ▓  ▓    ▓  ▓  ▓  ▓   ▓ ▓▓▓▓▓▓▓         
  9.     ▓▓▓  ▓  ▓   ▓ ▓ ▓  ▓      ▓    ▓            
  10.       ▓  ▓  ▓      ▓   ▓      ▓  ▓▓▓▓▓          
  11.       ▓  ▓ ▓▓ ▓    ▓   ▓      ▓▓   ▓            
  12.       ▓  ▓▓ ▓ ▓   ▓ ▓▓ ▓    ▓▓     ▓            
  13.     ▓▓▓  ▓  ▓▓▓ ▓▓    ▓▓▓▓▓    ▓▓▓▓▓▓▓▓         
  14.                                                 
  15.                                                 
复制代码
随风代码中的几个字
  1.                                                   
  2.    ●  ●       ●   ●●●●   ●●●●●●●●●      ●  ●      
  3.    ●  ● ●   ●●●●● ●  ●       ●      ●●●●●●●●●●●   
  4.   ●   ●  ●   ●    ●●●●       ●         ●   ●      
  5.   ●●●●●●●●●  ●    ●  ●       ●        ● ● ●  ●    
  6.  ●●   ●      ●●●● ● ●●  ●●●●●●●●●●●  ●●●  ●●●     
  7. ● ●   ●          ●          ●        ● ●  ● ●     
  8.   ●   ●●     ●●●●●●●●●      ● ●      ●●●● ●●●●●   
  9.   ●  ●  ●        ●          ● ●                   
  10.   ●  ●  ●     ●●●●●●●      ●   ●     ● ● ●  ●●    
  11.   ● ●    ●       ●        ●     ●    ● ●  ● ● ●   
  12.   ●●      ● ●●●●●●●●●●● ●●       ●● ●  ●●●●●● ●   
  13.                                                   
  14.                                                   
  15.                                                   
  16.   ●   ●         ● ● ●        ●         ●  ●       
  17.   ●   ●     ●●●●  ●  ●       ●        ●   ●  ●    
  18.   ●●●●●●●●●    ●  ●      ●●●●●●●●●   ●●   ● ●     
  19.  ●●   ●     ●●●●●●●●●●●  ●   ●   ●  ● ●  ●●●  ●   
  20.  ●●  ●         ●  ●      ●   ●   ●    ●●● ●   ●   
  21. ● ●  ●●●●●     ● ●●  ●   ●   ●   ●    ●   ●●●●●   
  22.   ● ●●   ●    ●●● ● ●    ●●●●●●●●●       ●        
  23.   ●● ●   ●  ●● ●   ●         ●      ●●●●●●●●●●●   
  24.   ●  ●   ●     ●  ●●  ●      ●           ●        
  25.   ●  ●   ●     ●●●  ● ●      ●           ●        
  26.   ●  ●●●●●   ●●●     ●●      ●           ●        
  27.                                                   
  28.                                                   
复制代码
不能插入截图,是不是等级不够啊
如要交换前背景,即反色显示,必须前背景全半角一致
代码完全是自己的思路,如有雷同纯属巧合!

更新了下,增加了彩色显示功能。。。
作者: Batcher    时间: 2009-7-9 09:17

你的级别可以插入截图。
是不是图片格式不对?或者体积太大?
关于如何压缩图片,可参考:http://bbs.bathome.net/thread-4673-1-1.html
作者: zhouyongjun    时间: 2009-7-9 10:24

不能插入本地图片吧?
算了,节约论坛空间。。。
作者: zhouyongjun    时间: 2009-7-13 00:01

周末在家无聊,觉上面那玩意儿必须要有点阵文字。自己设计浪费时间,也不好弄。
在网上没找到能生成文本点阵文字比较如意的软件;有在线生成的,文字多也不好用。
后面找到一个这样的东西,可以复制汉字或者英文进去很快生成由数字“1”组成的点阵文字,但是全部一列显示,而且前面还有一列十六进制数字。
http://cachefile26.rayfile.com/z ... 647e442/fontgen.rar(146KB)
那是高级语言里面的什么东西,我不懂,拿过来凑合着用,但是要经过处理
下面是我写的处理用的代码,可以更改每行显示几个字
我试过1024*768的分辨率下记事本最大化,一行最多4个汉字。
  1. @echo off&setlocal enabledelayedexpansion
  2. ::设置字体高度、宽度、每行显示文字个数;可在下面修改
  3. set/a high=16,wide=16,per=3
  4. title 生成点阵字
  5. color 3f&mode con cols=50 lines=16
  6. echo/&echo/&echo/&echo/
  7. echo/          把要处理的点阵文件拖到这里!
  8. set/p file=  
  9. for /f "tokens=3" %%a in ('find/c " " %file%') do set "row=%%a"
  10. for %%i in (%file%) do set "tee=%%~dpi\%%~ni_点阵.txt"
  11. set/a row+=(per-1)*high
  12. echo/>nul 3>"%tee%"
  13. :loop //**n为当前读取行,m为当前读取字**//
  14. call :distill %file%
  15. set/a m+=1
  16. if "%m%" equ "%per%" (
  17.         set/a m=0,line+=1,mod=line%%high
  18.         if "!mod!" equ "0" set/a line=n+1
  19.         echo/
  20. )
  21. set/a n=high*m+line
  22. set "_skip=skip=%n%"
  23. if "%n%" neq "%row%" goto loop
  24. exit
  25. :distill //**提取字符各部分拼凑到一行**//
  26. for /f "%_skip% usebackq delims=" %%a in ("%~1") do (
  27.     set "str=%%a"
  28.     if "!str:~2,1!" equ " " (set "str=!str:~-16!") else (set "str=!str:~-32!")
  29.     set "str=!str:11=▓!"&set "str=!str:  = !"&set "str=!str: =!"
  30.     <nul set/p=!str!&goto :eof
  31. )
复制代码

[ 本帖最后由 zhouyongjun 于 2009-7-13 12:33 编辑 ]
作者: shenlong    时间: 2009-10-23 20:14

各位,这拖入的文件是啥格式的。




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