Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- setlocal EnableDelayedExpansion
- set Debug=rem
- ::===========================================================================================================
- ::===================================== Rally Batch Game v0.2.1 By Mysoft ===================================
- ::===========================================================================================================
- ::se inicializado no programa separado vai para a função de teclado
- cd /d "%~dp0"
- if "%1"=="InitKeyboard" ( goto :InitKeyboard )
- if "%1"=="InitEngine" ( goto :InitGame )
- call :Inicializar %~nx0
- goto :eof
- :InitGame
- echo Rally :D
- echo Mantenha se na pista...
- echo Use as teclas A,D ou 4,6 para movimentar o carro
- echo Pressione R para (Re)iniciar o jogo
- echo Pressione Q para sair do jogo.
- :Mainloop
- call :CheckKeys
- call :Sync10
- call :ProcessFrame
- if "%DoQuit%" == "" goto :Mainloop
- color
- goto :QuitGame
- ::===================================================================================
- ::===================================== Funções =====================================
- ::===================================================================================
- ::---------------------
- ::Inicialização do jogo
- ::---------------------
- :Inicializar
- ::tela
- chcp 1252
- mode 80,25
- cls
- ::teclado
- reg add "HKCU\Volatile Environment" /ve /t REG_SZ /f /d "" >nul
- start /high /b %* InitKeyboard
- ::tempo
- set OldSync=0
- ::jogo
- set DoQuit=
- set Space= .
- set KeyN=0
- set DoOver=1
- echo . | %* InitEngine
- goto :eof
- ::-------------------
- ::Variaveis de começo de jogo
- ::-------------------
- :GameStart
- cls
- color 60
- set fDistance=0
- set iTrackPos=25
- set iTrackMov=0
- set DoOver=0
- set /a iCarPos=%iTrackPos%+10
- set sL=#
- set sR=#
- set sCar=V
- goto :eof
- ::-------------------
- ::-------------------
- :ProcessFrame
- if %DoOver%==1 goto :eof
- ::variaveis de posicao e comprimento da pista
- set /a iDistance=%iDistance%+1
- set /a iL=%iCarPos%-%iTrackPos%
- set /a iR=20-%iL%
- ::em caso de toque o jogo acaba
- if %iL% LEQ 0 (set DoOver=1&&Set iL=0&&Set sL=)
- if %iR% LEQ 0 (set DoOver=1&&Set iR=0&&Set sR=)
- if %DoOver%==1 (set sCar=*)
- ::strings que desenham a pista
- set sPre=!!Space:~0,%iTrackPos%!!
- set sTrk=%sL%!Space:~0,%iL%!%sCar%!Space:~0,%iR%!%sR%
- echo %sPre%%sTrk%
- ::movimento da pista
- if %random% GTR 16384 goto :skip
- set /a iTrackMov=(%random%%%3)-1
- :skip
- set /a iTrackPos=%iTrackPos%+%iTrackMov%
- if %iTrackPos% LSS 0 (set iTrackPos=0)
- if %iTrackPos% GTR 56 (set iTrackPos=56)
- ::fim de jogo.
- if %DoOver%==1 (
- set /a iDistA=!iDistance!/100
- set /a iDistB=!iDistance!%%100
- set /a iDistB=iDistB/10
- color 40
- call :Sync10
- color C0
- call :Sync10
- color 40
- call :Sync10
- color 60
- echo FIM DE JOGO.
- echo Você percorreu !iDistA!.!iDistB!km
- echo Pressione R para reiniciar ou Q para sair
- )
- goto :eof
- ::---------------------
- ::Eventos do teclado
- ::---------------------
- :CheckKeys
- for /F "tokens=2 delims=^|" %%g in ('reg query "HKCU\Volatile Environment" /ve ^| find "REG_SZ"') do set "K=%%g"
- if "%K%" EQU "" ( goto :eof )
- set KeyPos=-2
- set ValidOpts=A4D6QR
- :ckNextKey
- set /a KeyPos=(%KeyPos%+2)
- set sKey=!!K:~%KeyPos%,2!!
- if "%sKey%" EQU "" ( goto :eof )
- if "%sKey:~0,1%" EQU " " ( goto :eof )
- if "%sKey:~0,1%" NEQ "%KeyN%" ( goto :ckNextKey )
- set /a KeyN=(%KeyN%+1)%%10
- set sKey=%sKey:~1,1%
- set sTemp=!ValidOpts:%sKey%=!
- if %sTemp%==%ValidOpts% goto :ckAfterKey
- call :ckKey%sKey%
- :ckAfterKey
- if %KeyPos% NEQ 16 ( goto :ckNextKey )
- goto :eof
- ::left
- :ckKeyA
- :ckKey4
- set /a iCarPos=%iCarPos%-1
- goto :eof
- ::right
- :ckKeyD
- :ckKey6
- set /a iCarPos=%iCarPos%+1
- goto :eof
- ::quit
- :ckKeyQ
- set DoQuit=1
- goto :eof
- ::start
- :ckKeyR
- call :GameStart
- goto :eof
- ::----------------------
- ::Aguarda próxima leva de 100ms (sincroniza para 10fps)
- ::----------------------
- :Sync10
- set Sync=%time:~-2,1%
- if %Sync%==%OldSync% goto :Sync10
- set OldSync=%Sync%
- goto :eof
- ::---------------------
- ::Esta função aguarda um caractere e o coloca no buffer e ela roda em um processo separado
- ::---------------------
- :InitKeyboard
- %Debug% Inicializando o teclado.
- set Num=0
- set Out=
- :ikNextKey
- for /F "eol=0 delims=" %%i in ('xcopy /w "%~f0." ?') do set "K=^"%%i"
- set Key=%K:~-1,1%
- if "%Key%" EQU "" goto :ikNextKey
- if "%Out%" NEQ "" (set Out=%Out:~-16,16%)
- set Out=%Out%%Num%%Key%
- set /a Num=((%Num%+1)%%10)
- reg add "HKCU\Volatile Environment" /ve /t REG_SZ /f /d "^|%Out%" >nul
- if "%Key%" EQU "Q" (goto :ikEndKey)
- if "%Key%" EQU "q" (goto :ikEndKey)
- goto :ikNextKey
- :ikEndKey
- %debug% Teclado finalizado.
- exit
- ::Sai do programa
- :QuitGame
- color 07&color
- :quit
- reg delete "HKCU\Volatile Environment" /ve /f 2>&1 >nul
- endlocal
- echo Done...
- exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement