Advertisement
IcarusLives

Bouncing name animation

Mar 7th, 2017
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.47 KB | None | 0 0
  1. @echo off & setlocal enableDelayedExpansion
  2.  
  3. call :canvas 50 40
  4.  
  5. set "balls=6"
  6. for /l %%a in (1,1,%balls%) do (
  7.     set /a "di[%%a]=!random! %% 3 + 1", "dj[%%a]=!random! %% 2 + 1"
  8.     set /a "dr[%%a]=!random! %% 4 + 1", "ds[%%a]=!random! %% 2"
  9.     set /a "dw[%%a]=width - dr[%%a] - 1", "dh[%%a]=height - dr[%%a] - 1"
  10.     set /a "ds[%%a]=!random! %% 1"
  11. )
  12.  
  13. for %%a in (I C A R U S) do set /a "c+=1" & set "dc[!c!]=%%a"
  14. set /a "dx[0]=23", "dy[0]=20", "dx[1]=24", "dy[1]=20", "dx[2]=25", "dy[2]=20", "dx[3]=26", "dy[3]=20", "dx[4]=27", "dy[4]=20", "dx[5]=28", "dy[5]=20"
  15. call :print 23 20 "ICARUS"
  16. call :showCanvas
  17. timeout /t 2 /nobreak > nul
  18.  
  19. :loop
  20.     for /l %%a in (1,1,%balls%) do (
  21.        
  22.         set /a "dx[%%a]+=di[%%a] + ds[%%a]"
  23.         set /a "dy[%%a]+=dj[%%a] + ds[%%a]"
  24.    
  25.         if !dx[%%a]! gtr !dw[%%a]! set /A "dx[%%a]=dw[%%a]", "di[%%a]*=-1"    
  26.         if !dx[%%a]! lss !dr[%%a]! set /A "dx[%%a]=dr[%%a]", "di[%%a]*=-1"    
  27.         if !dy[%%a]! gtr !dh[%%a]! set /A "dy[%%a]=dh[%%a]", "dj[%%a]*=-1"    
  28.         if !dy[%%a]! lss !dr[%%a]! set /A "dy[%%a]=dr[%%a]", "dj[%%a]*=-1"
  29.        
  30.         call :plot !dx[%%a]! !dy[%%a]! !dc[%%a]!
  31.        REM call :ellipse !dx[%%a]! !dy[%%a]! !dr[%%a]!
  32.     )
  33.         call :showCanvas
  34.         call :updateCanvas
  35. if !l! neq 4000 ( set /a "l+=1" & goto :loop ) else exit /b
  36. rem ---------------------------------------------------------------------------------------
  37.  
  38. dx = Ball X position
  39. dy = Ball Y position
  40. di = Ball X direction
  41. dj = Ball Y direction
  42. dr = Ball Radius
  43. ds = Ball Speed
  44. dw = Ball max width  boundry
  45. dh = Ball max height boundry
  46. dc = Ball character
  47.  
  48.  
  49. rem All functions below this line.
  50. rem ---------------------------------------------------------------------------------------
  51. :canvas
  52.         set /a "width=%~1 - 1", "height=%~2 - 1", "_=-1", "conWidth=width + 4", "conHeight=height + 5"
  53.         if exist cursorpos.exe ( set "cls=cursorpos 0 0" ) else ( set "cls=cls" )
  54.         for /l %%a in (-2,1,%width%) do set "outerBuffer=!outerBuffer!#"
  55.         for /l %%a in (0,1,%width%)  do set "widthBuffer=!widthBuffer! "
  56.         call :updateCanvas
  57.         mode con: cols=%conWidth% lines=%conHeight%
  58.     goto :eof
  59.    
  60.     :updateCanvas
  61.         set "_=-1"
  62.         for /l %%a in (0,1,%height%) do set /a "_+=1" & set "_[!_!]=%widthBuffer%"
  63.         set "_="
  64.     goto :eof
  65.    
  66.     :showCanvas
  67.         %cls%
  68.         echo=%outerBuffer%
  69.         for /l %%a in (0,1,%height%) do echo=#!_[%%a]!#
  70.         echo=%outerBuffer%
  71.     goto :eof
  72. goto :eof
  73.  
  74. :plot x y
  75.     setlocal
  76.         set /a "_x2=%~1 + 1"
  77.         (endlocal
  78.             set "_[%~2]=!_[%~2]:~0,%~1!%~3!_[%~2]:~%_x2%!"
  79.         )
  80. goto :eof
  81.  
  82. :ellipse x y r
  83.     for /l %%y in (-%~3,1,%~3) do for /l %%x in (-%~3,1,%~3) do (
  84.        
  85.         set /a "t=-%~3 - 1", "S=(%%x * %%x) + (%%y * %%y) - (%~3 * %~3) + t + %~3"
  86.         if !S! geq !t! if !S! leq 1 ( set /a "x=%%x + %~1", "y=%%y + %~2" & call :plot !x! !y! ".")
  87.        
  88.     )
  89. goto :eof
  90.  
  91. :print x y
  92.     setlocal
  93.         call :length "%~3" _x2
  94.         set /a "_x2+=%~1"
  95.         (endlocal
  96.             set "_[%~2]=!_[%~2]:~0,%~1!%~3!_[%~2]:~%_x2%!"
  97.         )
  98. goto :eof
  99.  
  100. :length
  101.     setlocal
  102.         set "str=X%~1"
  103.         set length=0
  104.         for /L %%a in (8,-1,0) do (
  105.             set /a "length|=1<<%%a"
  106.             for %%b in (!length!) do if "!str:~%%b,1!" equ "" set /a "length&=~1<<%%a"
  107.         )
  108.     (endlocal
  109.         if "%~2" neq "" ( set "%2=%length%" ) else echo %length%
  110.     )
  111. goto :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement