배치 파일에서 체크 포인트 시스템을 만드는 방법이 있습니까? [복제]

Dec 20 2020

배치 파일에서 체크 포인트 시스템을 만드는 방법이 있습니까? 나는 배치를 가르치고 텍스트 기반 RPG 유형 게임을 만들고 있지만 프로그램이 닫히면 진행 상황이 저장되지 않고 코드 맨 처음부터 다시 시작됩니다. 복잡한 장기 게임을 만들고 싶지만 매번 게임을 다시 시작할 필요가 없습니다. 진행 상황을 저장하여 프로그램을 다시 열고 이전의 모든 선택 사항을 그대로 유지하면서 중단 한 부분에서 다시 시작하거나 다시 시작할 수있는 방법이 있습니까?

답변

1 Magoo Dec 20 2020 at 13:59

아마도 가장 쉬운 저장 / 다시로드 방법은 다음과 같습니다.

#기록하려는 모든 변수의 첫 번째 문자로 사용할 문자 (예 :)를 예약하십시오 .

그래서...

set #points=35
set action=3
set #money=22

모든 #변수 를 저장하려면

set #>filename

#money그리고 저장 #points하지만action

다시로드하려면

for /f "delims=" %%a in (filename) do set "%%a"

파일에 저장된 모든 변수를 다시로드합니다. 물론 # 변수 만 있습니다.

T3RR0R Dec 20 2020 at 16:25

매우 효율적인 저장 /로드 방법에 대한 magoo의 답변 외에도 (약간 수정) : 사용자 프로필 스크립팅은 다음과 같이 수행 할 수 있습니다.

@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