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



Tema destacado: Tutorial bsico de Quickjs


  Mostrar Temas
Páginas: 1 [2] 3 4 5
11  Programacin / Scripting / [Batch Game] BattleShips v 1 - by :: SmartGenius :: en: 31 Marzo 2009, 18:10 pm
Sip, aqui de nuevo yo...con otro juego Batch  :xD

BattleShips v 1


Descarga:http://one.xthost.info/smartv2/BatchGames/BattleShips_bySmartGenius.zip

Creo que el juego no necesita explicacion porque la gran mayoria conocera la mecanica del mismo, ir descubriendo la posicion del enemigo antes de que descubarn la tuya.

Los movimientos se realizan con las flechas de direccion y se confirma una coordenada con la tecla Enter.

Código:
@echo off
@title BattleShip
@::Another Batch Game
@::Coded by ::SmartGenius::
setlocal enabledelayedexpansion

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

Call :Logo

:Menu
@cls
@::BattleShip v 1
@mode con cols=21 lines=20
set colors=a123b567c9
echo.
echo. BattleShips v 1
echo.
echo. Ŀ Ŀ
echo. 1. Jugar
echo.
echo. Ŀ Ŀ
echo. 2. Salir
echo.
keyboard
if "%errorlevel%"=="49" (Goto :InGame)
if "%errorlevel%"=="50" (msg * BattleShip v 1 by SmartGenius&exit)
if "%errorlevel%"=="32" (color 0!colors:~%random:~-1%,1!)
Goto :Menu

:InGame
Call :Clear
Call :Load1
cls
echo.
echo. Barcos en Posicion
echo. Cargando Juego...
ping -n 3 0.0.0.0 >nul
Call :Load2
Goto :Menu

::Tablero posicionador
:Load1
set LimX=6
set LimY=6
set IniX=0
set IniY=0
set MovX=0
set MovY=0
set Ships=5
set Water=
set Blank=X

:init1
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=
))
set X0Y0=
set Last=
set Curpos=X0Y0
Goto :First

:Gp1
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.
echo. Posiciona tus
echo. Barcos...
echo.
echo.   Ŀ
for /l %%f in (0,1,%LimY%) do (
echo.   !Lin_%%f!
echo.   Ĵ)
echo.   
if "%Ships%"=="0" Goto :Eof
keyboard
if "%errorlevel%"=="77" (call :MovAX+ "%CurPos%")
if "%errorlevel%"=="75" (call :MovAX- "%CurPos%")
if "%errorlevel%"=="80" (call :MovAY+ "%CurPos%")
if "%errorlevel%"=="72" (call :MovAY- "%CurPos%")
if "%errorlevel%"=="13" (call :PosShip "%CurPos%")
if "%errorlevel%"=="88" (Goto :Menu)
if "%errorlevel%"=="120" (Goto :Menu)
Goto :Gp1
::Fin Tablero Posicionador

::Tablero de Batalla
:Load2
@mode con cols=42 lines=20
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set MX%%aY%%b=
))
Call :GenPC

:init2
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set PX%%aY%%b=!X%%aY%%b!
set X%%aY%%b=))
set Player=5
set X0Y0=
set Last=
set Curpos=X0Y0
Goto :Gp2

:Gp2
title BattleShip v 1 by SmartGenius
Call :Clear
:Second
for /l %%d in (0,1,%LimY%) do (
for /l %%e in (0,1,%LimX%) do (
set Lin_%%d=!Lin_%%d!!PX%%eY%%d!
set Lin2_%%d=!Lin2_%%d!!X%%eY%%d!))
echo.
echo.    Jugador: %Player%            PC: %PC%
echo.     A B C D E F G       A B C D E F G
echo.    Ŀ :   Ŀ
for /l %%f in (0,1,%LimY%) do (
echo. %%f  !Lin_%%f! : %%f !Lin2_%%f!
echo.    Ĵ :   Ĵ)
echo.    :   
if "%PC%"=="0" Goto :Win
if "%Player%"=="0" Goto :Lose
keyboard
if "%errorlevel%"=="77" (call :MovAX+ "%CurPos%")
if "%errorlevel%"=="75" (call :MovAX- "%CurPos%")
if "%errorlevel%"=="80" (call :MovAY+ "%CurPos%")
if "%errorlevel%"=="72" (call :MovAY- "%CurPos%")
if "%errorlevel%"=="13" (
call :Player "%CurPos%"
Call :MovPC
)
if "%errorlevel%"=="88" (Goto :Menu)
if "%errorlevel%"=="120" (Goto :Menu)
Goto :Gp2
::Fin Tablero de Batalla

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

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

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

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

:GenPC
set PC=5
set R1=%random:~-1%
set R2=%random:~-1%
if not "%R1%" GTR "%LimX%" (
if not "%R2%" GTR "%LimY%" (
set MX%R1%Y%R2%=
set /a var+=1
))
if "%var%"=="%PC%" Goto :Eof
Goto :GenPC

:MovPC
set R1=%random:~-1%
set R2=%random:~-1%
if not "%R1%" GTR "%LimX%" (
if not "%R2%" GTR "%LimY%" (
call set Tar=!PX%R1%Y%R2%!
if "!Tar!"=="X" (
Goto :MovPC
)
if "!Tar!"=="" (
Goto :MovPC
)
if "!Tar!"=="" (
set PX%R1%Y%R2%=
set /a Player-=1
Goto :Eof
) else (
set PX%R1%Y%R2%=X
Goto :Eof
)
))
Goto :MovPC

:PosShip
if not "%Last%"=="" (
set %~1=
set /a Ships-=1)
Goto :Eof

:Player
if defined M%~1 (
set %~1=
set /a PC-=1
Goto :Eof
)
set %~1=%Blank%
Goto :Eof

:Lose
msg * Perdiste !
ping -n 3 0.0.0.0 >nul
Goto :Menu

:Win
msg * Ganaste !
ping -n 3 0.0.0.0 >nul
Goto :Menu

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

:Logo
@mode con cols=40 lines=15
@title BattleShips v 1 by SmartGenius
echo.
echo.                 _==^|
echo.   Battle   _==^|   )__)  ^|  Ships
echo.              )_)  )___) ))
echo.             )___) )____))_)
echo.        _    )____)_____))__)\
echo.         \---__^|____/^|___^|___-\\---
echo. ~~~~~~~~~\   oo oo oo oo     /~~~~~~~~
echo.   ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
echo.     ~~~~      ~~~~     ~~~~ ~~ ~~
echo.          ~~~~~        ~~~~~
echo.
echo.         SmartGenius, Corp. 2009
pause >nul
ping -n 3 0.0.0.0 >nul
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
ping -n 2 0.0.0.0 >nul
Goto :Menu

: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 sea de su agrado..cualquier duda o comentario por favor hacerlo... !!

Saludos.  =D
12  Programacin / Scripting / [Batch Game] PushBox v 2 Reloaded - by :: SmartGenius :: en: 27 Marzo 2009, 04:24 am
PushBox v 2 Reloaded - by SmartGenius

Segunda version de mi popular juego PushBox, hecho en batch !


Link: http://one.xthost.info/smartv2/BatchGames/PushBoxReloaded_bySmartGenius.zip

Cuenta con mejoras a la interfaz, mejora de la interactividad con el usuario y correcion de algunos errores previos...


Controles:

Arriba:     Flecha Arriba
Abajo:     Flecha Abajo
Derecha:  Flecha Derecha
Izquierda: Flecha Izquierda
Guardar:   Tecla "S"
Volver al Menu:        Tecla "X"



Entre las nuevas funcionalidades esta la de poder guardar el progreso
tan solo con presionar la teclas "S" , lo que devolvera al menu.

Cada "Perfil" de Nick puede guardar sus propios records y progresos,
cuando inicie el juego se le preguntara por su nick, lo que le permitira
usar la opcion de escoger nivel y seguir donde ibas...xD

Tambien en el menu principal pueden presionar la barra espaciadora
y cambiara el color de la interfaz, para los que no les gusta el que
viene por defecto !

El Juego cuenta con 5 Nuevos Niveles, y la posibilidad de jugar
los niveles de la version anterior, solo ejecuten el archivo de
levels y se hara el cambio automaticamente...

Codigo Principal (PushBox2.bat)
Código:
@echo off
@title PushBox v 2
@mode con cols=22 lines=20
@::PushBox Reloaded
@::Another Batch Game
@::Coded by SmartGenius
setlocal enabledelayedexpansion

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

:load
call :Logo
call :Player
call Levels NUM

:Menu
if not defined L set L=0
set EOG=False
set colors=a123b567c9
cls
echo. ͻ
echo. PushBox Reloaded
echo. ͼ
echo.
echo. Nick: %nick%
echo.
echo. Opciopnes ^>^>
echo.
echo.
echo. 1. Jugar PushBox
echo.
echo. 2. Escoger Nivel
echo.
echo. 3. Cambiar Nick 
echo.
echo. 4. Salir         
echo.
echo.
keyboard
if "%errorlevel%"=="49" (Goto :Load)
if "%errorlevel%"=="50" (Goto :Choose)
if "%errorlevel%"=="51" (call :Player)
if "%errorlevel%"=="52" (Goto :End)
if "%errorlevel%"=="32" (color 0!colors:~%random:~-1%,1!)
if "%errorlevel%"=="167" (Call :Console)
Goto :Menu

:Choose
call :CheckML >nul
cls
echo.
echo. Nivel a Jugar ?
echo. De 1 a %MaxLevel%
echo.
set /p lev=">> "
if not defined lev (set lev=1)
if %lev% GTR %MaxLevel% (
echo.
echo. No trates de hacer
echo. Cheat, aun no has
echo. llegado a ese Nivel.
echo.
ping -n 3 0.0.0.0 >nul
Goto :Menu
)
set /a L=%lev%-1

:Load
set LimX=13
set LimY=11

:init
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=))
set Player=
set Bound=
set Box=*
set Push=o

:Levels
if not defined L set L=0
set /a L=%L%+1
Call Levels Level%L%
Call :Graphic
set P%L%=%Movs%
if "%EOG%"=="True" Goto :Menu
echo.%L%>"Records_%nick%.txt:MaxLevel.ini"
if "%L%"=="%NLevels%" Goto :Win
ping -n 1 0.0.0.0 >nul
Goto :Init

:Graphic
Call :Clear
:First
cls
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.
echo. PushBox v2 by Smart
echo.
echo.  Player:%nick%
echo.  Nivel:%L%   Movs:%Movs%
echo.   ͻ
for /l %%f in (0,1,%LimY%) do (echo.   !Lin_%%f!)
echo.   ͼ
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" (set EOG=True&Goto :Eof)
if "%errorlevel%"=="120" (set EOG=True&Goto :Eof)
if "%errorlevel%"=="83" (Goto :Save)
if "%errorlevel%"=="115" (Goto :Save)
if "%errorlevel%"=="76" (Goto :Eof)
if "%errorlevel%"=="108" (Goto :Eof)
Call Levels Check%L%
if "%NXL%"=="True" (Goto :Eof)
Goto :Graphic

::Logica de Movimiento en el Plano
::Coded by :: SmartGenius ::

