[Batch] Batch Designer - by SmartGenius

Iniciado por SmartGenius, 14 Abril 2009, 22:30 PM

0 Miembros y 1 Visitante están viendo este tema.

SmartGenius

Debido a la dificultad para poder utilizar la tecnica de Coordenadas que he usado en los Batch games, me di a la tarea de realizar un herramienta que permitiese "dibujar" de manera facil caracteres en pantalla, y despues portar estos mismos en el formato de coordenadas...

Aqui les presento el Batch Designer   ;D ;D


Una especia de diseñador grafico (no como Paint o Photoshop, pero casi ) en el cual podran crear un Dibujo de X por Y y en el cual podran ir moviendose y poner los diferentes "Iconos" con los cuales se representarian Dibujos de Arte ASCII o para diseñar Niveles de Juegos Batch como el PushBox.

@echo off
@title Batch Designer - SmartGenius
@::Coded by SmartGenius

:Ck
if not exist "keyboard.exe" (Goto :NoKey)

:Menu
setlocal enabledelayedexpansion
cls
echo. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo. º Batch Designer  º
echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo. ÛßßÛßßßßßßßßßßßßßßÛ
echo. Û1.Û Nuevo Dibujo Û
echo. ÛßßÛßßßßßßßßßßßßßßÛ
echo. Û2.Û Ayuda        Û
echo. ÛßßÛßßßßßßßßßßßßßßÛ
echo. Û3.Û Salir        Û
echo. ßßßßßßßßßßßßßßßßßßß
echo.
keyboard
if "%errorlevel%"=="49" (Goto :Load)
if "%errorlevel%"=="50" (Goto :Help)
if "%errorlevel%"=="51" (Goto :Exit)
Goto :Menu

:Load
cls
echo.
echo. Introduzca las Dimensiones del Dibujo
echo.
set /p LimX="Ancho > "
set /p LimY="Alto > "
if not defined LimX Goto :Load
if not defined LimY Goto :Load

:Icon
Set AsciiIcons= ±²ÛºÍɻȼ
Set GameIcons= °±²Ûþ
Set Icons=%AsciiIcons%
echo. Tipo de Iconos
echo.
echo. 1. Iconos ASCII : %AsciiIcons%
echo. 2. Iconos Juegos: %GameIcons%
echo.
keyboard
if "%errorlevel%"=="50" (Set Icons=%GameIcons%)

:Init
Set Cursor=þ
Set Last=°
set IniX=0
Set IniY=0
for /l %%i in (0,1,9) do (set Icon%%i=)
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=°))
set X0Y0=%Cursor%
set CurPos=X0Y0
Goto :Graphic

:Graphic
Call :Clear
echo.
echo. Tablero de %LimX% por %LimY%            Tecla [X] Volver al Menu
echo.
echo. Presione los Numeros del 0 al 9 para introducir un Icono
echo. Presione la tecla Enter para Exportar el Dibujo a Coordenadas
echo.
set /p var="Iconos: "<nul
for /l %%n in (0,1,9) do (set /p var="%%n = !Icons:~%%n,1!  "<nul)
echo.
for /l %%d in (0,1,%LimY%) do (
for /l %%e in (0,1,%LimX%) do (
set Lin_%%d=!Lin_%%d!!X%%eY%%d!))
echo.
for /l %%f in (0,1,%LimY%) do (echo. !Lin_%%f!)
keyboard
if "%errorlevel%"=="77" (call :MovX+ "%CurPos%")
if "%errorlevel%"=="75" (call :MovX- "%CurPos%")
if "%errorlevel%"=="80" (call :MovY+ "%CurPos%")
if "%errorlevel%"=="72" (call :MovY- "%CurPos%")
if "%errorlevel%"=="48" (Call :Draw "%CurPos%" 0)
if "%errorlevel%"=="49" (Call :Draw "%CurPos%" 1)
if "%errorlevel%"=="50" (Call :Draw "%CurPos%" 2)
if "%errorlevel%"=="51" (Call :Draw "%CurPos%" 3)
if "%errorlevel%"=="52" (Call :Draw "%CurPos%" 4)
if "%errorlevel%"=="53" (Call :Draw "%CurPos%" 5)
if "%errorlevel%"=="54" (Call :Draw "%CurPos%" 6)
if "%errorlevel%"=="55" (Call :Draw "%CurPos%" 7)
if "%errorlevel%"=="56" (Call :Draw "%CurPos%" 8)
if "%errorlevel%"=="57" (Call :Draw "%CurPos%" 9)
if "%errorlevel%"=="88" (Goto :Menu)
if "%errorlevel%"=="120" (Goto :Menu)
if "%errorlevel%"=="13" (Goto :Export)
Goto :Graphic

:MovX+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
if "%%p"=="%LimX%" Goto :Eof
if !%~1!==%Cursor% set %~1=%Last%
set /a MovX=%%p+1
call set Last=%%X!MovX!Y%%q%%
set X!MovX!Y%%q=%Cursor%
set CurPos=X!MovX!Y%%q
)
Goto :Eof

:MovX-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
if "%%p"=="%IniX%" Goto :Eof
if !%~1!==%Cursor% set %~1=%Last%
set /a MovX=%%p-1
call set Last=%%X!MovX!Y%%q%%
set X!MovX!Y%%q=%Cursor%
set CurPos=X!MovX!Y%%q
)
Goto :Eof

:MovY+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
if "%%q"=="%LimY%" Goto :Eof
if !%~1!==%Cursor% set %~1=%Last%
set /a MovY=%%q+1
call set Last=%%X%%pY!MovY!%%
set X%%pY!MovY!=%Cursor%
set CurPos=X%%pY!MovY!
)
Goto :Eof

:MovY-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
if "%%q"=="%IniY%" Goto :Eof
if !%~1!==%Cursor% set %~1=%Last%
set /a MovY=%%q-1
call set Last=%%X%%pY!MovY!%%
set X%%pY!MovY!=%Cursor%
set CurPos=X%%pY!MovY!
)
Goto :Eof

:Draw
Set %~1=!Icons:~%2,1!
Goto :Eof

:Export

echo.
echo Introduzca un Nombre de Archivo
set /p filename=">> "
if not defined filename set filename=BD_%random%
Call :Template "%filename%"
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
if "!X%%aY%%b!"=="%Icons:~0,1%" set Icon0=!Icon0!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~1,1%" set Icon1=!Icon1!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~2,1%" set Icon2=!Icon2!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~3,1%" set Icon3=!Icon3!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~4,1%" set Icon4=!Icon4!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~5,1%" set Icon5=!Icon5!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~6,1%" set Icon6=!Icon6!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~7,1%" set Icon7=!Icon7!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~8,1%" set Icon8=!Icon8!,X%%aY%%b
if "!X%%aY%%b!"=="%Icons:~9,1%" set Icon9=!Icon9!,X%%aY%%b
))
echo. Coordenadas Generadas
for /l %%n in (0,1,9) do (
if Defined Icon%%n (
echo. "!Icons:~%%n,1!" = !Icon%%n:~1!
echo for %%%%a in ^(!Icon%%n:~1!^) do ^(Set %%%%a=!Icons:~%%n,1!^) >>%filename%.bat
))
endlocal&set filename=%filename%
echo.>>%filename%.bat
echo :Graphic >>%filename%.bat
echo Call :Clear >>%filename%.bat
echo echo. >>%filename%.bat
echo for /l %%%%d in ^(0,1,%%LimY%%^) do ^( >>%filename%.bat
echo for /l %%%%e in ^(0,1,%%LimX%%^) do ^( >>%filename%.bat
echo set Lin_%%%%d=!Lin_%%%%d!!X%%%%eY%%%%d!^)^) >>%filename%.bat
echo for /l %%%%f in (0,1,%%LimY%%) do (echo. !Lin_%%%%f!) >>%filename%.bat
echo echo.>>%filename%.bat
echo pause >>%filename%.bat
echo exit >>%filename%.bat
echo. >>%filename%.bat
echo :Clear >>%filename%.bat
echo cls >>%filename%.bat
echo for /l %%%%m in ^(0,1,%%LimY%%^) do ^(set Lin_%%%%m=^) >>%filename%.bat
echo Goto :Eof >>%filename%.bat
echo.
echo. Archivo "%filename%.bat" Generado Correctamente...
echo.
pause
Goto :Menu

:Template
echo  @echo off >%~1.bat
echo  @title %~1 - Batch Designer >>%~1.bat
echo ::Created with Batch Designer >>%~1.bat
echo ::Coded by SmartGenius >>%~1.bat
echo. >>%~1.bat
echo setlocal enabledelayedexpansion >>%~1.bat
echo. >>%~1.bat
echo :Init >>%~1.bat
echo Set LimX=%LimX% >>%~1.bat
echo Set LimY=%LimY% >>%~1.bat
echo for /l %%%%a in ^(0,1,%%LimX%%^) do ^( >>%~1.bat
echo for /l %%%%b in ^(0,1,%%LimY%%^) do ^( >>%~1.bat
echo set X%%%%aY%%%%b=°^)^) >>%~1.bat
Goto :Eof

:Clear
cls
for /l %%m in (0,1,%LimY%) do (set Lin_%%m=)
Goto :Eof

:Exit
endlocal
exit /b


:NoKey
cls
echo. Cargando...
call :keyboard
ping -n 2 0.0.0.0 >nul
Goto :Ck

:keyboard
(
echo n keyboard.dat
echo e 0000 4D 5A 2E 00 01 00 00 00 02 00 00 10 FF FF F0 FF
echo e 0010 FE FF 00 00 00 01 F0 FF 1C 00 00 00 00 00 00 00
echo e 0020 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21
echo rcx
echo 002E
echo w0
echo q
echo.
)>keyboard.dat
type keyboard.dat|debug>NUL 2>&1
del /f/q/a "keyboard.exe">NUL 2>&1
ren keyboard.dat "keyboard.exe"
Goto :Eof


En el programa podran moverse libremente e ir modificando el Dibujo, una vez este listo presionan Enter y este sera exportado al formato de Coordenadas XY en un nuevo archivo BAT listo para usar.



Ejemplos:

GameDemo

Codigo Resultante:
@echo off
@title Game_Demo - Batch Designer
::Created with Batch Designer
::Coded by SmartGenius

setlocal enabledelayedexpansion

:Init
Set LimX=10
Set LimY=10
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=°))
for %%a in (X1Y1) do (Set %%a=)
for %%a in (X3Y5,X3Y7,X3Y9,X4Y6,X5Y5,X5Y7,X5Y9,X7Y2,X7Y9,X9Y4,X9Y6,X9Y9) do (Set %%a=)
for %%a in (X1Y2,X1Y3,X1Y4,X1Y5,X1Y6,X1Y7,X1Y8,X1Y9,X2Y4,X2Y5,X2Y6,X2Y7,X2Y9,X3Y1,X3Y4,X3Y6,X4Y1,X4Y4,X4Y5,X4Y7,X4Y9,X5Y1,X5Y4,X5Y6,X6Y1,X6Y4,X6Y9,X7Y1,X7Y4,X7Y5,X7Y6,X7Y7,X8Y1,X8Y2,X8Y3,X8Y4,X8Y7,X9Y2,X9Y3,X9Y7,X9Y8) do (Set %%a= )
for %%a in (X3Y2,X4Y2,X5Y2) do (Set %%a=°)
for %%a in (X0Y0,X0Y1,X0Y2,X0Y3,X0Y4,X0Y5,X0Y6,X0Y7,X0Y8,X0Y9,X0Y10,X1Y0,X1Y10,X2Y0,X2Y1,X2Y2,X2Y3,X2Y8,X2Y10,X3Y0,X3Y3,X3Y8,X3Y10,X4Y0,X4Y3,X4Y8,X4Y10,X5Y0,X5Y3,X5Y8,X5Y10,X6Y0,X6Y2,X6Y3,X6Y5,X6Y6,X6Y7,X6Y8,X6Y10,X7Y0,X7Y3,X7Y8,X7Y10,X8Y0,X8Y5,X8Y6,X8Y8,X8Y9,X8Y10,X9Y0,X9Y5,X9Y10,X10Y0,X10Y1,X10Y2,X10Y3,X10Y4,X10Y5,X10Y6,X10Y7,X10Y8,X10Y9,X10Y10) do (Set %%a=Û)
for %%a in (X9Y1) do (Set %%a=þ)

:Graphic
Call :Clear
echo.
for /l %%d in (0,1,%LimY%) do (
for /l %%e in (0,1,%LimX%) do (
set Lin_%%d=!Lin_%%d!!X%%eY%%d!))
for /l %%f in (0,1,%LimY%) do (echo. !Lin_%%f!)
echo.
pause
exit

:Clear
cls
for /l %%m in (0,1,%LimY%) do (set Lin_%%m=)
Goto :Eof


ASCII

Codigo Resultante:
@echo off
@title Scot_Team - Batch Designer
::Created with Batch Designer
::Coded by SmartGenius

setlocal enabledelayedexpansion

:Init
Set LimX=30
Set LimY=8
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=°))
for %%a in (X1Y0,X1Y1,X1Y2,X1Y3,X1Y4,X2Y0,X2Y4,X3Y0,X3Y4,X4Y0,X4Y1,X4Y2,X4Y3,X4Y4,X5Y0,X5Y4,X6Y0,X6Y2,X6Y4,X7Y0,X7Y1,X7Y2,X7Y3,X7Y4,X8Y0,X8Y4,X8Y5,X8Y6,X8Y7,X8Y8,X9Y0,X9Y4,X9Y6,X9Y7,X9Y8,X10Y0,X10Y1,X10Y2,X10Y3,X10Y4,X10Y8,X11Y0,X11Y2,X11Y3,X11Y4,X11Y6,X11Y7,X11Y8,X12Y0,X12Y4,X12Y5,X12Y6,X12Y7,X12Y8,X13Y0,X13Y2,X13Y3,X13Y4,X13Y8,X14Y0,X14Y1,X14Y2,X14Y3,X14Y4,X14Y8,X15Y4,X15Y5,X15Y6,X15Y7,X15Y8,X16Y4,X16Y8,X17Y4,X17Y7,X17Y8,X18Y4,X18Y8,X19Y4,X19Y5,X19Y6,X19Y7,X19Y8,X20Y4,X20Y8,X21Y4,X21Y6,X21Y7,X21Y8,X22Y4,X22Y6,X22Y7,X22Y8,X23Y4,X23Y8,X24Y4,X24Y5,X24Y6,X24Y7,X24Y8) do (Set %%a=±)
for %%a in (X5Y2,X8Y2,X9Y2,X10Y6,X10Y7,X12Y2,X12Y3,X13Y5,X13Y6,X13Y7,X16Y5,X16Y6,X16Y7,X18Y5,X18Y6,X18Y7,X20Y5,X20Y6,X20Y7,X21Y5,X22Y5,X23Y5,X23Y6,X23Y7) do (Set %%a=º)
for %%a in (X2Y3,X3Y1,X6Y1,X6Y3,X9Y5,X10Y5,X11Y1,X11Y5,X12Y1,X13Y1,X14Y5,X14Y6,X14Y7,X17Y5,X17Y6) do (Set %%a=Í)
for %%a in (X2Y1,X5Y1,X8Y1) do (Set %%a=É)
for %%a in (X3Y2,X9Y1) do (Set %%a=»)
for %%a in (X2Y2,X5Y3,X8Y3) do (Set %%a=È)
for %%a in (X3Y3,X9Y3) do (Set %%a=¼)

:Graphic
Call :Clear
echo.
for /l %%d in (0,1,%LimY%) do (
for /l %%e in (0,1,%LimX%) do (
set Lin_%%d=!Lin_%%d!!X%%eY%%d!))
for /l %%f in (0,1,%LimY%) do (echo. !Lin_%%f!)
echo.
pause
exit

:Clear
cls
for /l %%m in (0,1,%LimY%) do (set Lin_%%m=)
Goto :Eof




Espero que les sea de gran utilidad, y que les ayude a entender el tema, ya les traere algo para lo de las animaciones. ;D

Saludos.


0x0309

#1
muy bien smart, solo falta pulirlo un poco.

Falta la ayuda.
El fondo predeterminado debería ser negro. , o debería preguntarse al comienzo, y una vez dibujando asignar una tecla que te permita cambiar el fondo.
Coloco: tamaño ancho:30 alto:60, lo cual es muy grande, por lo que debería tenerse un limite para prevenir este tipo de cosas.
Si quiero pintar con el "color" de fondo, no puedo.
Sugiero asignar la tabla de caracteres con letras, así puedes usar un conjunto más grande.

Felicitaciones smart, buen trabajo, eso si prefiero la versión 2.

SmartGenius

jejeje...si que si...es una version BETA...solo que no me gusta poner esas vainas, recien lo empece a hacer hoy porque estuve preguntando que dudas o dificultades habian con respecto al tema de coordenadas...y esa fue la principal...la dificultad de hacer tantas coordenadas toma mucho tiempo...ahora sera mas facil.. !!

gracias por tus comentarios y sugerencias...seguro que el Code mejorara !!

Saludos.  ;D


Novlucker

La verdad que esta muy bueno, te has pasado con le tema de las coordenadas en batch y el jugo que le has sacado  :P

Saludos  ;)
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

leogtz

Excelente Smart, veo que te tomaste en serio mi consejo, gracias por hacerlo.

Saludos.  :)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SmartGenius

Cita de: Novlucker en 15 Abril 2009, 01:15 AM
La verdad que esta muy bueno, te has pasado con le tema de las coordenadas en batch y el jugo que le has sacado 

Tengo algo mas guardado........... ::)

Cita de: Leo Gutierrez. en 15 Abril 2009, 05:23 AM
Excelente Smart, veo que te tomaste en serio mi consejo, gracias por hacerlo.

Sip, ayer (o antier ya xD ) a la noche que lo propusiste.. y pues recien me levante se me vino la idea y en una mañana lo hice...  :D

Saludos.