Czy istnieje sposób na stworzenie systemu punktów kontrolnych w plikach wsadowych? [duplikować]

Dec 20 2020

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

1 Magoo Dec 20 2020 at 13:59

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ć #moneyi #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.

T3RR0R Dec 20 2020 at 16:25

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