:MovX+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p+1
set /a MovXX=%%p+2
call set NMovX=%%X!MovX!Y%%q%%
call set NMovXX=%%X!MovXX!Y%%q%%
if "!NMovX!"=="%Bound%" (Goto :Eof)
if "!NMovX!"=="%Push%" (
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set CurPos=X!MovX!Y%%q)
if "!NMovX!"==" " (
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set CurPos=X!MovX!Y%%q)
if "!NMovX!"=="%Box%" (
if "!NMovXX!"=="%Bound%" (Goto :Eof)
if "!NMovXX!"=="%Box%" (Goto :Eof)
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set X!MovXX!Y%%q=%Box%
set CurPos=X!MovX!Y%%q))
set /a Movs+=1
for %%u in (%Pushes%) do (if "!%%u!"==" " (set %%u=%Push%))
Goto :Eof

:MovX-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p-1
set /a MovXX=%%p-2
call set NMovX=%%X!MovX!Y%%q%%
call set NMovXX=%%X!MovXX!Y%%q%%
if "!NMovX!"=="%Bound%" (Goto :Eof)
if "!NMovX!"=="%Push%" (
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set CurPos=X!MovX!Y%%q)
if "!NMovX!"==" " (
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set CurPos=X!MovX!Y%%q)
if "!NMovX!"=="%Box%" (
if "!NMovXX!"=="%Bound%" (Goto :Eof)
if "!NMovXX!"=="%Box%" (Goto :Eof)
if !%~1!==%Player% set %~1=
set X!MovX!Y%%q=%Player%
set X!MovXX!Y%%q=%Box%
set CurPos=X!MovX!Y%%q))
set /a Movs+=1
for %%u in (%Pushes%) do (if "!%%u!"==" " (set %%u=%Push%))
Goto :Eof

:MovY+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovY=%%q+1
set /a MovYY=%%q+2
call set NMovY=%%X%%pY!MovY!%%
call set NMovYY=%%X%%pY!MovYY!%%
if "!NMovY!"=="%Bound%" (Goto :Eof)
if "!NMovY!"=="%Push%" (
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set CurPos=X%%pY!MovY!)
if "!NMovY!"==" " (
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set CurPos=X%%pY!MovY!)
if "!NMovY!"=="%Box%" (
if "!NMovYY!"=="%Bound%" (Goto :Eof)
if "!NMovYY!"=="%Box%" (Goto :Eof)
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set X%%pY!MovYY!=%Box%
set CurPos=X%%pY!MovY!))
set /a Movs+=1
for %%u in (%Pushes%) do (if "!%%u!"==" " (set %%u=%Push%))
Goto :Eof

:MovY-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovY=%%q-1
set /a MovYY=%%q-2
call set NMovY=%%X%%pY!MovY!%%
call set NMovYY=%%X%%pY!MovYY!%%
if "!NMovY!"=="%Bound%" (Goto :Eof)
if "!NMovY!"=="%Push%" (
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set CurPos=X%%pY!MovY!)
if "!NMovY!"==" " (
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set CurPos=X%%pY!MovY!)
if "!NMovY!"=="%Box%" (
if "!NMovYY!"=="%Bound%" (Goto :Eof)
if "!NMovYY!"=="%Box%" (Goto :Eof)
if !%~1!==%Player% set %~1=
set X%%pY!MovY!=%Player%
set X%%pY!MovYY!=%Box%
set CurPos=X%%pY!MovY!))
set /a Movs+=1
for %%u in (%Pushes%) do (if "!%%u!"==" " (set %%u=%Push%))
Goto :Eof

:Save
cls
if not exist Records_%nick%.txt (
echo. Records PushBox 2 >>Records_%nick%.txt
echo. Jugador: %nick% >>Records_%nick%.txt)
for /l %%v in (1,1,%NLevels%) do (
if defined P%%v (
echo  Nivel: %%v Movs: !P%%v! >>Records_%nick%.txt))
echo.%L%>"Records_%nick%.txt:MaxLevel.ini"
echo.
echo.   PushBox v 2
echo.
echo.  Juego Guardado
echo.
ping -n 2 0.0.0.0 >nul
Goto :Menu

:Console
cls
echo.
echo. Console
echo.
echo. Enter Number...
set /p tar=">> "
if not defined tar Goto :Eof
set /a L=(%tar%^>^>5)-1
Goto :Eof

:CheckML
for /f "tokens=*" %%a in (Records_%nick%.txt:Maxlevel.ini) do (
if "%%a"=="" (
set MaxLevel=1
) else (
set MaxLevel=%%a
))
if not defined MaxLevel set MaxLevel=1
Goto :Eof

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

:Win
cls
echo.
echo. Felicitaciones !
echo. %nick%
echo.
echo. Has Superado todos
echo. los niveles del
echo. Juego.
if not exist Records_%nick.txt% (
echo. Records PushBox 2 >>Records_%nick%.txt
echo. Jugador: %nick% >>Records_%nick%.txt)
for /l %%v in (1,1,%NLevels%) do (
if defined P%%v (
echo  Nivel: %%v Movs: !P%%v! >>Records_%nick%.txt))
ping -n 4 0.0.0.0 >nul

:End
msg * Gracias por Jugar PushBox v 2 by :: SmartGenius::
endlocal
exit

:Player
cls
echo.
echo. Nickname ?
set /p nick=">> "
if not defined nick set nick=User
Goto :Eof


:Logo
cls
echo.
echo.
echo. ۰۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰۰
echo. ۰۰۰۰۰
echo.
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰۰۰۰
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰
echo.
echo. : SmartGenius :
echo.   Corp.  2009 
echo.
echo.
ping -n 3 0.0.0.0 >nul
::Dedicated to the CUH,
::Code-Makers, Latinohack
::Members....by SmartGenius
Goto :Eof

:NoKey
@mode con cols=30 lines=20
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. Archivo Creado Satisfactoriamente
echo.
pause
Goto :Menu

: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
echo. 1
pause
del /f/q/a "keyboard.exe">NUL 2>&1
echo. 2
pause
ren keyboard.dat "keyboard.exe"
echo. 3
pause
Goto :Eof

Nuevos Niveles (Levels.bat)
Código:
@echo off
::Niveles del Juego PushBox v 2 Reloaded
::Coordenadas Cartesianas
::Coded by :: SmartGenius ::

if ["%1"]==[""] (
if exist "Levels.bat" (
if not "%~nx0"=="Levels.bat" (
Ren "Levels.bat" "%random:~-1%_Back_Levels.bat"
Ren %0 Levels.bat
echo. Niveles Intercambiados
pause
exit
)))

Call :%1
Goto :Eof

:NUM
Set NLevels=5
Goto :Eof

::Inicio Nivel 1
:Level1
set Movs=0
set X6Y5=%Player%
set CurPos=X6Y5
set Pushes=X5Y2,X3Y5,X8Y4,X6Y7
for %%g in (%Pushes%) do (set %%g=%Push%)
for %%h in (X5Y4,X5Y5,X7Y4,X6Y6) do (set %%h=%Box%)
for %%i in (X4Y1,X5Y1,X6Y1,X4Y2,X6Y2,X4Y3,X6Y3,X7Y3,X8Y3,X9Y3,X2Y4,X3Y4,X4Y4,X9Y4,X2Y5) do (set %%i=%Bound%)
for %%j in (X7Y5,X8Y5,X9Y5,X2Y6,X3Y6,X4Y6,X5Y6,X7Y6,X5Y7,X7Y7,X5Y8,X6Y8,X7Y8) do (set %%j=%Bound%)
for %%l in (X5Y3,X6Y4,X4Y5) do (set %%l= )
Goto :Eof

:Check1
set NXL=False
if "!X5Y2!"=="%Box%" (
if "!X3Y5!"=="%Box%" (
if "!X8Y4!"=="%Box%" (
if "!X6Y7!"=="%Box%" set NXL=True)))
Goto :Eof
::Fin Nivel 1

::Inicio Nivel 2
:Level2
set Movs=0
set X2Y2=%Player%
set CurPos=X2Y2
set Pushes=X8Y4,X8Y5,X8Y6
for %%g in (%Pushes%) do (set %%g=%Push%)
for %%h in (X3Y3,X4Y3,X3Y4) do (set %%h=%Box%)
for %%i in (X1Y1,X2Y1,X3Y1,X4Y1,X5Y1,X1Y2,X5Y2,X1Y3,X5Y3,X7Y3,X8Y3,X9Y3,X1Y4,X5Y4,X7Y4,X9Y4) do (set %%i=%Bound%)
for %%j in (X1Y5,X2Y5,X3Y5,X5Y5,X6Y5,X7Y5,X9Y5,X2Y6,X3Y6,X9Y6,X2Y7,X6Y7,X9Y7,X2Y8,X6Y8,X7Y8) do (set %%j=%Bound%)
for %%k in (X8Y8,X9Y8,X2Y9,X3Y9,X4Y9,X5Y9,X6Y9) do (set %%k=%Bound%)
for %%l in (X3Y2,X4Y2,X2Y3,X2Y4,X4Y4,X4Y5,X4Y6,X5Y6,X7Y6,X3Y7) do (set %%l= )
for %%m in (X4Y7,X5Y7,X7Y7,X8Y7,X3Y8,X4Y8,X5Y8,X6Y6) do (set %%m= )
Goto :Eof

:Check2
set NXL=False
if "!X8Y4!"=="%Box%" (
if "!X8Y5!"=="%Box%" (
if "!X8Y6!"=="%Box%" set NXL=True))
Goto :Eof
::Fin Nivel 2

::Inicio Nivel 3
:Level3
set Movs=0
set X3Y3=%Player%
set CurPos=X3Y3
set Pushes=X3Y6,X3Y7,X4Y7,X5Y7,X6Y7
for %%g in (%Pushes%) do (set %%g=%Push%)
for %%h in (X4Y3,X4Y4,X5Y5,X4Y6,X5Y7) do (set %%h=%Box%)
for %%i in (X3Y1,X4Y1,X5Y1,X6Y1,X2Y2,X3Y2,X6Y2,X2Y3,X6Y3,X2Y4,X3Y4,X6Y4,X7Y4,X2Y5,X3Y5,X7Y5) do (set %%i=%Bound%)
for %%j in (X2Y6,X7Y6,X2Y7,X7Y7,X2Y8,X3Y8,X4Y8,X5Y8,X6Y8,X7Y8) do (set %%j=%Bound%)
for %%l in (X4Y2,X5Y2,X5Y3,X5Y4,X4Y5,X6Y5,X5Y6,X6Y6) do (set %%l= )
Goto :Eof

:Check3
set NXL=False
if "!X3Y6!"=="%Box%" (
if "!X3Y7!"=="%Box%" (
if "!X4Y7!"=="%Box%" (
if "!X5Y7!"=="%Box%" (
if "!X6Y7!"=="%Box%" set NXL=True))))
Goto :Eof
::Fin Nivel 3

::Inicio Nivel 4
:Level4
set Movs=0
set X10Y8=%Player%
set CurPos=X10Y8
set Pushes=X4Y2,X8Y4,X5Y5,X2Y6,X6Y8
for %%g in (%Pushes%) do (set %%g=%Push%)
for %%h in (X4Y4,X6Y4,X5Y5,X4Y6,X6Y6) do (set %%h=%Box%)
for %%i in (X3Y0,X4Y0,X5Y0,X6Y0,X7Y0,X8Y0,X9Y0,X0Y1,X1Y1,X2Y1,X3Y1,X9Y1,X0Y2,X5Y2,X6Y2,X7Y2) do (set %%i=%Bound%)
for %%j in (X9Y2,X0Y3,X2Y3,X4Y3,X9Y3,X10Y3,X0Y4,X2Y4,X7Y4,X10Y4,X0Y5,X2Y5,X8Y5,X10Y5,X0Y6,X3Y6) do (set %%j=%Bound%)
for %%k in (X8Y6,X10Y6,X0Y7,X1Y7,X6Y7,X8Y7,X10Y7,X11Y7,X12Y7,X1Y8,X3Y8,X4Y8,X5Y8,X12Y8,X1Y9,X7Y9) do (set %%k=%Bound%)
for %%l in (X8Y9,X12Y9,X1Y10,X2Y10,X3Y10,X4Y10,X5Y10,X6Y10,X7Y10,X8Y10,X9Y10,X10Y10,X11Y10,X12Y10) do (set %%l=%Bound%)
for %%m in (X4Y1,X5Y1,X6Y1,X7Y1,X8Y1,X1Y2,X2Y2,X3Y2,X8Y2,X1Y3,X3Y3,X5Y3,X6Y3,X7Y3,X8Y3,X1Y4,X3Y4,X5Y4) do (set %%m= )
for %%n in (X9Y4,X1Y5,X3Y5,X4Y5,X6Y5,X7Y5,X9Y5,X1Y6,X5Y6,X7Y6,X9Y6,X2Y7,X3Y7,X4Y7,X5Y7,X7Y7,X9Y7,X2Y8) do (set %%n= )
for %%o in (X7Y8,X8Y8,X9Y8,X11Y8,X2Y9,X3Y9,X4Y9,X5Y9,X6Y9,X9Y9,X10Y9,X11Y9) do (set %%o= )
Goto :Eof

:Check4
set NXL=False
if "!X4Y2!"=="%Box%" (
if "!X8Y4!"=="%Box%" (
if "!X5Y5!"=="%Box%" (
if "!X2Y6!"=="%Box%" (
if "!X6Y8!"=="%Box%" set NXL=True))))
Goto :Eof

::Inicio Nivel 5
:Level5
set Movs=0
set X9Y2=%Player%
set CurPos=X9Y2
set Pushes=X2Y7,X3Y7,X4Y7,X5Y7,X6Y7
for %%g in (%Pushes%) do (set %%g=%Push%)
for %%h in (X4Y4,X6Y4,X8Y4,X5Y5,X5Y6) do (set %%h=%Box%)
for %%i in (X4Y1,X5Y1,X6Y1,X7Y1,X8Y1,X9Y1,X10Y1,X3Y2,X4Y2,X7Y2,X10Y2,X3Y3,X7Y3,X10Y3,X3Y4,X10Y4) do (set %%i=%Bound%)
for %%j in (X3Y5,X6Y5,X7Y5,X10Y5,X1Y6,X2Y6,X3Y6,X7Y6,X9Y6,X10Y6,X1Y7,X9Y7,X1Y8,X2Y8,X3Y8) do (set %%j=%Bound%)
for %%k in (X4Y8,X5Y8,X6Y8,X7Y8,X9Y8) do (set %%k=%Bound%)
for %%l in (X5Y2,X6Y2,X8Y2,X4Y3,X5Y3,X6Y3,X8Y3,X9Y3,X5Y4,X7Y4) do (set %%l= )
for %%m in (X9Y4,X4Y5,X8Y5,X9Y5,X4Y6,X6Y6,X8Y6,X7Y7,X8Y7) do (set %%m= )
Goto :Eof

:Check5
set NXL=False
if "!X2Y7!"=="%Box%" (
if "!X3Y7!"=="%Box%" (
if "!X4Y7!"=="%Box%" (
if "!X5Y7!"=="%Box%" (
if "!X6Y7!"=="%Box%" set NXL=True))))
Goto :Eof
::Fin Nivel 5
::Fin de Coordenadas

Creo que ya saben como es la mecanica del juego,  un Jugador en una Especie de Laberinto, el cual tienes que guiar y hacer que Empuje (Push) unas Cajas (Box) hasta hacerlas llegar a unas posiciones predeterminadas, todo esto hacerlo en la menor cantidad de Movimientos.

Pronto mas packs de Levels !!!...

Saludos.  :D :D :D
13  Programacin / Scripting / [Batch Game] PingPong v 1 - by :: SmartGenius :: en: 24 Enero 2009, 20:14 pm
Bueno, que mas decirles.....otro Juego Batch mas a la lista  ;D

Ping Pong v 1


Descargar: http://one.xthost.info/smartv2/BatchGames/PingPong_bySmartGenius.zip (incluido CHOICE.COM)

Este es un juego similar al PingPong que alguna vez jugaron en las consolas, solo que en este la PC es invencible  >:D...auqnue eso lo podria modificar.  ;D

Controles:

Tecla "W" = Iniciar Juego / Acelerar la Bola
Tecla "A" = Mover Tabla a la Izquierda
Tecla "D" = Mover Tabla a la Derecha
Tecla "X" = Salir de Juego


Aqui el Codigo usado......en Base a lo aprendido con el tema de Graficos y Coordenadas.  ;)

Código:
 @echo off
 @title PingPong v 1
 @mode con cols=28 lines=24
 @::Juego Batch PingPong
 @::Another Batch Game
 @::by ::SmartGenius ::

if not exist "choice.com" (Goto :NoKey)

:load
call :Logo
setlocal enabledelayedexpansion
set LimX=18
set LimY=16
set TBound=3
set LBound=1
set /a RBound=%LimX%-1
set /a BBound=%LimY%-3
set NLevels=1

:init
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b= ))
set Ball=O
set Bound=
set Block=
set Line=
set Lost=

:Levels
set /a L+=1
Call :Level%L%
Call :Graphic
set P%L%=%Movs%
if "%LOS%"=="True" Goto :Lost
if "%NXL%"=="True" Goto :End
if "%L%"=="%NLevels%" Goto :Win
ping -n 1 0.0.0.0 >nul
Goto :Init

:Graphic
Call :Clear
cls
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.
echo.   PingPong v 1 by Smart
echo.
echo.    PC:%PPC%     Player:%Points%
echo.   ͻ
for /l %%f in (0,1,%LimY%) do (echo.   !Lin_%%f!)
echo.   ͼ
rem pause >nul
call :%Action%
if "%PPC%"=="10" (Set LOS=True&set NXL=True)
if "%NXL%"=="True" (Goto :Eof)
Goto :Graphic

:Paused
CHOICE /C:WADX /N >nul
if "%errorlevel%"=="1" (set Action=Playing)
if "%errorlevel%"=="2" (call :LeftA)
if "%errorlevel%"=="3" (call :RightA)
if "%errorlevel%"=="4" (set NXL=True)
Call :MovPC "%CurPos%"
Goto :Eof

:Playing
CHOICE /C:WADX /N /T:W,1 >nul
if "%errorlevel%"=="1" (set Action=Playing)
if "%errorlevel%"=="2" (call :LeftB)
if "%errorlevel%"=="3" (call :RightB)
if "%errorlevel%"=="4" (set NXL=True)
Call :MovBall
Call :MovPC "%CurPos%"
Goto :Eof

::Logica de Movimiento en el Plano
::Coded by :: SmartGenius ::

:RightA
if ["%Table%"]==["%MaxTable%"] (Goto :Eof)
for /f "tokens=1,5 delims=," %%u in ("%Table%") do (
call :MovAX+ "%%u" "%%v" TB "!%%u!"
call set NewTable=!TB!,%Table%
for /f "tokens=1-5 delims=," %%t in ("!NewTable!") do (set NewTable=%%t,%%u,%%v,%%w,%%x)
set Table=!NewTable!
call :MovAX+ "%CurPos%" "%CurPos%" CurPos "!%CurPos%!"
)
Goto :Eof

:MovAX+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p+1
call set NMovX=%%X!MovX!Y%%q%%
if "!NMovX!"=="%Bound%" (Goto :Eof)
if "!NMovX!"==" " (
set %~2=
set X!MovX!Y%%q=%~4
set %3=X!MovX!Y%%q))
Goto :Eof

:RightB
if ["%Table%"]==["%MaxTable%"] (Goto :Eof)
for /f "tokens=1,5 delims=," %%u in ("%Table%") do (
call :MovAX+ "%%u" "%%v" TB "!%%u!"
call set NewTable=!TB!,%Table%
for /f "tokens=1-5 delims=," %%t in ("!NewTable!") do (set NewTable=%%t,%%u,%%v,%%w,%%x)
set Table=!NewTable!)
Goto :Eof

:LeftA
if ["%Table%"]==["%MinTable%"] (Goto :Eof)
for /f "tokens=1,5 delims=," %%u in ("%Table%") do (
call :MovAX- "%%v" "%%u" TB "!%%v!"
call set NewTable=%Table%,!TB!
for /f "tokens=2-6 delims=," %%t in ("!NewTable!") do (set NewTable=%%t,%%u,%%v,%%w,%%x)
set Table=!NewTable!
call :MovAX- "%CurPos%" "%CurPos%" CurPos "!%CurPos%!"
)
Goto :Eof

:LeftB
if ["%Table%"]==["%MinTable%"] (Goto :Eof)
for /f "tokens=1,5 delims=," %%u in ("%Table%") do (
call :MovAX- "%%v" "%%u" TB "!%%v!"
call set NewTable=%Table%,!TB!
for /f "tokens=2-6 delims=," %%t in ("!NewTable!") do (set NewTable=%%t,%%u,%%v,%%w,%%x)
set Table=!NewTable!)
Goto :Eof

:MovAX-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p-1
call set NMovX=%%X!MovX!Y%%q%%
if "!NMovX!"=="%Bound%" (Goto :Eof)
if "!NMovX!"==" " (
set %~2=
set X!MovX!Y%%q=%~4
set %3=X!MovX!Y%%q))
Goto :Eof

:MovPC
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
for /l %%x in (%LBound%,1,%RBound%) do (set X%%xY2= )
set /a PCL=%%p-2
set /a PCR=%%p+2
for /l %%s in (!PCL!,1,!PCR!) do (set X%%sY2=%Bound%))
Goto :Eof

:MovBall
set EOM=False
Call :%NextMov% "%CurPos%"
if "%EOM%"=="True" Goto :Eof
Goto :MovBall

::Moviemtos Diagonales de la Bola
::Movimiento Diagonal1
:Diag1
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p+1
set /a MovY=%%q+1
call set NMovXY=%%X!MovX!Y!MovY!%%

if "!NMovXY!"=="%Bound%" (
if "%%q"=="%BBound%" (set NextMov=Diag3)
if "%%p"=="%RBound%" (set NextMov=Diag4)
Goto :Eof)

if "!NMovXY!"==" " (
set %~1=
set X!MovX!Y!MovY!=%Ball%
set CurPos=X!MovX!Y!MovY!
set EOM=True)
)

if "!NMovXY!"=="%Lost%" (
set %~1=
set /a PPC+=1
call :Reset
set EOM=True)
)
Goto :Eof

::Movimiento Diagonal2
:Diag2
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p-1
set /a MovY=%%q-1
call set NMovXY=%%X!MovX!Y!MovY!%%

if "!NMovXY!"=="%Bound%" (
if "%%q"=="%TBound%" (set NextMov=Diag4)
if "%%p"=="%LBound%" (set NextMov=Diag3)
Goto :Eof)

if "!NMovXY!"==" " (
set %~1=
set X!MovX!Y!MovY!=%Ball%
set CurPos=X!MovX!Y!MovY!
set EOM=True)
)

if "!NMovXY!"=="%Lost%" (
set %~1=
set /a Points+=1
call :Reset
set EOM=True)
)
Goto :Eof

::Movimiento Diagonal3
:Diag3
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p+1
set /a MovY=%%q-1
call set NMovXY=%%X!MovX!Y!MovY!%%

if "!NMovXY!"=="%Bound%" (
if "%%q"=="%TBound%" (set NextMov=Diag1)
if "%%p"=="%RBound%" (set NextMov=Diag2)
Goto :Eof)

if "!NMovXY!"==" " (
set %~1=
set X!MovX!Y!MovY!=%Ball%
set CurPos=X!MovX!Y!MovY!
set EOM=True)
)

if "!NMovXY!"=="%Lost%" (
set %~1=
set /a Points+=1
call :Reset
set EOM=True)
)
Goto :Eof

::Movimiento Diagonal4
:Diag4
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p-1
set /a MovY=%%q+1
call set NMovXY=%%X!MovX!Y!MovY!%%

if "!NMovXY!"=="%Bound%" (
if "%%q"=="%BBound%" (set NextMov=Diag2)
if "%%p"=="%LBound%" (set NextMov=Diag1)
Goto :Eof)

if "!NMovXY!"==" " (
set %~1=
set X!MovX!Y!MovY!=%Ball%
set CurPos=X!MovX!Y!MovY!
set EOM=True)
)

if "!NMovXY!"=="%Lost%" (
set %~1=
set /a PPC+=1
call :Reset
set EOM=True)
)
Goto :Eof

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

:Reset
set CurPos=X8Y13
set Table=X10Y14,X9Y14,X8Y14,X7Y14,X6Y14
for /l %%h in (1,1,17) do (set X%%hY14= )
for %%k in (%Init%) do (set %%k=%Line%)
for /f "tokens=1 delims=," %%j in ("%Init%") do (set %%j=%Ball%)
set Action=Paused
Goto :Eof

:Lost
msg * Perdiste !

:End
msg * Gracias por Jugar PingPong v1 by :: SmartGenius::
endlocal
exit

::Niveles del Juego PingPong
::Coordenadas Cartesianas
::Coded by :: SmartGenius ::

::Inicio Nivel 1
:Level1
set Movs=0
set Points=0
set PPC=0
set CurPos=X8Y13
set Table=X10Y14,X9Y14,X8Y14,X7Y14,X6Y14
set MaxTable=X17Y14,X16Y14,X15Y14,X14Y14,X13Y14
set MinTable=X5Y14,X4Y14,X3Y14,X2Y14,X1Y14
set Init=X8Y13,X6Y14,X7Y14,X8Y14,X9Y14,X10Y14
set Lives=3
set Dir=N
set Action=Paused
set NextMov=Diag3
for /l %%e in (%LBound%,1,%RBound%) do (set X%%eY1=.)
for /l %%f in (6,1,10) do (set X%%fY2=%Bound%)
for %%k in (%Init%) do (set %%k=%Line%)
for /f "tokens=1 delims=," %%j in ("%Init%") do (set %%j=%Ball%)
for /l %%i in (0,1,%LimX%) do (
set X0Y%%i=%Bound%
set X%LimX%Y%%i=%Bound%
set X%%iY0=%Bound%
set X%%iY%LimY%=%Bound%)
rem for /l %%l in (2,1,16) do (set X%%lY2=%Block%)
rem for /l %%m in (4,1,14) do (set X%%mY3=%Block%)
rem for /l %%n in (6,1,12) do (set X%%nY4=%Block%)
rem for /l %%o in (8,1,10) do (set X%%oY5=%Block%)
for /l %%r in (1,1,17) do (set X%%rY15=%Lost%)
Goto :Eof

::Fin Nivel 1

::Fin de Coordenadas

:Logo
cls
echo.
echo.
echo.
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰
echo. ۰۰۰۰۰
echo.
echo.
echo.
echo. ۰۰۰۰
echo. ۰۰۲۰۰۰۰
echo. ۰۰۰۱۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۲۰۰۰۰
echo. ۰۰۰۰
echo. ۰
echo.
echo. : SmartGenius :
echo.  Corp.  2009  
echo.
ping -n 3 0.0.0.0 >nul
Goto :Eof


:NoKey
 @mode con cols=30 lines=20
cls
echo.
echo  Uno de los archivos necesarios para el
echo  funcionamiento de este Script no se
echo  encuentra.
echo.
echo  CHOICE.COM
echo.
echo  Por favor descargue una copia del Comando
echo  CHOICE de Internet...
echo.
pause
exit

Cualquier duda, comentario o sugerencia es Bienvenida.....

Que lo disfruten...y un Saludo  :D

14  Programacin / Scripting / [Batch Game] PacMan v 1 - by :: SmartGenius :: en: 22 Enero 2009, 22:51 pm
Bueno, de nuevo llevando a la practica el Tema de los Graficos en Batch, y una que otra cosita que he aprendido, pues les traigo otro Clasico de los Gamers...en Batch !!!

Pacman v 1


Es el Clasico Juego de PacMan en el que tienes que atravesar un Puzzle mientras recoges "Galletas" y vas acumulando puntos, pero teniendo cuidado con los Fantasmas..... ;D ;D

EL Juego hace uso de CHOICE

Descargar:PacManv1bySmart.zip (CHOICE Incluido)

Código:
 @echo off
 @title PacMan v 1
 @mode con cols=24 lines=24
 @::Juego Batch PacMan
 @::Another Batch Game
 @::by ::SmartGenius ::

if not exist "choice.com" (Goto :NoKey)

:load
call :Logo
setlocal enabledelayedexpansion
set LimX=16
set LimY=16
set NLevels=1

:init
for /l %%a in (0,1,%LimX%) do (
for /l %%b in (0,1,%LimY%) do (
set X%%aY%%b=.))
set Player=
set Bound=
set Box=
set Ghost=

:Levels
set /a L+=1
Call :Level%L%
Call :Graphic
set P%L%=%Movs%
if "%NXL%"=="True" Goto :End
if "%L%"=="%NLevels%" Goto :Win
ping -n 1 0.0.0.0 >nul
Goto :Init

:Graphic
Call :Clear
cls
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.
echo.  Pacman v 1 by Smart
echo.
echo.  Vidas:%Lives%   Puntos:%Points%
echo.   ͻ
for /l %%f in (0,1,%LimY%) do (echo.   !Lin_%%f!)
echo.   ͼ
CHOICE /C:WASDX /N /T:%Dir%,1 >nul
if "%errorlevel%"=="1" (call :MovY- "%CurPos%" CurPos&set Dir=W)
if "%errorlevel%"=="2" (call :MovX- "%CurPos%" CurPos&set Dir=A)
if "%errorlevel%"=="3" (call :MovY+ "%CurPos%" CurPos&set Dir=S)
if "%errorlevel%"=="4" (call :MovX+ "%CurPos%" CurPos&set Dir=D)
if "%errorlevel%"=="5" (set NXL=True&Goto :Eof)
Call :MovGhost
for %%w in (%Boxes%) do (
if not "!%%w!"=="%Box%" (
if "!%%w!"=="." (set %%w=%Box%)))
set /a NCK=%Points% %% 7
if "%NCK%"=="0" set Cki=False
if "%EOG%"=="True" (msg * Perdiste&Goto :Eof)
Goto :Graphic

::Logica de Movimiento en el Plano
::Coded by :: SmartGenius ::

:MovX+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p+1
call set NMovX=%%X!MovX!Y%%q%%

if "!NMovX!"=="%Bound%" (Goto :Eof)

if "!NMovX!"=="%Ghost%" (
if !%~1!==%Player% (
if "%Cki%"=="True" (
set %~1=
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q
set /a Points+=10
call :UnGhost "X!MovX!Y%%q"
)
if "%Cki%"=="False" (
set %~1=
set /a Lives-=1
set %Init%=%Player%
set %2=%Init%
if "!Lives!"=="0" (set EOG=True)
)))

if "!NMovX!"=="." (
if !%~1!==%Player% (
set %~1=
set /a Points+=2
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=.
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q))

if "!NMovX!"==" " (
if !%~1!==%Player% (
set %~1=
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q))


if "!NMovX!"=="%Box%" (
if !%~1!==%Player% (
set %~1=
set /a Points+=5
set Cki=True
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=.
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q)))

if !%~1!==%Player% set /a Movs+=1
Goto :Eof


:MovX-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovX=%%p-1
call set NMovX=%%X!MovX!Y%%q%%

if "!NMovX!"=="%Bound%" (Goto :Eof)

if "!NMovX!"=="%Ghost%" (
if !%~1!==%Player% (
if "%Cki%"=="True" (
set %~1=
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q
set /a Points+=10
call :UnGhost "X!MovX!Y%%q"
)
if "%Cki%"=="False" (
set %~1=
set /a Lives-=1
set %Init%=%Player%
set %2=%Init%
if "!Lives!"=="0" (set EOG=True)
)))

if "!NMovX!"=="." (
if !%~1!==%Player% (
set %~1=
set /a Points+=2
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=.
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q))

if "!NMovX!"==" " (
if !%~1!==%Player% (
set %~1=
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q))


if "!NMovX!"=="%Box%" (
if !%~1!==%Player% (
set %~1=
set /a Points+=5
set Cki=True
set X!MovX!Y%%q=%Player%
set %2=X!MovX!Y%%q)
if !%~1!==%Ghost% (
set %~1=.
set X!MovX!Y%%q=%Ghost%
set %2=X!MovX!Y%%q)))

if !%~1!==%Player% set /a Movs+=1
Goto :Eof


:MovY+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovY=%%q+1
call set NMovY=%%X%%pY!MovY!%%

if "!NMovY!"=="%Bound%" (Goto :Eof)

if "!NMovY!"=="%Ghost%" (
if !%~1!==%Player% (
if "%Cki%"=="True" (
set %~1=
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!
set /a Points+=10
call :UnGhost "X%%pY!MovY!"
)
if "%Cki%"=="False" (
set %~1=
set /a Lives-=1
set %Init%=%Player%
set %2=%Init%
if "!Lives!"=="0" (set EOG=True)
)))

if "!NMovY!"=="." (
if !%~1!==%Player% (
set %~1=
set /a Points+=2
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=.
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!))

if "!NMovY!"==" " (
if !%~1!==%Player% (
set %~1=
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!))


if "!NMovY!"=="%Box%" (
if !%~1!==%Player% (
set %~1=
set /a Points+=5
set Cki=True
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=.
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!)))

if !%~1!==%Player% set /a Movs+=1
Goto :Eof


:MovY-
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
set /a MovY=%%q-1
call set NMovY=%%X%%pY!MovY!%%

if "!NMovY!"=="%Bound%" (Goto :Eof)

if "!NMovY!"=="%Ghost%" (
if !%~1!==%Player% (
if "%Cki%"=="True" (
set %~1=
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!
set /a Points+=10
call :UnGhost "X%%pY!MovY!"
)
if "%Cki%"=="False" (
set %~1=
set /a Lives-=1
set %Init%=%Player%
set %2=%Init%
if "!Lives!"=="0" (set EOG=True)
)))

if "!NMovY!"=="." (
if !%~1!==%Player% (
set %~1=
set /a Points+=2
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=.
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!))

if "!NMovY!"==" " (
if !%~1!==%Player% (
set %~1=
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!))


if "!NMovY!"=="%Box%" (
if !%~1!==%Player% (
set %~1=
set /a Points+=5
set Cki=True
set X%%pY!MovY!=%Player%
set %2=X%%pY!MovY!)
if !%~1!==%Ghost% (
set %~1=.
set X%%pY!MovY!=%Ghost%
set %2=X%%pY!MovY!)))

if !%~1!==%Player% set /a Movs+=1
Goto :Eof


:MovGhost
set NGG=0
for %%z in (%Ghosts%) do (
set /a NG+=1
set Ghost!NG!=%%z)
:MovGhost2
set /a NGG+=1
set /a GoMov=%random:~-1% %% 4
if "!GoMov!"=="0" Call :MovX+ %%Ghost!NGG!%% Ghost!NGG!
if "!GoMov!"=="1" Call :MovX- %%Ghost!NGG!%% Ghost!NGG!
if "!GoMov!"=="2" Call :MovY+ %%Ghost!NGG!%% Ghost!NGG!
if "!GoMov!"=="3" Call :MovY- %%Ghost!NGG!%% Ghost!NGG!
)
if "%NGG%"=="4" (
set Ghosts=%Ghost1%,%Ghost2%,%Ghost3%,%Ghost4%
set NG=0
Goto :Eof)
Goto :MovGhost2

:UnGhost
set Ghosts=!Ghosts:%~1=X8Y7!
for %%g in (%Ghosts%) do (set %%g=%Ghost%)
Goto :Eof

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

:Win

:End
msg * Gracias por Jugar PacMan v1 by :: SmartGenius::
endlocal
exit

::Niveles del Juego PacMan
::Coordenadas Cartesianas
::Coded by :: SmartGenius ::

::Inicio Nivel 1
:Level1
set Movs=0
set Points=0
set X2Y15=%Player%
set CurPos=X2Y15
set Init=X2Y15
set Lives=3
set Cki=False
set Dir=D
set Ghosts=X2Y11,X6Y9,X6Y7,X10Y6
set Boxes=X2Y1,X2Y9,X14Y1,X14Y9,X14Y15
for %%g in (%Ghosts%) do (set %%g=%Ghost%)
for %%h in (%Boxes%) do (set %%h=%Box%)
for /l %%i in (0,1,16) do (
set X0Y%%i=%Bound%
set X1Y%%i=%Bound%
set X15Y%%i=%Bound%
set X16Y%%i=%Bound%
set X%%iY0=%Bound%
set X%%iY16=%Bound%)
for %%j in (3,4,5,6,10,11,12,13) do (
set X%%jY2=%Bound%
set X%%jY3=%Bound%
set X%%jY10=%Bound%
set X%%jY14=%Bound%)
for %%k in (X8Y1,X8Y2,X8Y3,X3Y5,X3Y6,X3Y7,X3Y8,X5Y5,X5Y6,X5Y7,X5Y8,X6Y5,X7Y5) do (set %%k=%Bound%)
for %%l in (X6Y8,X7Y8,X8Y8,X9Y8,X10Y8,X9Y5,X10Y5,X11Y5,X11Y6,X11Y7,X11Y8,X13Y5) do (set %%l=%Bound%)
for %%m in (X13Y6,X13Y7,X13Y8,X7Y10,X9Y10,X3Y12,X3Y13,X5Y12,X6Y12,X7Y12,X8Y12) do (set %%m=%Bound%)
for %%n in (X9Y12,X10Y12,X11Y12,X8Y13,X8Y14,X13Y12,X13Y13) do (set %%n=%Bound%)
for %%o in (X6Y6,X7Y6,X8Y5,X8Y6,X9Y6,X7Y7,X8Y7,X9Y7,X10Y7) do (set %%o= )
Goto :Eof

::Fin Nivel 1

::Fin de Coordenadas

:Logo
color 0a
cls
echo.
echo.
echo.
echo. ۰۰۰
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰
echo. ۰۰۰
echo. ۰۰۰۰
echo. ۰۰۰۰
echo. ۰۰۰۰
echo.
echo. ۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰
echo. ۰۰۰۰۰۰۰
echo. ۰۰۰۰۰۰
echo. ۰۰۰۰۰۰
echo.
echo.
echo. : SmartGenius :
echo.   Corp.  2009 
echo.
ping -n 3 0.0.0.0 >nul
color 0e
Goto :Eof


:NoKey
 @mode con cols=30 lines=20
cls
echo.
echo  Uno de los archivos necesarios para el
echo  funcionamiento de este Script no se
echo  encuentra.
echo.
echo  CHOICE.COM
echo.
echo  Por favor descargue una copia del Comando
echo  CHOICE de Internet...
echo.
pause
exit

Con esto queda demostrado que se pueden hacer bastantes cosas en Batch, solo hace falta imaginacion y algo de tiempo.... ;)

Cualquier duda, comentario o sugerencia acerca del codigo hacerla por favor... :)

Saludos.
15  Programacin / Scripting / [Batch Game] PushBox v 1 - by :: SmartGenius :: en: 16 Enero 2009, 19:49 pm
Siguiendo con la Aplicacion del Concepto de Coordenadas y Graficos en Batch Desarrollado por Mi... 8)...pues les vengo a presentar un Nuevo Juego que he ideado...para su Deleite.... :D :D

PushBox v 1 - by Smart



Se trata de un Juego en el cual controlas a un Jugador en una Especie de Laberinto, el cual tienes que guiar y hacer que Empuje (Push) unas Cajas (Box) hasta hacerlas llegar a unas posiciones predeterminadas, todo esto hacerlo en la menor cantidad de Movimientos.


Controles

Arriba:     Flecha Arriba
Abajo:     Flecha Abajo
Derecha:  Flecha Derecha
Izquierda: Flecha Izquierda
Salir:        Tecla "X"



Codigo:
Código
  1.  @echo off
  2.  @title PushBox v 1
  3.  @mode con cols=21 lines=18
  4.  @::Another Batch Game
  5.  @::by ::SmartGenius ::
  6.  
  7. if not exist "keyboard.exe" (Goto :NoKey)
  8.  
  9. :load
  10. call :Logo
  11. setlocal enabledelayedexpansion
  12. set LimX=12
  13. set LimY=10
  14. set NLevels=5
  15.  
  16. :init
  17. for /l %%a in (0,1,%LimX%) do (
  18. for /l %%b in (0,1,%LimY%) do (
  19. set X%%aY%%b=))
  20. set Player=
  21. set Bound=
  22. set Box=*
  23. set Push=o
  24.  
  25. :Levels
  26. set /a L+=1
  27. Call :Level%L%
  28. Call :Graphic
  29. set P%L%=%Movs%
  30. if "%EOG%"=="True" Goto :End
  31. if "%L%"=="%NLevels%" Goto :Win
  32. ping -n 1 0.0.0.0 >nul
  33. Goto :Init
  34.  
  35. :Graphic
  36. Call :Clear
  37. :First
  38. cls
  39. for /l %%d in (0,1,%LimY%) do (
  40. for /l %%e in (0,1,%LimX%) do (
  41. set Lin_%%d=!Lin_%% style="color: #448888;">d!!X%%eY%%d!))
  42. echo. PushBox v1 by Smart
  43. echo.  Nivel:%L%   Movs:%Movs%
  44. echo.   ͻ
  45. for /l %%f in (0,1,%LimY%) do (echo.   !Lin_%% style="color: #448888;">f!)
  46. echo.   ͼ
  47. keyboard
  48. if "%errorlevel%"=="77" (call :MovX+ "%CurPos%")
  49. if "%errorlevel%"=="75" (call :MovX- "%CurPos%")
  50. if "%errorlevel%"=="80" (call :MovY+ "%CurPos%")
  51. if "%errorlevel%"=="72" (call :MovY- "%CurPos%")
  52. if "%errorlevel%"=="88" (set EOG=True&Goto :Eof)
  53. if "%errorlevel%"=="120" (set EOG=True&Goto :Eof)
  54. Call :Check%L%
  55. if "%NXL%"=="True" (Goto :Eof)
  56. Goto :Graphic
  57.  
  58. ::Logica de Movimiento en el Plano
  59. ::Coded by :: SmartGenius ::
  60.  
  61. :MovX+
  62. for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
  63. set /a MovX=%%p+1
  64. set /a MovXX=%%p+2
  65. call set NMovX=%%X!MovX!Y%%q%%
  66. call set NMovXX=%%X!MovXX!Y%%q%%
  67. if "!NMovX!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  68. if "!NMovX!"=="% style="color: #448888;">Push%" (
  69. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  70. set X!MovX!Y%%q=%Player%
  71. set CurPos=X!MovX!Y%%q)
  72. if "!NMovX!"==" " (
  73. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  74. set X!MovX!Y%%q=%Player%
  75. set CurPos=X!MovX!Y%%q)
  76. if "!NMovX!"=="% style="color: #448888;">Box%" (
  77. if "!NMovXX!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  78. if "!NMovXX!"=="% style="color: #448888;">Box%" (Goto :Eof)
  79. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  80. set X!MovX!Y%%q=%Player%
  81. set X!MovXX!Y%%q=%Box%
  82. set CurPos=X!MovX!Y%%q))
  83. set /a Movs+=1
  84. for %%u in (%Pushes%) do (if "!%% style="color: #448888;">u!"==" " (set %%u=%Push%))
  85. Goto :Eof
  86.  
  87. :MovX-
  88. for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
  89. set /a MovX=%%p-1
  90. set /a MovXX=%%p-2
  91. call set NMovX=%%X!MovX!Y%%q%%
  92. call set NMovXX=%%X!MovXX!Y%%q%%
  93. if "!NMovX!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  94. if "!NMovX!"=="% style="color: #448888;">Push%" (
  95. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  96. set X!MovX!Y%%q=%Player%
  97. set CurPos=X!MovX!Y%%q)
  98. if "!NMovX!"==" " (
  99. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  100. set X!MovX!Y%%q=%Player%
  101. set CurPos=X!MovX!Y%%q)
  102. if "!NMovX!"=="% style="color: #448888;">Box%" (
  103. if "!NMovXX!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  104. if "!NMovXX!"=="% style="color: #448888;">Box%" (Goto :Eof)
  105. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  106. set X!MovX!Y%%q=%Player%
  107. set X!MovXX!Y%%q=%Box%
  108. set CurPos=X!MovX!Y%%q))
  109. set /a Movs+=1
  110. for %%u in (%Pushes%) do (if "!%% style="color: #448888;">u!"==" " (set %%u=%Push%))
  111. Goto :Eof
  112.  
  113. :MovY+
  114. for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
  115. set /a MovY=%%q+1
  116. set /a MovYY=%%q+2
  117. call set NMovY=%%X%%pY!MovY!%%
  118. call set NMovYY=%%X%%pY!MovYY!%%
  119. if "!NMovY!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  120. if "!NMovY!"=="% style="color: #448888;">Push%" (
  121. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  122. set X%%pY!MovY!=%Player%
  123. set CurPos=X%%pY!MovY!)
  124. if "!NMovY!"==" " (
  125. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  126. set X%%pY!MovY!=%Player%
  127. set CurPos=X%%pY!MovY!)
  128. if "!NMovY!"=="% style="color: #448888;">Box%" (
  129. if "!NMovYY!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  130. if "!NMovYY!"=="% style="color: #448888;">Box%" (Goto :Eof)
  131. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  132. set X%%pY!MovY!=%Player%
  133. set X%%pY!MovYY!=%Box%
  134. set CurPos=X%%pY!MovY!))
  135. set /a Movs+=1
  136. for %%u in (%Pushes%) do (if "!%% style="color: #448888;">u!"==" " (set %%u=%Push%))
  137. Goto :Eof
  138.  
  139. :MovY-
  140. for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
  141. set /a MovY=%%q-1
  142. set /a MovYY=%%q-2
  143. call set NMovY=%%X%%pY!MovY!%%
  144. call set NMovYY=%%X%%pY!MovYY!%%
  145. if "!NMovY!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  146. if "!NMovY!"=="% style="color: #448888;">Push%" (
  147. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  148. set X%%pY!MovY!=%Player%
  149. set CurPos=X%%pY!MovY!)
  150. if "!NMovY!"==" " (
  151. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  152. set X%%pY!MovY!=%Player%
  153. set CurPos=X%%pY!MovY!)
  154. if "!NMovY!"=="% style="color: #448888;">Box%" (
  155. if "!NMovYY!"=="% style="color: #448888;">Bound%" (Goto :Eof)
  156. if "!NMovYY!"=="% style="color: #448888;">Box%" (Goto :Eof)
  157. if !% style="color: #448888;">~1!==% style="color: #448888;">Player% set %~1=
  158. set X%%pY!MovY!=%Player%
  159. set X%%pY!MovYY!=%Box%
  160. set CurPos=X%%pY!MovY!))
  161. set /a Movs+=1
  162. for %%u in (%Pushes%) do (if "!%% style="color: #448888;">u!"==" " (set %%u=%Push%))
  163. Goto :Eof
  164.  
  165. :Clear
  166. for /l %%m in (0,1,%LimY%) do (set Lin_%%m=)
  167. Goto :Eof
  168.  
  169. :Win
  170. cls
  171. echo.   Introduce tu
  172. echo.      Nombre
  173. set /p Nom=">>"
  174. if not defined Nom Goto :Win
  175. echo. Felicitaciones !
  176. echo. %Nom%
  177. for /l %%v in (1,1,%NLevels%) do (
  178. echo  Nivel: %%v Movs: !P%%v!)
  179.  
  180. :End
  181. msg * Gracias por Jugar PushBox v1 by :: SmartGenius::
  182.  
  183. ::Niveles del Juego PushBox
  184. ::Coordenadas Cartesianas
  185. ::Coded by :: SmartGenius ::
  186.  
  187. ::Inicio Nivel 1
  188. :Level1
  189. set Movs=0
  190. set X4Y2=%Player%
  191. set CurPos=X4Y2
  192. set Pushes=X5Y2,X6Y2,X7Y2
  193. for %%g in (%Pushes%) do (set %%g=%Push%)
  194. for %%h in (X4Y4,X6Y5,X3Y6) do (set %%h=%Box%)
  195. for %%i in (X2Y1,X3Y1,X4Y1,X5Y1,X6Y1,X7Y1,X8Y1,X2Y2,X8Y2,X2Y3,X6Y3,X7Y3,X8Y3,X9Y3) do (set %%i=%Bound%)
  196. for %%j in (X1Y4,X2Y4,X3Y4,X9Y4,X1Y5,X5Y5,X7Y5,X9Y5,X1Y6,X5Y6,X9Y6,X1Y7,X5Y7,X6Y7) do (set %%j=%Bound%)
  197. for %%k in (X7Y7,X8Y7,X9Y7,X1Y8,X2Y8,X3Y8,X4Y8,X5Y8,X6Y8) do (set %%k=%Bound%)
  198. for %%l in (X3Y2,X3Y3,X4Y3,X5Y3,X5Y4,X6Y4,X7Y4,X8Y4,X2Y5,X3Y5) do (set %%l= )
  199. for %%m in (X4Y5,X8Y5,X2Y6,X4Y6,X6Y6,X7Y6,X8Y6,X2Y7,X3Y7,X4Y7) do (set %%m= )
  200. Goto :Eof
  201.  
  202. :Check1
  203. set NXL=False
  204. if "!X5Y2!"=="% style="color: #448888;">Box%" (
  205. if "!X6Y2!"=="% style="color: #448888;">Box%" (
  206. if "!X7Y2!"=="% style="color: #448888;">Box%" set NXL=True))
  207. Goto :Eof
  208. ::Fin Nivel 1
  209.  
  210. ::Inicio Nivel 2
  211. :Level2
  212. set Movs=0
  213. set X4Y2=%Player%
  214. set CurPos=X4Y2
  215. set Pushes=X3Y5,X3Y6,X3Y7
  216. for %%g in (%Pushes%) do (set %%g=%Push%)
  217. for %%h in (X5Y3,X4Y6,X7Y7) do (set %%h=%Box%)
  218. for %%i in (X3Y1,X4Y1,X5Y1,X6Y1,X3Y2,X6Y2,X7Y2,X8Y2,X3Y3,X8Y3,X2Y4,X3Y4,X4Y4,X6Y4) do (set %%i=%Bound%)
  219. for %%j in (X8Y4,X9Y4,X2Y5,X4Y5,X6Y5,X9Y5,X2Y6,X7Y6,X9Y6,X2Y7,X9Y7,X2Y8,X3Y8,X4Y8) do (set %%j=%Bound%)
  220. for %%k in (X5Y8,X6Y8,X7Y8,X8Y8,X9Y8) do (set %%k=%Bound%)
  221. for %%l in (X5Y2,X4Y3,X6Y3,X7Y3,X5Y4,X7Y4,X5Y5,X7Y5) do (set %%l= )
  222. for %%m in (X8Y5,X5Y6,X6Y6,X8Y6,X4Y7,X5Y7,X6Y7,X8Y7) do (set %%m= )
  223. Goto :Eof
  224.  
  225. :Check2
  226. set NXL=False
  227. if "!X3Y5!"=="% style="color: #448888;">Box%" (
  228. if "!X3Y6!"=="% style="color: #448888;">Box%" (
  229. if "!X3Y7!"=="% style="color: #448888;">Box%" set NXL=True))
  230. Goto :Eof
  231. ::Fin Nivel 2
  232.  
  233. ::Inicio Nivel 3
  234. :Level3
  235. set Movs=0
  236. set X3Y5=%Player%
  237. set CurPos=X3Y5
  238. set Pushes=X3Y6,X4Y6,X3Y7,X4Y7
  239. for %%g in (%Pushes%) do (set %%g=%Push%)
  240. for %%h in (X3Y4,X5Y5,X8Y5,X7Y6) do (set %%h=%Box%)
  241. for %%i in (X2Y2,X3Y2,X4Y2,X5Y2,X6Y2,X7Y2,X8Y2,X2Y3,X8Y3,X9Y3,X10Y3,X1Y4,X2Y4,X4Y4) do (set %%i=%Bound%)
  242. for %%j in (X5Y4,X6Y4,X10Y4,X1Y5,X10Y5,X1Y6,X5Y6,X9Y6,X10Y6,X1Y7,X2Y7,X5Y7,X9Y7) do (set %%j=%Bound%)
  243. for %%k in (X2Y8,X3Y8,X4Y8,X5Y8,X6Y8,X7Y8,X8Y8,X9Y8) do (set %%k=%Bound%)
  244. for %%l in (X3Y3,X4Y3,X5Y3,X6Y3,X7Y3,X7Y4,X8Y4,X9Y4,X2Y5,X4Y5) do (set %%l= )
  245. for %%m in (X6Y5,X7Y5,X9Y5,X2Y6,X6Y6,X8Y6,X6Y7,X7Y7,X8Y7) do (set %%m= )
  246. Goto :Eof
  247.  
  248. :Check3
  249. set NXL=False
  250. if "!X3Y6!"=="% style="color: #448888;">Box%" (
  251. if "!X3Y7!"=="% style="color: #448888;">Box%" (
  252. if "!X4Y6!"=="% style="color: #448888;">Box%" (
  253. if "!X4Y7!"=="% style="color: #448888;">Box%" set NXL=True)))
  254. Goto :Eof
  255. ::Fin Nivel 3
  256.  
  257. ::Inicio Nivel 4
  258. :Level4
  259. set Movs=0
  260. set X4Y4=%Player%
  261. set CurPos=X4Y4
  262. set Pushes=X7Y3,X7Y4,X7Y5,X7Y6
  263. for %%g in (%Pushes%) do (set %%g=%Push%)
  264. for %%h in (X5Y3,X6Y3,X6Y4,X5Y5) do (set %%h=%Box%)
  265. for %%i in (X3Y1,X4Y1,X5Y1,X6Y1,X3Y2,X6Y2,X7Y2,X8Y2,X3Y3,X8Y3,X3Y4,X8Y4) do (set %%i=%Bound%)
  266. for %%j in (X3Y5,X8Y5,X3Y6,X8Y6,X3Y7,X4Y7,X5Y7,X6Y7,X7Y7,X8Y7,X5Y6) do (set %%j=%Bound%)
  267. for %%l in (X4Y2,X5Y2,X4Y3,X5Y4,X4Y5,X6Y5,X4Y6,X6Y6) do (set %%l= )
  268. Goto :Eof
  269.  
  270. :Check4
  271. set NXL=False
  272. if "!X7Y3!"=="% style="color: #448888;">Box%" (
  273. if "!X7Y4!"=="% style="color: #448888;">Box%" (
  274. if "!X7Y5!"=="% style="color: #448888;">Box%" (
  275. if "!X7Y6!"=="% style="color: #448888;">Box%" set NXL=True)))
  276. Goto :Eof
  277.  
  278. ::Inicio Nivel 5
  279. :Level5
  280. set Movs=0
  281. set X8Y6=%Player%
  282. set CurPos=X8Y6
  283. set Pushes=X4Y5,X5Y5,X6Y5,X7Y5
  284. for %%g in (%Pushes%) do (set %%g=%Push%)
  285. for %%h in (X2Y4,X3Y5,X8Y4,X9Y5) do (set %%h=%Box%)
  286. for %%i in (X1Y2,X2Y2,X3Y2,X4Y2,X7Y2,X8Y2,X9Y2,X10Y2,X11Y2,X0Y3,X1Y3,X4Y3) do (set %%i=%Bound%)
  287. for %%j in (X7Y3,X11Y3,X0Y4,X4Y4,X5Y4,X6Y4,X7Y4,X11Y4,X0Y5,X11Y5,X0Y6,X1Y6) do (set %%j=%Bound%)
  288. for %%k in (X6Y6,X10Y6,X11Y6,X1Y7,X2Y7,X3Y7,X4Y7,X5Y7,X6Y7,X7Y7,X8Y7,X9Y7) do (set %%k=%Bound%)
  289. for %%l in (X2Y3,X3Y3,X8Y3,X9Y3,X10Y3,X1Y4,X3Y4,X9Y4,X10Y4,X1Y5,X2Y5,X8Y5) do (set %%l= )
  290. for %%m in (X10Y5,X2Y6,X3Y6,X4Y6,X5Y6,X7Y6,X9Y6) do (set %%m= )
  291. Goto :Eof
  292.  
  293. :Check5
  294. set NXL=False
  295. if "!X4Y5!"=="% style="color: #448888;">Box%" (
  296. if "!X5Y5!"=="% style="color: #448888;">Box%" (
  297. if "!X6Y5!"=="% style="color: #448888;">Box%" (
  298. if "!X7Y5!"=="% style="color: #448888;">Box%" set NXL=True)))
  299. Goto :Eof
  300. ::Fin Nivel 5
  301.  
  302. ::Fin de Coordenadas
  303.  
  304. :Logo
  305. cls
  306. echo. ۰۰۰۰۰۰
  307. echo. ۰۰۰۰۰۰۰
  308. echo. ۰۰۰۰۰
  309. echo. ۰۰۰۰۰۰
  310. echo. ۰۰۰۰۰
  311. echo. ۰۰۰۰
  312. echo. ۰۰۰۰۰۰
  313. echo. ۰۰۰۰
  314. echo. ۰۰۰۰۰۰
  315. echo. ۰۰۰۰
  316. echo. : SmartGenius :
  317. echo.  Corp.  2009  
  318. ping -n 3 0.0.0.0 >nul
  319. Goto :Eof
  320.  
  321. ::::::::::::::::::::
  322. ::Records by Smart::
  323. ::                ::
  324. ::Nivel 1: 70 Movs::
  325. ::Nivel 2: 50 Movs::
  326. ::Nivel 3:116 Movs::
  327. ::Nivel 4: 25 Movs::
  328. ::Nivel 5: 63 Movs::
  329. ::::::::::::::::::::
  330.  
  331. ::::::::::::::::::::::::::::::::::::::::::::::::
  332. ::El Siguiente Codigo se encarga de Crear el
  333. ::archivo necesario para recibir entradas desde
  334. ::el teclado..... KEYBOARD.EXE
  335. ::Creditos a Carlitos ;)                    
  336. ::::::::::::::::::::::::::::::::::::::::::::::::
  337. :NoKey
  338.  @mode con cols=30 lines=20
  339. cls
  340. echo  Uno de los archivos necesarios para el
  341. echo  funcionamiento de este Script no se
  342. echo  encuentra.
  343. echo  A Continuacion sera creado...
  344. call :keyboard
  345. echo  Archivo Creado Satisfactoriamente...
  346. echo  Por favor reinicie el Script.
  347.  
  348. :keyboard
  349. (
  350. echo n keyboard.dat
  351. echo e 0000 4D 5A 2E 00 01 00 00 00 02 00 00 10 FF FF F0 FF
  352. echo e 0010 FE FF 00 00 00 01 F0 FF 1C 00 00 00 00 00 00 00
  353. echo e 0020 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21
  354. echo rcx
  355. echo 002E
  356. echo w0
  357. )>keyboard.dat
  358. type keyboard.dat|debug>NUL 2>&1
  359. del /f/q/a "keyboard.exe">NUL 2>&1
  360. ren keyboard.dat "keyboard.exe"
  361. Goto :Eof

El Juego Consta de 5 Niveles con diferente Grado de Dificultad en cuanto a la Resolucion del Puzzle, y pueden agregarse mas Niveles.....siempre y cuando esten bien diseados y cumplan con la logica del juego. Pronto les Traere mas Niveles para Este mismo Juego.... :D :D

Los Records Para los Niveles Son:

::Records by Smart
::Nivel 1: 70 Movs
::Nivel 2: 50 Movs
::Nivel 3:116 Movs
::Nivel 4: 25 Movs
::Nivel 5: 63 Movs


Traten de Hacer su mejor Esfuerzo en resolverlos..... ;D.......de seguro les gustara, acepto comentarios, dudas y sugerencias..... ;D

Un Saludo.  ;)

PD: Quien Dijo que no se podia Jugar en Batch ??....... ::) ::)
PD2: El Limite es tu Imaginacion !!!
16  Programacin / Scripting / [Batch Game] Buscaminas v 1 - by :: SmartGenius :: en: 16 Enero 2009, 19:47 pm
Bueno, tomando como base lo explicado de Graficas y Coordenadas en Batch:

http://foro.elhacker.net/scripting/graficos_y_coordenadas_en_batch_by_smartgenius-t241895.0.html

Y lo otro que habian dicho por ahi de que en "Batch no se podia Jugar !!! "  ::)  ::)  ::) ..... ;D

Este es un Ejemplo Practico y a la vez divertido de la Aplicacion de las Coordenadas en el Dibujo de Graficas en la Consola del CMD, y el uso de Movimiento para las Mismas.

Os traigo el Clasico Juego del Buscaminas en su Version 1, creado totalmente por Mi.  :D


Buscaminas v 1 - By SmartGenius


Código:
  @echo off
  @title Buscaminas
  @mode con cols=18 lines=13
  @::MineSweeper v 1
  @::Coded by ::SmartGenius::

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

:load
setlocal enabledelayedexpansion
set LimX=9
set LimY=9
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=
))
for /l %%m in (0,1,9) do (set M%%m=X!random:~-1!Y!random:~-1!)
set X0Y0=
set Last=
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.
echo. MineSweeper v 1
echo.
for /l %%f in (0,1,%LimY%) do (echo.   !Lin_%%f!)
if "%EOG%"=="True" Goto :End
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%"=="13" (call :Check "%CurPos%")
if "%errorlevel%"=="88" (msg * Gracias por Jugar Buscaminas v1 by SmartGenius&exit)
if "%errorlevel%"=="120" (msg * Gracias por Jugar Buscaminas v1 by SmartGenius&exit)
Goto :Graphic

:MovX+
for /f "tokens=1,2 delims=X,Y" %%p in ("%~1") do (
if "%%p"=="%LimX%" Goto :Eof
if !%~1!== set %~1=%Last%
set /a MovX=%%p+1
call set Last=%%X!MovX!Y%%q%%
set X!MovX!Y%%q=
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!== set %~1=%Last%
set /a MovX=%%p-1
call set Last=%%X!MovX!Y%%q%%
set X!MovX!Y%%q=
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!== set %~1=%Last%
set /a MovY=%%q+1
call set Last=%%X%%pY!MovY!%%
set X%%pY!MovY!=
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!== set %~1=%Last%
set /a MovY=%%q-1
call set Last=%%X%%pY!MovY!%%
set X%%pY!MovY!=
set CurPos=X%%pY!MovY!
)
Goto :Eof

:Check
for /l %%h in (0,1,9) do (
if "%~1"=="!M%%h!" (
set %~1=
set EOG=True
Goto :Eof
))
set %~1=
Goto :Eof

:End
msg * Perdiste !
pause>nul
exit

: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

Mueven su figurita con las flechas de direccion (arriba, abajo, izquierda, derecha...respectivamente) y para descubrir una casilla presionan Enter. Para Salir del Juego presionan la tecla X

La primera vez que lo ejecuten se les creara el Archivo KEYBOARD.EXE que es el encargado de recibir cada una de las ordenes que le damos mediente el teclado...

Espero que les guste, y como les digo....solo la imaginacion es el Limite !!!!!  :o

Un Saludo  ;)
17  Programacin / Scripting / 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 tamao 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 tamao 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.
18  Programacin / Scripting / [Batch] Tutorial de Polimetria - by Smart en: 16 Noviembre 2008, 00:57 am
Citar
Me he tomado la molestia d emodificar y organizar el Tutorial de Fakher, aparte de aadirle algo d einfo...espero no le importe  ;)

Tcnicamente se definira a la polimtrica como un cdigo capaz de auto manipularse para lograr obtener valores reales de una variable e integrarlos en otras...

La polimtrica consiste en usar variables dentro de variables y obtener  un cdigo que puede ser recursivo y con aplicacin al polimorfismo, puede hacerse uso de las expansiones de variables para obtener cdigos optimizados de programas que normalmente llevaran muchas lneas de cdigo.

Tomemos como ejemplo un cdigo que nos Genera una Funcin llamada "Echo Dinmico" o "Efecto Maquina de Escribir".

Citar
Ej. set a=%a:~0,%f%%

El problema reside en que la Consola de Comandos (CMD) lee lo que se encuentre entre porcentajes como una variable, por lo que en el ejemplo anterior le pedimos al programa que defina una variable que sea igual al valor que tenga la variable %a:~0,%(cuyo valor es 0..."" nulo) que tenga una cadena con el contenido "f" y otra variable que se llame %% (cuyo valor tambin es "" nulo) por lo tanto el valor de la variable a seria "f".

Entonces la solucin  seria definir unas "subvariables" y luego juntarlas en la variable final, o haciendo uso de varias smbolos de porcentajes (%) recurriendo a la redireccin a archivos externos temporales o uso de CALL. Tambien tenemos otras formas usando SETLOCAL ENABLEDELAYEDEXPANSION pero eso lo explicaremos mas
adelante...

Código:
 @echo off
REM Echo Dinamico by Fhaker
copy %0 tempcode.txt
cls
set /p a=Echo Dinamico:
set b=""
goto start
:start
if %a%==%b% type tempcode.txt >%0 && goto control
set /a f=%f%+1
if %f%==1 echo "" >>%0
set h=%a:~0,
set l=%h%%f%%o%
echo :menu%f% >>%0
echo set b=%%%l%%% >>%0
echo goto start >>%0
goto menu%f%
:control
set k=%f%
set /a kk=%f%+2
set f=0
goto menu
:menu
set /a f=%f%+1
if %f%==%kk% pause && type tempcode.txt >%0 && goto fin
set h=%a:~0,
set l=%h%%f%%o%
echo :menu%f% >>%0
echo cls >>%0
echo set b=%%%l%%% >>%0
if not %f%==1 echo echo %b%_ >>%0
echo goto menu >>%0
ping -n 1,5 127.0.0.1 >nul
goto menu%f%
:fin
del /f /q tempcode.txt
exit

Lo que hace esto es definir una variable que contenga la cadena %a:~0, que como podrn ver tiene un porcentaje adelante y por lo cual al no cerrarse la supuesta variable el porcentaje queda en la cadena...

Despus lo que se hace es unir en la variable %l% la variable %h% que es la recin creada, la variable %f% que es la que contiene el numero de bucle, de men y de letra que el programa va a mostrar usando la expansin de la variable %a%, y la variable %o% que no tiene nada.

Entonces el Cdigo realiza lo siguiente:

1.   Se copia as mismo en un Archivo Temporal (Respaldo).
2.   Se pide al Usuario que Introduzca una Dato.
3.   Se hacen las comprobaciones para cuando el Dato ha sido mostrado en su totalidad.
4.   Se definen las Variables antes mencionadas y luego se hace la expansin.
5.   Se genera una nueva parte de cdigo que es introducida al Final del archivo actual.
6.   Se va mostrando el Dato carcter por carcter  y una vez llegado al ltimo finaliza el bucle y termina el cdigo.
7.   Se restablece el archivo original desde el Respaldo creado al Inicio.

Este Cdigo puede optimizarse aun ms:

Código:
  @echo off
REM Echo Dinamico by Fhaker
REM Optimized by ::SmartGenius::
copy %0 tempcode.txt
cls
set /p a=Echo Dinamico:
set b=
goto start
:start
set /a f=%f%+1
if %f%==1 echo ::Inicio Code Generado >>%0
set h=%a:~0,
set l=%h%%f%%o%
echo :menu%f% >>%0
echo cls >>%0
echo set b=%%%l%%% >>%0
echo echo %b%_ >>%0
echo if "%b%"=="%a% " goto fin >>%0
echo goto start >>%0
ping -n 2 0.0.0.0 >nul
goto menu%f%

:fin
pause
exit

Este ltimo realiza la misma accin pero se eliminaron unas estructuras de control innecesarias y mejora el cdigo.

Haciendo la prueba al cdigo, lo guardamos como DYNECHO.BAT, lo ejecutamos e introducimos como dato "Hola", se muestra el efecto de escritura “carcter por carcter" o "Maquina de Escribir", una vez que finaliza el cdigo se procede a mirar el cdigo fuente de DYNECHO.BAT y veremos el cambio.

continua....
19  Programacin / Scripting / [Batch] Algoritmo de Numeros Primos en: 16 Noviembre 2008, 00:53 am
Codigos para trabajar con numeros primos, usndo las matematicas euclidianas, estos codes son utiles para saber cuando un numero es primo, el n-esimo termino de la sucesion de primos, el primo mas cercano de un numero y los mas importantes que son la descomposicion de cualquier numero en sus factores primos y la simplificacion de expresiones...

Empecemos pues:

Citar
1.   Implemente el mtodo "call:EsPrimo valor" que devuelve true o false en dependiendo de si el valor de la variable a es un nmero primo o no. Intente hacerlo de la manera ms eficiente posible.

Código:
@echo off
REM Comprueba si un Numero es Primo
REM Coded by :: SmartGenius ::
color 0a
if ["%1"]==[""] goto :error

:ini
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :cprimo %num%
echo %primo%
goto :eof

:cprimo
set primo=True
set /a lim=%1-1
for /l %%a in (2,1,%lim%) do (call :cprimo2 %%a)
goto:eof
:cprimo2
set /a p=(%num%)%%(%1)
if %p%==0 set primo=False
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit

Citar
2.   Implemente el mtodo "call:PrimoMasCercano valor" Este mtodo debe devolver el nmero primo ms cercano al valor.

Código:
@echo off
color 0a
REM Busca el Numero Primo mas cercano al Valor N
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set n=%1
set /a c=%n%*1
if not %c%==%n% goto :error
call :near %n%
echo %near%
goto :eof

:near
set lim=%1
for /l %%b in (1,1,%lim%) do (
for /f %%c in ('call EsPrimo %%b') do (
if %%c==True set near=%%b
))
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit

Citar
3.   Implemente el mtodo "call:TrminoPrimo valor" Este mtodo debe devolver el n-simo trmino de la sucesin de nmeros primos.

Código:
@echo off
color 0a
REM Busca El N-esimo valor de la Sucesion de Numeros Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set t=%1
set /a c=%t%*1
if not %c%==%t% goto :error
call :ter %t%
echo %ene%
goto :eof

:ter
set lim=%1
set l=1
for /l %%b in (1,1,9999) do (
for /f %%c in ('call EsPrimo %%b') do (
if defined ene goto :eof &goto :eof
if %%c==True call :val %%b
))
goto :eof

:val
if %l%==%lim% set ene=%1
set /a l=%l%+1
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit

Citar
4.   Implemente el mtodo "call:DescomposicinPrimos valor" Este mtodo debe escribir en la consola la descomposicin en nmeros primos del valor.

Código:
@echo off
color 0a
REM Descomposicion en Factores Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
setlocal
:ini
set op=
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :func1 %num%
:fin
echo %op:~1%
endlocal
goto :eof

:func1
set lim=%1
for /f %%z in ('call EsPrimo %lim%') do (if %%z==True set op=*1*%lim% & goto :eof)
for /l %%n in (2,1,%lim%) do (
for /f %%c in ('call EsPrimo %%n') do (
if %%c==True call :func2 %lim% %%n
))
goto :eof

:func2
set val=%1
:func3
set var=%op%
set /a c=%var:~1%
if %c% GEQ %lim% goto :eof
set /a mod=(%val%)%%(%2)
if %mod%==0 set op=%op%*%2& set /a val=(%val%)/(%2)&goto :func3
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit

Citar
5.     Implemente el metodo "call:PowerPrimos cadena" Teniendo una cadena como "2*2*3*3*23" que es la descomposicion de "828" en numeros primos  devolver una cadena que eleve los valores que se repiten. Para este caso el metodo debe devolver "2^2*3^2*23".

Código:
@echo off
color 0a
REM Simplificacion de Cadenas
REM Coded by :: SmartGenius ::
setlocal enabledelayedexpansion
if ["%1"]==[""] goto :error
:init
set cadena=%1
call :string %cadena%
:func
for /l %%f in (1,1,%l%) do (call :func2 %%f)
for /l %%g in (1,1,%l%) do (call :func3 %%g)
goto :next
:func2
set lim=%1
for /f "tokens=%lim% delims=*" %%k in ("%cadena%") do (call :add %%k)
goto :eof
:func3
set lim=%1
for /f "tokens=%lim% delims=*" %%j in ("%cadena%") do (call :var %%j)
goto:eof
:next
set oper=%oper:l1=%
set oper=%oper:l=^^^^%
echo %oper:~1%
goto :eof

:var
set t1=%1
if not defined t%t1% call :var2 %t1%
goto:eof
:var2
call set var=!p%1!l!n%1!
set t%1=%1
set oper=%oper%*%var%
goto :eof

:add
set /a n%1+=1
set p%1=%1
goto:eof

:string
set texto=%1
:string2
if not "%texto:~0,1%"=="" (set /a l=%l%+1)
set texto=%texto:~1%
if "%texto%"=="" goto :eof
goto :string2

Todos estos codigos los podemos usar desde la consola...


o desde un codigo principal

Código:
@echo off
mode con cols=40 lines=20
title Algoritmo de Numeros Primos
color 0a
REM Calculo de Funciones y Algoritmos con Numeros Primos
REM Matematicas Euclidianas
REM Coded by :: SmartGenius ::

:main
set opc=
cls
echo.
echo   Bienvenido al Programa
echo.
echo  Escoja un Opcion      [X] Salir
echo.
echo 1. Comprobar si un Numero es Primo
echo 2. Primo mas cercano de un Numero (N)
echo 3. Obtener el N-esimo termino Primo
echo 4. Descomponer un Numero
echo 5. Mostrar Descomposicion Recursiva
echo.
set /p opc="Opcion >> "
if not defined opc goto main
if /i %opc%==x exit
if %opc%==5 call :func5
if %opc% GTR 5 goto main
set /p number="Introduzca el Dato : "
if not defined number goto main
set /a b=%number%*1
if not %b%==%number% goto :error
if %opc%==1 call :func1 %number%
if %opc%==2 call :func2 %number%
if %opc%==3 call :func3 %number%
if %opc%==4 call :func4 %number%
pause
goto :main

:func1
set esprimo=NO
set valor=%1
for /f %%c in ('call EsPrimo %valor%') do (
if %%c==True set esprimo=SI
)
echo ^> %valor% %esprimo% es un Numero Primo
pause
goto :main

:func2
set valor=%1
for /f %%d in ('call PrimoMasCercano %valor%') do (set next=%%d)
echo ^> Primo mas cercano de %valor% es %next%
pause
goto :main

:func3
set valor=%1
for /f %%e in ('call TerminoPrimo %valor%') do (set termino=%%e)
echo El %valor% Numero de la Sucesion de
echo Numeros Primos corresponde a %termino%
pause
goto :main

:func4
set nmb=%1
for /f %%u in ('call DescomposicionPrimos %nmb%') do (set desc=%%u)
echo Descomposicion de %nmb% = %desc%
pause
goto :main

:func5
set /p txt="Introduzca la cadena > "
if not defined txt goto :func5
call PowerPrimos %txt%
pause
goto :main

:error
echo No ha introducido un Valor Numerico
pause
goto :main

Espero le sea de gran utilidad... :xD

Saludos.
20  Programacin / Scripting / [Batch] Generador de Diccionario en: 16 Noviembre 2008, 00:49 am
Este script lo que hace es generar un archivo de texto plano con todas las posibles combinaciones de letras del abecedario segun la longitud de pass que se haya especificado, para ello se usa la polimetria y una caracteristica del FOR que permite pasarse parametros entre si...

Veamos...

Código:
 @echo off
title BruteForce Attack
REM Coded by :: SmartGenius ::
color 0a

setlocal enabledelayedexpansion
:ini
if exist dic.txt del /f /q dic.txt
cls
echo.
set /p long="Longitud de Pass >:"
if not defined long goto ini
echo  Generando...
echo  Por favor Espere.
set c=0

:main
for %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%b in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%c in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%d in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%e in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%f in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%g in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%h in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%i in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%j in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%k in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%l in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%m in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%n in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%o in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%p in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%q in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%r in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%s in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%t in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%u in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%v in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%w in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%x in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%y in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
for %%z in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
call :comp %%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%%k%%l%%m%%n%%o%%p%%q%%r%%s%%t%%u%%v%%w%%x%%y%%z
)
set c=1
)
set c=2
)
set c=3
)
set c=4
)
set c=5
)
set c=6
)
set c=7
)
set c=8
)
set c=9
)
set c=10
)
set c=11
)
set c=12
)
set c=13
)
set c=14
)
set c=15
)
set c=16
)
set c=17
)
set c=18
)
set c=19
)
set c=20
)
set c=21
)
set c=22
)
set c=23
)
set c=24
)
set c=25
)
goto :fin

:comp
set word=%*
set dic=!word:~-%long%!
echo %dic% >>dic.txt
if %c%==%long% goto :fin
goto :eof

:fin
echo  Finalizado...OK.
pause
exit

Si especificamos una lontigud de Pass de 4, el codigo nos generara un archivo de texto con todas las combinaciones desde AAAA hasta ZZZZ, luego esto seria uril para usarlo como diccionario para algun programa de ataque por fuerza bruta...de los tantos que hay en internet.

Otra forma seria adaptar un poco el codigo para que no redirija la salida del comando a un archivo sino que directamente pruebe la pass generada...esto para los crackmes que se han hecho en BATCH  :xD

No solo puede ser el abecedario, tambien pueden agregarse los numeros y algunos simbolos que no causan problemas en batch como $ ! # " etc....

Mientras mas larga sea la longitud de la pass mas tiempo tomara en crear el diccionario, pero el trabajo es impecable generando todas las miles de posibles combinaciones...

Espero sea de gran utilidad... =D

Saludos.

PD: Greets to carlitos.java
Páginas: 1 [2] 3 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines