バッチファイルでチェックポイントシステムを作成する方法はありますか?[複製]

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"

これにより、ファイルに保存されているすべての変数が再読み込みされます。もちろん、これらは#variablesのみです。

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