Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off & setlocal enableDelayedExpansion
- %multithread_dispatcher%
- if not exist %temp%\Canvas_3.txt call :map
- call :updateCanvas /f 3
- set /a "x=19", "y=21", "m=5"
- for /l %%a in (1,1,%m%) do set /a "m%%a=18 - %%a - 1", "n%%a=20 - %%a - 1"
- call :multiThread GAME_ENGINE "wasd"
- goto :eof
- :GAME_ENGINE
- ( for /l %%# in () do ( set /a "frame+=1"
- :: User Controller
- %Controller% & %move% w a s d x y .
- :: NPC Controller
- for /l %%a in (1,1,%m%) do (
- set /a "com=!random! %% 4" & %move% 3 2 1 0 m%%a n%%a %%a )
- call:adjustCamera x y
- call:showCanvas !x! !y! @
- call:updateCanvas /v 3
- ) )
- exit
- :checkSpace
- set /a "_x=%~1", "_y=%~2"
- if "!_[%_y%]:~%_x%,1!" equ "л" ( exit /b 1
- ) else if "!_[%_y%]:~%_x%,1!" equ "M" ( exit /b 1
- ) else if "!_[%_y%]:~%_x%,1!" equ "D" ( set /a "x=!random! %% (width-10) + 10", "y=!random! %% (height-10) + 10"
- ) else if "!_[%_y%]:~%_x%,1!" equ "T" ( exit /b 1
- )
- exit /b 0
- :canvas
- set ^"LF=^
- ^" Above empty line is required - do not remove
- set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
- call:macros
- call:cursorpos 2>nul
- if "%~2" neq "" ( set /a "width=%~1 - 1", "height=%~2 - 1" ) else ( goto :eof )
- if "%~3" neq "" ( set "canvasChar=%~3" ) else ( set "canvasChar=#" )
- if "%~4" neq "" ( set "title=%~4" ) else ( set "title=CANVAS" )
- if "%~7" neq "" ( if /i "%~5" equ "/c" (
- set "CAM=/c"
- set /a "CAM_Y=0", "CAM_X=0", "maxX=%~6", "winMaxY=%~7","cols=maxX + 5", "rows=winMaxY + 8"
- if not defined outerBuffer ( for /l %%a in (-1,1,!maxX!) do (
- set "outerBuffer=!outerBuffer!%canvasChar%") )
- if !maxX! geq %width% set /a "maxX=width"
- if !winMaxY! geq %height% set /a "winMaxY=height"
- )
- ) else (
- set /a "cols=width + 5", "rows=height + 8"
- if not defined outerBuffer ( for /l %%a in (-2,1,%width%) do (
- set "outerBuffer=!outerBuffer!%canvasChar%") )
- )
- if not defined Controller ( set "Controller=set "com="^^& set /p "com="" )
- if not defined multithread_dispatcher ( set "multithread_dispatcher=if "%%~1" neq "" call :%%~1 "%%~2"" )
- for /l %%a in (0,1,%width%) do set "widthBuffer=!widthBuffer! "
- call:updateCanvas
- if exist "%temp%\cursorpos.exe" (
- set "cls="%temp%\cursorpos.exe" 0 1" ) else ( set "cls=cls" )
- mode con: cols=%cols% lines=%rows%
- title %title%
- goto :eof
- :saveCanvas
- if "%~2" neq "" ( if /i "%~1" equ "/f" (
- if exist "%tmp%\Canvas_%~2.txt" ( del /f /q "%tmp%\Canvas_%~2.txt" 2>nul )
- for /l %%a in (0,1,%height%) do ( echo="!_[%%a]!">>"%tmp%\Canvas_%~2.txt")
- <nul set /p ".=:: "%width%+1" "%height%+1" "%canvasChar%" "%title%" "%CAM%" "%maxX%" "%winMaxY%" ">>"%tmp%\Canvas_%~2.txt"
- ) else if /i "%~1" equ "/v" ( for /l %%a in (0,1,%height%) do ( set "tmp_%~2_[%%a]=!_[%%a]!")
- ) else if /i "%~1" equ "/d" ( if exist "%tmp%\Canvas_%~2.txt" ( del /f /q "%tmp%\Canvas_%~2.txt" 2>nul ) ) )
- :updateCanvas
- if "%~2" neq "" ( if /i "%~1" equ "/f" ( if exist "%tmp%\Canvas_%~2.txt" (
- set "_=-1"
- for /f "tokens=*" %%a in (%tmp%\Canvas_%~2.txt) do (
- set /a "_+=1" & set "tmp_%~2_[!_!]=%%~a"
- call set "expanded_=%%tmp_%~2_[!_!]%%"
- if "!expanded_:~0,2!" equ "::" call:canvas !expanded_:~3!
- )
- call:updateCanvas /v %~2
- )
- ) else if /i "%~1" equ "/v" ( for /l %%a in (0,1,%height%) do ( set "_[%%a]=!tmp_%~2_[%%a]!" ) )
- ) else ( for /l %%a in (0,1,%height%) do ( set "_[%%a]=%widthBuffer%" ) )
- goto :eof
- :showCanvas
- %cls%
- echo= %outerBuffer%
- if /i "%CAM%" neq "/c" (
- for /l %%a in (0,1,%height%) do ( echo= %canvasChar:~0,1%!_[%%a]!%canvasChar:~0,1%)
- ) else if "%~3" neq "" (
- set /a "maxY=CAM_Y + winMaxY", "_line=%~1 + 1" & if !maxY! gtr %height% set /a "maxY=height"
- for /l %%a in (!CAM_Y!,1,!maxY!) do (
- set "line=!_[%%a]!"
- if "%%a" equ "%~2" call set "line=!line:~0,%~1!%~3%%line:~!_line!%%"
- echo= !canvasChar:~0,1!!line:~%CAM_X%,%maxX%!!canvasChar:~0,1!
- )
- ) else echo Missing Parameters
- echo= %outerBuffer%
- goto :eof
- :adjustCamera
- set /a "CAM_X=%~1 - (maxX / 2)", "CAM_Y=%~2 - (winMaxY / 2)"
- if %CAM_X% leq 0 set CAM_X=0
- if %CAM_Y% leq 0 set CAM_Y=0
- goto :eof
- :multiThread
- if exist "%temp%\%~n0_signal.txt" del "%temp%\%~n0_signal.txt"
- "%~F0" Controller %~2 >"%temp%\%!!|%~F0" %1 <"%temp%\%~n0_signal.txt"
- goto :eof
- :Controller
- ( for /l %%# in () do ( for /f "tokens=*" %%a in ('choice /c:%~1 /n') do ( <nul set /p ".=%%a" ) ) )
- goto :eof
- :macros
- :: Canvas Macros -------------------------------------------------------------------
- set plot=for %%# in (1 2) do if %%#==2 ( for /f "tokens=1-3" %%1 in ("^!args^!") do (%\n%
- set /a "_y=%%2", "_x=%%1", "_x2=%%1 + 1"%\n%
- for /f "tokens=1-4" %%a in ("_y ^!_y^! ^!_x^! ^!_x2^!") do set "_[^!%%a^!]=^!_[%%b]:~0,%%c^!%%3^!_[%%b]:~%%d^!"%\n%
- )) else set args=
- :: End Canvas Macros ---------------------------------------------------------------
- :: Engine Macros -------------------------------------------------------------------
- set move=for %%# in (1 2) do if %%#==2 ( for /f "tokens=1-7" %%1 in ("^!args^!") do (%\n%
- if /i "^!com^!" equ "%%1" ( call :checkSpace %%5 %%6-1 ^&^& set /a "%%6-=1"%\n%
- ) else if /i "^!com^!" equ "%%2" ( call :checkSpace %%5-1 %%6 ^&^& set /a "%%5-=1"%\n%
- ) else if /i "^!com^!" equ "%%3" ( call :checkSpace %%5 %%6+1 ^&^& set /a "%%6+=1"%\n%
- ) else if /i "^!com^!" equ "%%4" ( call :checkSpace %%5+1 %%6 ^&^& set /a "%%5+=1")%\n%
- if "%%7" neq "" ( ^!plot^! %%5 %%6 %%7 )%\n%
- )) else set args=
- :: End Engine Macros ---------------------------------------------------------------
- goto :eof
- :map
- for %%a in ("лллллллллллллллллллллллллллллллллллллллллллллллллл"
- "лллллллллллллллллллллллллллллллллллллллллллллллл л"
- "лллллллллллллллллллллллллллллллллллллллллллллллл л"
- "ллллл T ллл ллллллллллллллллл л"
- "ллллл ллллллллл лллллллллллллл л"
- "ллллл лллллллл ллллллллл ллллллллллллл л"
- "ллллл лллллл лл лл ллллллллллл л"
- "ллллл л л лллллллллл л"
- "ллллллллл л л лллллллл л"
- "лллллллл л л ллллллл л"
- "лллллллл л л ллллллл л"
- "ллллллл л л лллллл л"
- "лллллл л л ллллл л"
- "лллллл л л ллллл л"
- "ллллл лллл л"
- "лллл л ллллллл л ллл л"
- "лллл лл лл ллл л"
- "лллл л л л л ллл л"
- "ллл л л л л лл л"
- "ллл л л лллл"
- "ллл л л ллллл л л лллл"
- "ллл л л лллDллл л л лллл"
- "ллл л л лллл ллл л л лллл"
- "ллл л л лллл лллл л лллл"
- "ллл л л лллл л лллл"
- "ллл л л ллллллллл л лллл"
- "ллл л л ллллллллл л л лллл"
- "ллл л л ллллллл л л лллл"
- "ллл л л ллллл л л лллл"
- "ллл л л лллл"
- "ллл л л л л лл л"
- "лллл л л л л ллл л"
- "лллл лл лл ллл л"
- "лллл л ллллллл л ллл л"
- "ллллл лллл л"
- "лллллл л л ллллл л"
- "лллллл л л ллллл л"
- "ллллллл л л лллллл л"
- "лллллллл л л ллллллл л"
- "лллллллл л л ллллллл л"
- "ллллллллл л л лллллллл л"
- "ллллллллллл л л лллллллллл л"
- "лллллллллллл лл лл ллллллллллл л"
- "лллллллллллллл ллллллллл ллллллллллллл л"
- "ллллллллллллллл лллллллллллллл л"
- "лллллллллллллллллл ллллллллллллллллл л"
- "лллллллллллллллллллллллллллллллллллллллллллллллл л"
- "лллллллллллллллллллллллллллллллллллллллллллллллл л"
- "л ллллллллллл л"
- "лллллллллллллллллллллллллллллллллллллллллллллллллл"
- ":: "49+1" "49+1" "#" "Game" "/c" "40" "40" "
- ) do echo %%~a>>%temp%\Canvas_3.txt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement