Advertisement
PSN_CR33P

It's a snake batch game

May 2nd, 2019
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.09 KB | None | 0 0
  1. Uhh.............Copy if you want I didn't make it---Just like playing it lol
  2.  
  3. @echo off
  4. title Snaker
  5. color 0a
  6. echo Starting...
  7. timeout /t 15 /nobreak
  8. cls
  9. echo Snaker v.1.0.0.0
  10. echo Welcome. Press any key to start
  11. pause
  12. if "%~1" == "startGame" goto :game
  13. if "%~1" == "startController" goto :controller
  14.  
  15.  
  16.  
  17. set "choice="
  18. 2>nul >nul choice /c:yn /t 0 /d y
  19. if errorlevel 1 if not errorlevel 2 set "choice=choice /cs"
  20. if not defined choice (
  21. 2>nul >nul choice /c:yn /t:y,1
  22. if errorlevel 1 if not errorlevel 2 set "choice=choice /s"
  23. )
  24. if not defined choice (
  25. echo ERROR: This game requires the CHOICE command, but it is missing.
  26. echo Game aborted. :(
  27. echo(
  28. echo A 16 bit port of CHOICE.EXE from FREEDOS is available at
  29. echo http://winsupport.org/utilities/freedos-choice.html
  30. echo(
  31. echo A 32 bit version from ??? suitable for 64 bit machines is available at
  32. echo http://hp.vector.co.jp/authors/VA007219/dkclonesup/choice.html
  33. echo(
  34. exit /b
  35. )
  36.  
  37.  
  38.  
  39.  
  40. set "keys=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  41. set "keyFile=key.txt"
  42. set "cmdFile=cmd.txt"
  43. set "highscoreFile=last score on !difficulty!.txt"
  44.  
  45.  
  46. copy nul "%keyFile%" >nul
  47. start "" /b "%~f0" startController 9^>^>%keyFile% 2^>nul ^>nul
  48. cmd /c "%~f0" startGame 9^<%keyFile% ^<nul
  49. echo(
  50.  
  51.  
  52.  
  53. :close
  54. 2>nul (>>"%keyFile%" call )||goto :close
  55. del "%keyFile%"
  56. exit /b
  57. :;ZemByte
  58.  
  59. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  60. :game
  61. setlocal disableDelayedExpansion
  62. title %~nx0
  63. cls
  64.  
  65.  
  66.  
  67. set "up=W"
  68. set "down=S"
  69. set "left=A"
  70. set "right=D"
  71.  
  72. ::Both max to 99! And width to 40 and height to 25!
  73. set "width=40" max=99
  74. set "height=25" max=99
  75. :: max playing field: (width-2)*(height-2) <= 1365
  76.  
  77.  
  78.  
  79. set /a cols=width+1, lines=height+10, area=(width-2)*(height-2)
  80. if %area% gtr 1365 (
  81. echo ERROR: Playfield area too large
  82. >"%cmdFile%" (echo quit)
  83. exit
  84. )
  85. if %lines% lss 14 set lines=14
  86. if %cols% lss 46 set cols=46
  87. mode con: cols=%cols% lines=%lines%
  88.  
  89.  
  90. set "spinner1=|"
  91. set "spinner2=/"
  92. set "spinner3=-"
  93. set "spinner4=\"
  94. set "spinner5=O"
  95. set "spinner6=$"
  96. set "spinner= spinner1 spinner2 spinner3 spinner4 spinner5 spinner6"
  97.  
  98. set "space= "
  99. set "bound=*"
  100. set "food=+"
  101. set "head=@"
  102. set "body=O"
  103. set "death=X"
  104. set "playerSpace=%space%%food%"
  105.  
  106. set "xDiff%up%=+0"
  107. set "xDiff%down%=+0"
  108. set "xDiff%left%=-1"
  109. set "xDiff%right%=+1"
  110.  
  111. set "yDiff%up%=-1"
  112. set "yDiff%down%=+1"
  113. set "yDiff%left%=+0"
  114. set "yDiff%right%=+0"
  115.  
  116. set "%up%Axis=Y"
  117. set "%down%Axis=Y"
  118. set "%left%Axis=X"
  119. set "%right%Axis=X"
  120.  
  121. set "delay1=20"
  122. set "delay2=16"
  123. set "delay3=12"
  124. set "delay4=7"
  125. set "delay5=5"
  126. set "delay6=3"
  127. set "delay0=0"
  128.  
  129. set "desc1=Mega Slow"
  130. set "desc2=Crawler"
  131. set "desc3=Slow"
  132. set "desc4=Normal"
  133. set "desc5=Fast"
  134. set "desc6=Insane"
  135. set "desc0=Impossible"
  136.  
  137. set "spinnerDelay=3"
  138.  
  139. set /a "width-=1, height-=1"
  140.  
  141.  
  142.  
  143. set LF=^
  144.  
  145.  
  146.  
  147.  
  148.  
  149. set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
  150.  
  151. :: setErr
  152. ::: Sets the ERRORLEVEL to 1
  153. set "setErr=(call)"
  154.  
  155. :: clrErr
  156. ::: Sets the ERRORLEVEL to 0
  157. set "clrErr=(call )"
  158.  
  159.  
  160.  
  161. set getKey=%\n%
  162. for %%# in (1 2) do if %%#==2 (for /f "eol= delims= " %%1 in ("!args!") do (%\n%
  163. set "validKeys=%%1"%\n%
  164. set "key="%\n%
  165. ^<^&9 set /p "key="%\n%
  166. if defined key if "!key!" neq ":" (%\n%
  167. set /a key-=1%\n%
  168. for %%K in (!key!) do set "key=!keys:~%%K,1!"%\n%
  169. )%\n%
  170. for %%K in (!key!) do if "!validKeys:%%K=!" equ "!validKeys!" set "key="%\n%
  171. )) else set args=
  172.  
  173.  
  174.  
  175. set draw=%\n%
  176. cls%\n%
  177. for /l %%Y in (0,1,%height%) do echo(!line%%Y!%\n%
  178. echo Mode=!Difficulty!%\n%
  179. echo Score=!score!
  180.  
  181.  
  182. set test=%\n%
  183. for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  184. for %%A in ("!line%%2:~%%1,1!") do if "!%%3:%%~A=!" neq "!%%3!" %clrErr% else %setErr%%\n%
  185. )) else set args=
  186.  
  187. ::ZemByte
  188.  
  189. set plot=%\n%
  190. for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%
  191. set "part2=!line%%2:~%%1!"%\n%
  192. set "line%%2=!line%%2:~0,%%1!!%%3!!part2:~1!"%\n%
  193. )) else set args=
  194.  
  195.  
  196. ::--------------------------------------
  197. :: start the game
  198. setlocal enableDelayedExpansion
  199. call :initialize
  200.  
  201.  
  202. ::--------------------------------------
  203. :: main loop (infinite loop)
  204. for /l %%. in (1 0 1) do (
  205.  
  206. %=== compute time since last move ===%
  207. for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "t2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, tDiff=t2-t1"
  208. if !tDiff! lss 0 set /a tDiff+=24*60*60*100
  209.  
  210. if !tDiff! geq !delay! (
  211. %=== delay has expired, so time for movement ===%
  212.  
  213. %=== establish direction ===%
  214. %getKey% ASDW
  215. for %%K in (!key!) do if "!%%KAxis!" neq "!axis!" (
  216. set /a "xDiff=xDiff%%K, yDiff=yDiff%%K"
  217. set "axis=!%%KAxis!"
  218. )
  219.  
  220. %=== erase the tail ===%
  221. set "TX=!snakeX:~-2!"
  222. set "TY=!snakeY:~-2!"
  223. set "snakeX=!snakeX:~0,-2!"
  224. set "snakeY=!snakeY:~0,-2!"
  225. %plot% !TX! !TY! space
  226.  
  227. %=== compute new head location and attempt to move ===%
  228. set /a "X=PX+xDiff, Y=PY+yDiff"
  229. set "X= !X!"
  230. set "Y= !Y!"
  231. set "X=!X:~-2!"
  232. set "Y=!Y:~-2!"
  233. (%test% !X! !Y! playerSpace) && (
  234.  
  235. %=== move successful ===%
  236.  
  237. %=== remove the new head location from the empty list ===%
  238. for %%X in ("!X!") do for %%Y in ("!Y!") do set "empty=!empty:#%%~X %%~Y=!"
  239.  
  240. (%test% !X! !Y! food) && (
  241. %=== moving to food - eat it ===%
  242.  
  243. %=== restore the tail ===%
  244. %plot% !TX! !TY! body
  245. set "snakeX=!snakeX!!TX!"
  246. set "snakeY=!snakeY!!TY!"
  247.  
  248. %=== increment score and locate and draw new food ===%
  249. set /a "score+=1, F=(!random!%%(emptyCnt-=1))*6+1"
  250. for %%F in (!F!) do (%plot% !empty:~%%F,5! food)
  251.  
  252.  
  253. ) || (
  254. %=== moving to empty space ===%
  255.  
  256. %=== add the former tail position to the empty list ===%
  257. set "empty=!empty!#!TX! !TY!"
  258. )
  259.  
  260. %=== draw the new head ===%
  261. if defined snakeX (%plot% !PX! !PY! body)
  262. %plot% !X! !Y! head
  263.  
  264. %=== Add the new head position to the snake strings ===%
  265. set "snakeX=!X!!snakeX!"
  266. set "snakeY=!Y!!snakeY!"
  267. set "PX=!X!"
  268. set "PY=!Y!"
  269.  
  270. %draw%
  271.  
  272. ) || (
  273.  
  274. %=== failed move - game over ===%
  275. %plot% !TX! !TY! body
  276. call :spinner !PX! !PY! death
  277. %draw%
  278. echo(
  279. color 2c
  280. echo Note: If you quit now, your score will be
  281. echo saved in the last score file of !difficulty!
  282. echo If you press Y, you will go back to the start menu.
  283. echo If you don't want to override your old file of !difficulty!, then hit Y
  284. call :ask "Game Over, your score is: !score! on !difficulty! Would you like to play again? (Y/N)" YN
  285. color 2e
  286. if /i "!key!" equ "N" (
  287. >"%highscoreFile%" (echo %DATE% %Time% Last score is:!score! on !difficulty!.)
  288. >"%cmdFile%" (echo quit)
  289. exit
  290. ) else (
  291. call :initialize
  292. )
  293. )
  294.  
  295. set /a t1=t2
  296. )
  297. )
  298.  
  299. :ask Prompt ValidKeys
  300.  
  301. >"%cmdFile%" (echo prompt)
  302. <nul set /p "=%~1 "
  303. :purge
  304. (%getKey% :)
  305. if not defined key goto :purge
  306. :getResponse
  307. (%getKey% %2)
  308. if not defined key (
  309. >"%cmdFile%" (echo one)
  310. goto :getResponse
  311. )
  312. exit /b
  313. ::ZemByte
  314.  
  315. :spinner X Y ValueVar
  316. set /a d1=-1000000
  317. for /l %%N in (1 1 5) do for %%C in (%spinner%) do (
  318. call :spinnerDelay
  319. %plot% %1 %2 %%C
  320. %draw%
  321. )
  322. call :spinnerDelay
  323. (%plot% %1 %2 %3)
  324. exit /b
  325.  
  326. :spinnerDelay
  327. for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "d2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, dDiff=d2-d1"
  328. if %dDiff% lss 0 set /a dDiff+=24*60*60*100
  329. if %dDiff% lss %spinnerDelay% goto :spinnerDelay
  330. set /a d1=d2
  331. exit /b
  332.  
  333.  
  334. ::-------------------------------------
  335. :initialize
  336. title Snaker - By: xAGENT-5063_0205
  337. cls
  338. echo Snaker
  339.  
  340. echo ()()()()()()()()()()()()()()()()()()()()()()
  341.  
  342. echo Options:
  343. echo(
  344. echo @ Description delay
  345. echo ___ ___________ ______
  346. echo 1 Mega slow C 0.20
  347. echo 2 Crawler Y 0.16
  348. echo 3 Slow N 0.12
  349. echo 4 Normal O 0.07
  350. echo 5 Fast Y 0.05
  351. echo 6 Insane T 0.03
  352. echo 0 Impossible C none
  353. echo(
  354. echo To exit the game, hit the close button.
  355. echo Do not delete the "cmd" and/or
  356. echo the "key" file!
  357. echo(
  358. call :ask "Pick a speed (1-6, 0):" 1234560
  359. set "difficulty=!desc%key%!"
  360. set "delay=!delay%key%!"
  361. echo %key% - %difficulty%
  362. color 0a
  363. echo(
  364. <nul set /p "=Initializing."
  365. set "axis=X"
  366. set "xDiff=+1"
  367. set "yDiff=+0"
  368. set "empty="
  369. set /a "PX=1, PY=height/2, FX=width/2+1, FY=PY, score=0, emptyCnt=0, t1=-1000000"
  370. set "snakeX= %PX%"
  371. set "snakeY= %PY%"
  372. set "snakeX=%snakeX:~-2%"
  373. set "snakeY=%snakeY:~-2%"
  374. for /l %%Y in (0 1 %height%) do (
  375. <nul set /p "=."
  376. set "line%%Y="
  377. for /l %%X in (0,1,%width%) do (
  378. set "cell="
  379. if %%Y equ 0 set "cell=%bound%"
  380. if %%Y equ %height% set "cell=%bound%"
  381. if %%X equ 0 set "cell=%bound%"
  382. if %%X equ %width% set "cell=%bound%"
  383. if %%X equ %PX% if %%Y equ %PY% set "cell=%head%"
  384. if not defined cell (
  385. set "cell=%space%"
  386. set "eX= %%X"
  387. set "eY= %%Y"
  388. set "empty=!empty!#!eX:~-2! !eY:~-2!"
  389. set /a emptyCnt+=1
  390. )
  391. if %%X equ %FX% if %%Y equ %FY% set "cell=%food%"
  392. set "line%%Y=!line%%Y!!cell!"
  393. )
  394. )
  395. (%draw%)
  396. echo(
  397. echo Movement keys: %up%=up %down%=down %left%=left %right%=right
  398. echo Avoid running into yourself (%body%%body%%head%) or wall (%bound%)
  399. echo Eat food (%food%) to grow.
  400. echo(
  401. call :ask "Press any alpha-numeric key to start... A/Z" %keys%
  402. >"%cmdFile%" (echo go)
  403. exit /b
  404.  
  405.  
  406. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  407. :controller
  408.  
  409. setlocal enableDelayedExpansion
  410. set "cmd=hold"
  411. set "key="
  412. for /l %%. in (1 0 1) do (
  413. if "!cmd!" neq "hold" (
  414. %choice% /n /c:!keys!
  415. set "key=!errorlevel!"
  416. )
  417. if exist "%cmdFile%" (
  418. <"%cmdFile%" set /p "cmd="
  419. del "%cmdFile%"
  420. )
  421. if "!cmd!" equ "quit" exit
  422. if defined key (
  423. if "!cmd!" equ "prompt" >&9 (echo :)
  424. >&9 (echo !key!)
  425. if "!cmd!" neq "go" set "cmd=hold"
  426. set "key="
  427. )
  428. )
  429.  
  430. :incorrect_pass
  431. cls
  432. pause
  433. exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement