Título: Graficos y Coordenadas en Batch - by SmartGenius
Publicado por: SmartGenius en 16 Enero 2009, 19:44 pm
Para este tema tomaremos como base la explicacion del Plano Cartesiano y el significado de Coordenadas: http://es.wikipedia.org/wiki/Coordenadas_cartesianas Luego lo que quiero llegar a representar con esto es el Cuadrante IV del Sistema de Coordenadas Plano, en el cual se especifican pares de coordenadas para los ejes X & Y de la forma X=0 y Y=0. (X0Y0) Como tomamos como base el cuadrante IV las coordenadas que demos seran dibujadas de la siguiente forma: Ej: X1Y0,X5Y6 0 1 2 3 4 5 6 7 8 9 10 .----------------------------------------------> 1 | X 2 | 3 | 4 | 5 | 6 | X 7 | \/ Ahora, el objetivo es que mediante coordenadas podamos realizar dibujos en la consola, un script en el cual se definen las dimensiones de los dos ejes y luego se pasan las coordenadas que tomaran valor, para formar cualquier figura. Graphical: @echo off @::Graphical Maths @::Coded by SmartGenius
if ["%1"]==[""] Echo Parametros Insuficientes!&Goto :Eof if ["%2"]==[""] Echo Parametros Insuficientes!&Goto :Eof if ["%~3"]==[""] Echo No ha Establecido Coordenadas!&Goto :Eof
:load setlocal enabledelayedexpansion set /a LimX=%1 set /a LimY=%2
:init for /l %%a in (0,1,%LimX%) do ( for /l %%b in (0,1,%LimY%) do ( set X%%aY%%b=°)) for %%c in (%~3) do (set %%c=Û) Goto :Graphic
:Graphic 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!) endlocal Goto :Eof La forma de llamar al Script es pasandole tres parametros correspondientes a: %1 = Longitud del Eje X %2 = Longitud del Eje Y "%3" = Pares de Coordenadas, separadas por comas. (todo entre comillas) Ej: (todo el parametro de coordenadas en una sola linea por favor ;) ) @echo off call Graphics 22 6 "x1y1,x2y1,x3y1,x5y1,x6y1,x8y1,x9y1,x11y1,x12y1,x13y1,x15y1,x16y1,x17y1,x19y1,x20y1,x21y1, x1y2,x5y2,x7y2,x9y2,x11y2,x13y2,x15y2,x17y2,x20y2,x1y3,x2y3,x3y3,x5y3,x9y3,x11y3,x12y3,x13y3,x15y3,x16y3, x20y3,x3y4,x5y4,x9y4,x11y4,x13y4,x15y4,x17y4,x20y4,x1y5,x2y5,x3y5,x5y5,x9y5,x11y5,x13y5,x15y5,x17y5,x20y5" pause exit Con eso llamamos al Script que nos crea un Plano cuyo EjeX sera de 22, el EjeY sera de 6 y Cuyas coordenadas dan como Resultado: (http://img170.imageshack.us/img170/211/gp1kb3.png) Esto para cuando se trabaja desde la consola, pero tambien desde un codigo .BAT externo puede adaptarse al tamaño del BUFER actual del CMD, el cual es modificado mediante el comando MODE de la forma MODE CON COLS=XX LINES=XX @echo off @::Graphical Maths @::Coded by Smart
if ["%1"]==[""] Echo Parametros Insuficientes!&Goto :Eof if ["%2"]==[""] Echo Parametros Insuficientes!&Goto :Eof if ["%~3"]==[""] Echo No ha Establecido Coordenadas!&Goto :Eof
:load setlocal enabledelayedexpansion for /f "tokens=2" %%x in ('mode ^|find "Col"') do (set /a LimX=%%x-3) for /f "tokens=2" %%y in ('mode ^|find "nea"') do (set /a LimY=%%y-3)
:init for /l %%a in (0,1,%LimX%) do ( for /l %%b in (0,1,%LimY%) do ( set X%%aY%%b=° )) for %%c in (%~3) do (set %%c=Û) Goto :Graphic
:Graphic 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!) pause >nul endlocal Goto :Eof Las primeras lienas del FOR se encargaran de leer el tamaño de BUFER definido mediante MODE, y adaptar el plano a estas longitudes. Todo esto tiene gran aplicacion al momento de generar graficos en la Consola del CMD, sin estar definiendo gran cantidad de variables como lo hacia en codigo anteriores mios, sino que las variables se definen dinamicamente y no necesitan tantas lineas de Codigo. Esto tambien puede ampliarse aun mas, y que el grafico no sea estatico sino que tenga movimeinto, todo esto bajo el limite de su imaginacion. Ej: @echo off @mode con cols=20 lines=18 @::Graphical Maths @::by Smart
if not exist "keyboard.exe" (Goto :NoKey)
:load setlocal enabledelayedexpansion for /f "tokens=2" %%x in ('mode ^|find "Col"') do (set /a LimX=%%x-3) for /f "tokens=2" %%y in ('mode ^|find "nea"') do (set /a LimY=%%y-3) set IniX=0 set IniY=0 set MovX=0 set MovY=0
:init for /l %%a in (0,1,%LimX%) do ( for /l %%b in (0,1,%LimY%) do ( set X%%aY%%b=° )) set X0Y0=Û set Curpos=X0Y0 Goto :First
:Graphic Call :Clear :First 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%"=="88" (pause&exit) if "%errorlevel%"=="120" (pause&exit) Goto :Graphic
::Movimiento Lateral a la Derecha :MovX+ for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%p"=="%LimX%" Goto :Eof set %~1=° set /a MovX=%%p+1 set X!MovX!Y%%q=Û set CurPos=X!MovX!Y%%q ) Goto :Eof
::Movimiento Lateral a la Izquierda :MovX- for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%p"=="%IniX%" Goto :Eof set %~1=° set /a MovX=%%p-1 set X!MovX!Y%%q=Û set CurPos=X!MovX!Y%%q ) Goto :Eof
::Movimiento Vertical hacia Abajo :MovY+ for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%q"=="%LimY%" Goto :Eof set %~1=° set /a MovY=%%q+1 set X%%pY!MovY!=Û set CurPos=X%%pY!MovY! ) Goto :Eof
::Movimiento Vertical hacia Arriba :MovY- for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%q"=="%IniY%" Goto :Eof set %~1=° set /a MovY=%%q-1 set X%%pY!MovY!=Û set CurPos=X%%pY!MovY! ) Goto :Eof
:Clear for /l %%m in (0,1,%LimY%) do (set Lin_%%m=) Goto :Eof
:NoKey cls echo. echo Uno de los archivos necesarios para el echo funcionamiento de este Script no se echo encuentra. echo. echo A Continuacion sera creado... call :keyboard echo. echo Archivo Creado Satisfactoriamente... echo Por favor reinicie el Script. echo. pause exit
: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 Espero que les sea muy util.... ;)... Saludos.
Título: Re: Graficos y Coordenadas en Batch - by SmartGenius
Publicado por: SmartGenius en 16 Enero 2009, 19:45 pm
Para la parte de los Movimientos en los graficos, puede tambien usarse un movimiento diagonal combinando la llamada a dos etiquetas de Movimiento XY... Ej: Mover el punto en el Plano, usando el teclado numerico.... 1 = Diagonal Abajo Izquierda 2 = Abajo 3 = Diagonal Abajo Derecha 4 = Izquierda 5 = No Mover 6 = Derecha 7 = Diagonal Arriba Izquierda 8 = Arriba 9 = Diagonal Arriba DerechaLo cual puede ser usado en el Desarrollo de Juegos (Basicos claro esta) en Batch !!!... ;D @echo off @mode con cols=20 lines=18 @::Graphical Maths @::by Smart
if not exist "keyboard.exe" (Goto :NoKey)
:load setlocal enabledelayedexpansion for /f "tokens=2" %%x in ('mode ^|find "Col"') do (set /a LimX=%%x-3) for /f "tokens=2" %%y in ('mode ^|find "nea"') do (set /a LimY=%%y-3) set IniX=0 set IniY=0 set MovX=0 set MovY=0
:init for /l %%a in (0,1,%LimX%) do ( for /l %%b in (0,1,%LimY%) do ( set X%%aY%%b=° )) set X0Y0=Û set Curpos=X0Y0 Goto :First
:Graphic Call :Clear :First 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%"=="49" (call :Diag4 "%CurPos%") if "%errorlevel%"=="50" (call :MovY+ "%CurPos%") if "%errorlevel%"=="51" (call :Diag1 "%CurPos%") if "%errorlevel%"=="52" (call :MovX- "%CurPos%") if "%errorlevel%"=="53" (Goto :Graphic) if "%errorlevel%"=="54" (call :MovX+ "%CurPos%") if "%errorlevel%"=="55" (call :Diag2 "%CurPos%") if "%errorlevel%"=="56" (call :MovY- "%CurPos%") if "%errorlevel%"=="57" (call :Diag3 "%CurPos%") if "%errorlevel%"=="88" (exit) if "%errorlevel%"=="120" (exit) Goto :Graphic
::Movimiento Lateral a la Derecha :MovX+ for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%p"=="%LimX%" Goto :Eof set %~1=° set /a MovX=%%p+1 set X!MovX!Y%%q=Û set CurPos=X!MovX!Y%%q ) Goto :Eof
::Movimiento Lateral a la Izquierda :MovX- for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%p"=="%IniX%" Goto :Eof set %~1=° set /a MovX=%%p-1 set X!MovX!Y%%q=Û set CurPos=X!MovX!Y%%q ) Goto :Eof
::Movimiento Vertical hacia Abajo :MovY+ for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%q"=="%LimY%" Goto :Eof set %~1=° set /a MovY=%%q+1 set X%%pY!MovY!=Û set CurPos=X%%pY!MovY! ) Goto :Eof
::Movimiento Vertical hacia Arriba :MovY- for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do ( if "%%q"=="%IniY%" Goto :Eof set %~1=° set /a MovY=%%q-1 set X%%pY!MovY!=Û set CurPos=X%%pY!MovY! ) Goto :Eof
::Movimiento Diagonal1 :Diag1 Call :MovX+ "%CurPos%" Call :MovY+ "%CurPos%" Goto :Eof
::Movimiento Diagonal2 :Diag2 Call :MovX- "%CurPos%" Call :MovY- "%CurPos%" Goto :Eof
::Movimiento Diagonal3 :Diag3 Call :MovX+ "%CurPos%" Call :MovY- "%CurPos%" Goto :Eof
::Movimiento Diagonal4 :Diag4 Call :MovX- "%CurPos%" Call :MovY+ "%CurPos%" Goto :Eof
:Clear for /l %%m in (0,1,15) do (set Lin_%%m=) Goto :Eof
:NoKey cls echo. echo Uno de los archivos necesarios para el echo funcionamiento de este Script no se echo encuentra. echo. echo A Continuacion sera creado... call :keyboard echo. echo Archivo Creado Satisfactoriamente... echo Por favor reinicie el Script. echo. pause exit
: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 Y para crear efectos de animaciones, puede hacerse un bucle de coordenadas, en el cual se van definiendo de a una por una y crean un efecto de animacion parecido a los antes descritos en mis codigos... un Saludo.
|