comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Graficos y Coordenadas en Batch - by SmartGenius

  • 1 Respuestas
  • 2553 Vistas

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

Desconectado Stiuvert

  • *
  • Colaborador
  • *
  • Mensajes: 2668
  • Actividad:
    1.67%
  • Reputación 14
    • Ver Perfil
  • Skype: stiuvert@gmail.com
  • Twitter: @Stiuvert
« en: Abril 25, 2011, 06:06:57 pm »
Para este tema tomaremos como base la explicacion del Plano Cartesiano y el significado de Coordenadas:

No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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

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 !!!...

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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.

Fuente: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado exploit-shell

  • *
  • Underc0der
  • Mensajes: 32
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • c-intrud3rs
« Respuesta #1 en: Mayo 23, 2011, 11:32:17 pm »
exelente men te felicito gracias :) a estudiar y hacer programitas

 

¿Te gustó el post? COMPARTILO!



""MSN"" en batch

Iniciado por Elle Lawliet

Respuestas: 6
Vistas: 2398
Último mensaje Julio 18, 2011, 01:35:47 am
por JaAViEr
Detecta Autorun.Inf + Eliminación de Archivo Infectado - JaAViEr - Batch

Iniciado por JaAViEr

Respuestas: 4
Vistas: 2161
Último mensaje Julio 18, 2011, 06:36:47 pm
por LucaSthefano
[Código-Batch] Consola de Comandos Versión Arcoiris - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1485
Último mensaje Julio 17, 2011, 05:29:39 am
por JaAViEr
[Código-Batch] Usuarios del PC & Procesos Ejecución - WMIC - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1227
Último mensaje Julio 17, 2011, 05:21:18 am
por JaAViEr
[Código-Batch] Saber si un número es entero - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1206
Último mensaje Julio 17, 2011, 05:19:17 am
por JaAViEr