Czy istnieje sposób na stworzenie systemu punktów kontrolnych w plikach wsadowych? [duplikować]
Czy istnieje sposób na stworzenie systemu punktów kontrolnych w plikach wsadowych? Uczę się wsadowo i tworzę tekstową grę RPG, ale jeśli program jest zamknięty, zaczyna się z powrotem na samym początku kodu, bez zapisywania postępu. Chcę stworzyć złożoną grę długoterminową, ale nie chcę za każdym razem zajmować się ponownym uruchomieniem gry. Czy istnieje sposób na zapisanie postępów, abyś mógł ponownie otworzyć program i albo ponownie uruchomić, albo wznowić od miejsca, w którym skończyłeś, z wszystkimi wcześniejszymi wyborami nienaruszonymi?
Odpowiedzi
Prawdopodobnie najłatwiejszą metodą zapisywania / ponownego ładowania jest:
Zarezerwuj znak (powiedzmy #
), który będzie używany jako pierwszy znak wszystkich zmiennych, które chcesz zarejestrować.
więc...
set #points=35
set action=3
set #money=22
Aby zapisać wszystkie #
zmienne, użyj
set #>filename
co pozwoliłoby zaoszczędzić #money
i #points
, ale nieaction
Aby przeładować użyj
for /f "delims=" %%a in (filename) do set "%%a"
który przeładuje wszystkie zmienne zapisane w pliku - które są oczywiście tylko # zmiennymi.
Oprócz odpowiedzi magoo dotyczącej bardzo wydajnej metody zapisywania / ładowania (z niewielką modyfikacją): skrypty profili użytkowników można wykonać w następujący sposób:
@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