Advertisement
Guest User

Untitled

a guest
Apr 9th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.94 KB | None | 0 0
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title <b style="color:#E89512">2048</b> - By Flammrock
  4.  
  5.  
  6. :reset
  7. call :setData
  8. :main_loop
  9. cls
  10. call :spawn_random
  11. if "%errorlevel%"=="1" goto :game_over
  12. echo;Move with Z, Q, S and D
  13. call :draw
  14. choice /C ZQSD /N
  15. if "%errorlevel%"=="1" call :move up
  16. if "%errorlevel%"=="2" call :move left
  17. if "%errorlevel%"=="3" call :move down
  18. if "%errorlevel%"=="4" call :move right
  19. goto :main_loop
  20. :game_over
  21. cls
  22. echo;GAME OVER^^!
  23. pause>nul
  24. goto :reset
  25.  
  26.  
  27.  
  28. :setData
  29. set round=0
  30. for /l %%y in (1,1,4) do (
  31.   for /l %%x in (1,1,4) do (
  32.     set data[%%x][%%y]=
  33.   )
  34. )
  35. exit /b
  36.  
  37.  
  38. :spawn_random
  39. set /a round+=1
  40. set r=
  41. set n=0
  42. for /l %%y in (1,1,4) do (
  43.   for /l %%x in (1,1,4) do (
  44.     if "!data[%%x][%%y]!"=="" (
  45.       set r=!r! "%%x:%%y"
  46.      set /a n+=1
  47.    )
  48.   )
  49. )
  50. if "!n!"=="0" exit /b 1
  51. set /a rand=!random! %% !n!
  52. set u=0
  53. for %%i in (!r!) do (
  54.   if "!u!"=="!rand!" (
  55.     for /f "tokens=1,2 delims=:" %%1 in ('echo;%%~i') do (
  56.      if !round! gtr 4 (
  57.        set /a rand2=!random! %% 2
  58.       if "!rand2!"=="1" (
  59.         set data[%%1][%%2]=4
  60.       ) else (
  61.         set data[%%1][%%2]=2
  62.       )
  63.      ) else (
  64.        set data[%%1][%%2]=2
  65.      )
  66.    )
  67.   )
  68.   set /a u+=1
  69. )
  70. exit /b 0
  71.  
  72.  
  73. :move
  74. for /l %%y in (1,1,4) do (
  75.   for /l %%x in (1,1,4) do (
  76.     set temp_data[%%x][%%y]=0
  77.   )
  78. )
  79. 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 (
  80.   for /l %%y in (%%1) do (
  81.     for /l %%x in (%%2) do (
  82.      if not "!data[%%x][%%y]!"=="" (
  83.       set a=0
  84.        if "%~1"=="up" (
  85.          set /a m=%%y-1
  86.       ) else if "%~1"=="down" (
  87.         set /a m=%%y+1
  88.       ) else if "%~1"=="left" (
  89.         set a=1
  90.         set /a m=%%x-1
  91.       ) else if "%~1"=="right" (
  92.         set a=1
  93.         set /a m=%%x+1
  94.       )
  95.        if !m! geq 1 if !m! leq 4 (
  96.         for %%m in (!m!) do (
  97.          if "!a!"=="0" (
  98.             if "!data[%%x][%%m]!"=="" (
  99.              set data[%%x][%%m]=!data[%%x][%%y]!
  100.              set "data[%%x][%%y]="
  101.            ) else if not "!temp_data[%%x][%%m]!"=="1" if not "!temp_data[%%x][%%y]!"=="1" if "!data[%%x][%%m]!"=="!data[%%x][%%y]!" (
  102.             set /a data[%%x][%%m]+=!data[%%x][%%y]!
  103.              set "data[%%x][%%y]="
  104.             set temp_data[%%x][%%m]=1
  105.             set temp_data[%%x][%%y]=1
  106.             )
  107.          ) else (
  108.            if "!data[%%m][%%y]!"=="" (
  109.              set data[%%m][%%y]=!data[%%x][%%y]!
  110.              set "data[%%x][%%y]="
  111.            ) else if not "!temp_data[%%m][%%y]!"=="1" if not "!temp_data[%%x][%%y]!"=="1" if "!data[%%m][%%y]!"=="!data[%%x][%%y]!" (
  112.             set /a data[%%m][%%y]+=!data[%%x][%%y]!
  113.              set "data[%%x][%%y]="
  114.             set temp_data[%%m][%%y]=1
  115.             set temp_data[%%x][%%y]=1
  116.             )
  117.          )
  118.         )
  119.       )
  120.      )
  121.     )
  122.   )
  123. )
  124. exit /b
  125.  
  126.  
  127. :draw
  128. rem echo;,--------,
  129. rem echo;|        |
  130. rem echo;|  <b style="color:#E89512">2048</b>  |
  131. rem echo;|        |
  132. rem echo;,--------,
  133. for /l %%y in (1,1,4) do (
  134.   for /l %%i in (1,1,4) do set line[%%i]=
  135.   for /l %%x in (1,1,4) do (
  136.     call :String.Length "!data[%%x][%%y]!" len
  137.     set /a spclen=8 - !len!
  138.     set /a pair=1 - !len! %% 2
  139.     if "!pair!"=="0" set /a pair=3 - !len! %% 2
  140.     set spc=
  141.     set spc2=
  142.     for /l %%i in (1,2,!spclen!) do set "spc=!spc! "
  143.     for /l %%i in (!pair!,2,!spclen!) do set "spc2=!spc2! "
  144.     set line[1]=!line[1]!--------,
  145.     set "line[2]=!line[2]!        |"
  146.     set "line[3]=!line[3]!!spc!!data[%%x][%%y]!!spc2!|"
  147.     set "line[4]=!line[4]!        |"
  148.   )
  149.   if "%%y"=="1" echo;,!line[1]!
  150.   for /l %%i in (2,1,4) do echo;^|!line[%%i]!
  151.   echo;,!line[1]!
  152. )
  153. exit /b
  154.  
  155.  
  156. :String.Length
  157. set "stmp=%~1#"
  158. set "len=0"
  159. for %%P in (4096 <b style="color:#E89512">2048</b> 1024 512 256 128 64 32 16 8 4 2 1) do (
  160.   if "!stmp:~%%P,1!" NEQ "" (
  161.     set /a "len+=%%P"
  162.     set "stmp=!stmp:~%%P!"
  163.   )
  164. )
  165. set "%~2=!len!"
  166. exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement