Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- setlocal enabledelayedexpansion
- title <b style="color:#E89512">2048</b> - By Flammrock
- :reset
- call :setData
- :main_loop
- cls
- call :spawn_random
- if "%errorlevel%"=="1" goto :game_over
- echo;Move with Z, Q, S and D
- call :draw
- choice /C ZQSD /N
- if "%errorlevel%"=="1" call :move up
- if "%errorlevel%"=="2" call :move left
- if "%errorlevel%"=="3" call :move down
- if "%errorlevel%"=="4" call :move right
- goto :main_loop
- :game_over
- cls
- echo;GAME OVER^^!
- pause>nul
- goto :reset
- :setData
- set round=0
- for /l %%y in (1,1,4) do (
- for /l %%x in (1,1,4) do (
- set data[%%x][%%y]=
- )
- )
- exit /b
- :spawn_random
- set /a round+=1
- set r=
- set n=0
- for /l %%y in (1,1,4) do (
- for /l %%x in (1,1,4) do (
- if "!data[%%x][%%y]!"=="" (
- set r=!r! "%%x:%%y"
- set /a n+=1
- )
- )
- )
- if "!n!"=="0" exit /b 1
- set /a rand=!random! %% !n!
- set u=0
- for %%i in (!r!) do (
- if "!u!"=="!rand!" (
- for /f "tokens=1,2 delims=:" %%1 in ('echo;%%~i') do (
- if !round! gtr 4 (
- set /a rand2=!random! %% 2
- if "!rand2!"=="1" (
- set data[%%1][%%2]=4
- ) else (
- set data[%%1][%%2]=2
- )
- ) else (
- set data[%%1][%%2]=2
- )
- )
- )
- set /a u+=1
- )
- exit /b 0
- :move
- for /l %%y in (1,1,4) do (
- for /l %%x in (1,1,4) do (
- set temp_data[%%x][%%y]=0
- )
- )
- for %%i in ("1,1,4:1,1,4" "4,-1,1:1,1,4" "1,1,4:4,-1,1") do for /f "tokens=1,2 delims=:" %%1 in ('echo;%%~i') do (
- for /l %%y in (%%1) do (
- for /l %%x in (%%2) do (
- if not "!data[%%x][%%y]!"=="" (
- set a=0
- if "%~1"=="up" (
- set /a m=%%y-1
- ) else if "%~1"=="down" (
- set /a m=%%y+1
- ) else if "%~1"=="left" (
- set a=1
- set /a m=%%x-1
- ) else if "%~1"=="right" (
- set a=1
- set /a m=%%x+1
- )
- if !m! geq 1 if !m! leq 4 (
- for %%m in (!m!) do (
- if "!a!"=="0" (
- if "!data[%%x][%%m]!"=="" (
- set data[%%x][%%m]=!data[%%x][%%y]!
- set "data[%%x][%%y]="
- ) else if not "!temp_data[%%x][%%m]!"=="1" if not "!temp_data[%%x][%%y]!"=="1" if "!data[%%x][%%m]!"=="!data[%%x][%%y]!" (
- set /a data[%%x][%%m]+=!data[%%x][%%y]!
- set "data[%%x][%%y]="
- set temp_data[%%x][%%m]=1
- set temp_data[%%x][%%y]=1
- )
- ) else (
- if "!data[%%m][%%y]!"=="" (
- set data[%%m][%%y]=!data[%%x][%%y]!
- set "data[%%x][%%y]="
- ) else if not "!temp_data[%%m][%%y]!"=="1" if not "!temp_data[%%x][%%y]!"=="1" if "!data[%%m][%%y]!"=="!data[%%x][%%y]!" (
- set /a data[%%m][%%y]+=!data[%%x][%%y]!
- set "data[%%x][%%y]="
- set temp_data[%%m][%%y]=1
- set temp_data[%%x][%%y]=1
- )
- )
- )
- )
- )
- )
- )
- )
- exit /b
- :draw
- rem echo;,--------,
- rem echo;| |
- rem echo;| <b style="color:#E89512">2048</b> |
- rem echo;| |
- rem echo;,--------,
- for /l %%y in (1,1,4) do (
- for /l %%i in (1,1,4) do set line[%%i]=
- for /l %%x in (1,1,4) do (
- call :String.Length "!data[%%x][%%y]!" len
- set /a spclen=8 - !len!
- set /a pair=1 - !len! %% 2
- if "!pair!"=="0" set /a pair=3 - !len! %% 2
- set spc=
- set spc2=
- for /l %%i in (1,2,!spclen!) do set "spc=!spc! "
- for /l %%i in (!pair!,2,!spclen!) do set "spc2=!spc2! "
- set line[1]=!line[1]!--------,
- set "line[2]=!line[2]! |"
- set "line[3]=!line[3]!!spc!!data[%%x][%%y]!!spc2!|"
- set "line[4]=!line[4]! |"
- )
- if "%%y"=="1" echo;,!line[1]!
- for /l %%i in (2,1,4) do echo;^|!line[%%i]!
- echo;,!line[1]!
- )
- exit /b
- :String.Length
- set "stmp=%~1#"
- set "len=0"
- for %%P in (4096 <b style="color:#E89512">2048</b> 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!stmp:~%%P,1!" NEQ "" (
- set /a "len+=%%P"
- set "stmp=!stmp:~%%P!"
- )
- )
- set "%~2=!len!"
- exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement