Existe uma maneira de fazer um sistema de checkpoint em arquivos em lote? [duplicado]
Existe uma maneira de fazer um sistema de checkpoint em arquivos em lote? Estou aprendendo batch sozinho e criando um jogo do tipo RPG baseado em texto, mas se o programa for fechado, ele começa no início do código, sem nenhum progresso salvo. Eu quero fazer um jogo complexo de longo prazo, mas não quero ter que lidar com um reinício do jogo todas as vezes. Existe uma maneira de salvar o progresso para que você possa reabrir o programa e reiniciar OU retomar de onde parou, com todas as opções anteriores intactas?
Respostas
Possivelmente, o método mais fácil de salvar / recarregar é este:
Reserve um caractere (digamos, #
) para ser usado como o primeiro caractere de todas as variáveis que deseja registrar.
tão...
set #points=35
set action=3
set #money=22
Para salvar todas as #
variáveis, use
set #>filename
que salvaria #money
e #points
, mas nãoaction
Para recarregar use
for /f "delims=" %%a in (filename) do set "%%a"
que irá recarregar todas as variáveis salvas no arquivo - que são, é claro, apenas #variables.
Além da resposta de magoo sobre um método de salvar / carregar muito eficiente (com uma pequena modificação): os perfis de usuário de script podem ser feitos da seguinte forma:
@Echo off
rem /* predefine your key variables prior to this loop */
:name :# load point
Set /P "name=Enter your name: "
If Not "%name%" == "" (
rem /* If character exists; load */
If Exist "%~n0_%name%.bat" (
Call "%~n0_%name%.bat"
rem /* Initialise character save using predefined variables if character new */
) Else ( Call :Save )
rem /* Force Assignment of name variable */
) Else ( Goto name )
===============================================
::: Script body
::: End of Script
Goto :Eof
===============================================
:Save :# function
rem /* variation on magoo's method of saving */
(For /F "Delims=" %%G in ('Set #')Do Echo/Set "%%G")>"%~n0_%name%.bat"
Exit /B 0