elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Graficos y Coordenadas en Batch - by SmartGenius
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Graficos y Coordenadas en Batch - by SmartGenius  (Leído 5,564 veces)
SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Graficos y Coordenadas en Batch - by 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:
Código:
 @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 ;) )
Código:
 @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:


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

Código:
 @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:
Código:
 @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.


En línea


SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Graficos y Coordenadas en Batch - by SmartGenius
« Respuesta #1 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 Derecha


Lo cual puede ser usado en el Desarrollo de Juegos (Basicos claro esta) en Batch !!!... ;D

Código:
 @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.


« Última modificación: 16 Enero 2009, 20:04 pm por :: SmartGenius :: » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] [APORTE] MouseXY (Devuelve las coordenadas del mouse)
Scripting
Eleкtro 7 8,751 Último mensaje 21 Abril 2012, 16:04 pm
por ELVJop
Error al coger coordenadas del ratón con FreeGlut
Programación C/C++
kaostias 4 3,159 Último mensaje 30 Octubre 2013, 20:40 pm
por kaostias
[BATCH] ¿Cómo ubicar la ventana en coordenadas específicas?
Scripting
cyberalejo17 4 10,872 Último mensaje 27 Abril 2014, 05:08 am
por cyberalejo17
[Ayuda] Como puedo ordenar los elementos gráficos por coordenadas en Python
Scripting
Proxmond 3 4,352 Último mensaje 16 Junio 2014, 16:48 pm
por daryo
Coordenadas UTM
Foro Libre
Meta 8 5,500 Último mensaje 30 Abril 2015, 13:34 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines