[Batch Game] Snake

Iniciado por modubat, 26 Agosto 2010, 17:29 PM

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

modubat

Esta es mi versión del famoso juego snake :P

wasd para el movimiento

p para hacer una pausa

x para salir

Código (dos) [Seleccionar]

:: [Batch Game] Snake

:: by modubat

@echo off
setlocal enableextensions enabledelayedexpansion
mode con cols=25 lines=14
title Snake
set "filas=9" & set "columnas=17"
set "print=Û" & set "jugador=" & set "fondo= "
set "coordenadas=" & set "personaje=;01X01Y" & set "punto=;09X05Y"
set "puntos=-1"
set "opcion=D"
call :puntos "%filas%" "%columnas%" "%coordenadas%" "%personaje%"

:Ini
more/c <nul
set "coordenadas=%coordenadas%%personaje%"
if "%personaje%"=="%punto%" ( call :puntos "%filas%" "%columnas%" "%coordenadas%" "%personaje%" ) else (
call :eliminar "!coordenadas!"
)
call :coordenates "%filas%" "%columnas%" "%coordenadas%" "%fondo%" "%print%" "%personaje%" "%jugador%" "%punto%"
call :set_pers "%personaje%"
choice /c DASWPX /n /t 1 /d %opcion% >nul
if "%errorlevel%" equ "5" set "opcion=%opcion%" & pause>nul
if "%errorlevel%" equ "6" goto :lost
set "token=%errorlevel%"
for /f "tokens=%token% delims=$" %%a in ("D$A$S$W") do set "opcion=%%a"
for /f "tokens=%token% delims=$" %%b in ("right$left$down$up") do (
call :Move %%b "!Cord_x!" "!Cord_y!" "!filas!" "!columnas!")
if "%errorlevel%" equ "1" goto :lost
if "%errorlevel%" equ "0" call:col "%coordenadas%" "%personaje%" "%rangX%" "%rangY%"
if "%errorlevel%" equ "1" goto :lost
if "%errorlevel%" equ "0" set "personaje=;%rangX%X%rangY%Y"
goto :Ini

:coordenates filas columnas coordenadas fondo print personaje
setlocal enableextensions enabledelayedexpansion
for %%X in ("%~1" "%~2" "%~3" "%~4" "%~5") do if /i "%%~X"=="" exit /b 1
for /l %%i in (1 1 %~2) do (
for /l %%j in (1 1 %~1) do (
if not %%i LSS 10 (set var_x=%%i) else (set var_x=0%%i)
if not %%j LSS 10 (set var_y=%%j) else (set var_y=0%%j)
set "!var_x!X!var_y!Y=%~4"
))
for %%f in (%~3) do set "%%f=%~5"
for %%g in (%~6) do set "%%g=%~7"
for %%h in (%~8) do set "%%h=Ï"
for /l %%a in (1 1 %~1) do (
if not %%a LSS 10 (set find_y=%%a) else (set find_y=0%%a)
for /f "Tokens=2 delims==" %%b in ('set ^| find "!find_y!Y" ^| find /v ";" ^| sort') do (
set "fila%%a=!fila%%a!%%b"))
echo.  ±±±±±±±±±±±±±±±±±±±
for /l %%z in (%~1 -1 1) do (echo.  ±!fila%%z!±)
echo.  ±±±±±±±±±±±±±±±±±±±
echo.
endlocal & exit/b

:set_pers
for /f "tokens=1,2 delims=;XY" %%a in ("%~1") do (
set Cord_x=%%~a
set Cord_y=%%~b)
goto:eof

:eliminar
for /f "tokens=1* delims=; eol=" %%a in ("%~1") do (
set "%%~a="
set "coordenadas=;%%~b"
)
exit/b

:Move
set "Cord_X=%~2" & set "Cord_Y=%~3"
for %%a in ("Cord_X" "Cord_Y") do if !%%~a! lss 10 set "%%~a=!%%~a:~1!"
if "%1"=="right" set/a "rangX=Cord_X+1,rangY=Cord_Y"
if "%1"=="left" set/a "rangX=Cord_X-1,rangY=Cord_Y"
if "%1"=="down" set/a "rangX=Cord_X,rangY=Cord_Y-1
if "%1"=="up" set/a "rangX=Cord_X,rangY=Cord_Y+1"
if %rangX% GTR %~5 (exit/b 1) else if %rangX% LEQ 0 (exit/b 1)
if %rangY% GTR %~4 (exit/b 1) else if %rangY% LEQ 0 (exit/b 1)
for %%b in ("rangX" "rangY") do if !%%~b! LSS 10 set "%%~b=0!%%~b!"
exit/b 0

:puntos filas columnas coordenadas personaje
set/a Pos_x=%random%%%%~2+1,Pos_y=%random%%%%~1+1
for %%a in ("Pos_X" "Pos_Y") do if !%%~a! LSS 10 set "%%~a=0!%%~a!"
set "punto=%Pos_x%X%Pos_y%Y"
for %%a in (%~3,%~4) do if "%%a"=="!punto!" goto :puntos
set/a puntos+=1
set "punto=;%punto%"
goto:eof

:col
for %%a in (%~1) do for %%b in (;%~3X%~4Y) do if "%%a"=="%%b" exit/b 1
exit/b 0

:lost
more/c <nul
echo GAME OVER!!!
echo.
echo.Puntos:%puntos%
pause>nul
endlocal & exit



saludos