我正在制作一个用蝙蝠写的文字游戏,游戏已经完成,(或者更多,它的很大一部分,比如命令,以及你可以玩它的阶段);但是,我想添加保存游戏的能力,并重新加载它。
我认为可以通过让.bat文件写入需要保存的变量(例如项目变量)来做到这一点;但是,我不知道该怎么做。任何帮助将不胜感激,谢谢。
我应该说,我可以通过以下方式加载它:
for /f "delims=" %%x in (config.txt) do (set "%%x")
但是,我不知道如何让.bat写入文件,所以“保存”。
答案 0 :(得分:8)
您也可以仅使用值保存/加载,例如
(
echo %highscore%
echo %playername%
echo %points%
) > savegame.sav
并加载
< savegame.sav (
set /p highscore=
set /p playername=
set /p points=
)
第一部分只是将echo
输出重定向到文件
加载部分也使用文件重定向,但在这种情况下作为输入源
块中的set /p
命令可以从文件中连续读取行。
答案 1 :(得分:6)
尝试这样的事情:
@echo @ECHO OFF > savegame.cmd
@echo SET ITEMS=%ITEMS% >> savegame.cmd
@echo SET HEALTH=%HEALTH% >> savegame.cmd
@echo SET MONEY=%MONEY% >> savegame.cmd
将“保存”savegame.cmd
中的这三个变量。然后你可以call
该文件重新加载变量。
(使用for /f
进行操作相当棘手。)
答案 2 :(得分:1)
@echo off
&GT; savegame.bat echo。 SET ITEMS =%ITEMS%
&GT;&GT; savegame.bat echo。 SET HEALTH =%HEALTH%
&GT;&GT; savegame.bat echo。 SET MONEY =%MONEY%
&GT;&GT; savegame.bat echo。 SET LEVEL =%LEVEL%
粗体中的单词是要写在bat文件上的变量。
“savegame.bat”是您将保存变量的文件名称的位置。
最后&gt;箭头意味着它将删除所有内容并从文件的开头开始,从&gt;&gt;开始arrow告诉它将该行添加到文件最底部的所有书写的最后。
我希望这有助于帮助其他有同样问题的人:D
答案 3 :(得分:1)
这是我目前正在进行的工作。
您将INI文件用于存档游戏,并使用dir命令加载它们。
这就是我如何加载一个保存游戏列表。 &#34;。&#34;分隔符是这样的,它不会显示.ini扩展名,因为不会混淆用户。但是,这不允许用户在存档游戏名称中添加句点。
set randomDirIndex=%random%dirindex
dir /b savegames\>%temp%\%randomDirIndex%
for /f "delims=." %%a in (%temp%\%randomDirIndex%) do (
echo %%a
)
这是savegame INI文件的一个示例:
[PlayerStats]
health=100
energy=75
mana=50
[Inventory]
sword=1
key=0
[Info]
name=John Doe
我还使用this question(检查第一个答案)来获取加载INI脚本。
现在要加载它,你将使用一系列for / f命令:
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini PlayerStats health') do (
set health=%%a
)
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini PlayerStats energy') do (
set energy=%%a
)
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini PlayerStats mana') do (
set mana=%%a
)
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini Inventory sword') do (
set hasSword=%%a
)
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini Inventory key') do (
set hasKey=%%a
)
for /f "delims=" %%a in ('call ini.bat savegames\%~1.ini Info name') do (
set playerName=%%a
)
最后为了保存游戏,您只需将所有内容都回显到文件中,基本上重写INI文件。 (参考其他人的答案。)
答案 4 :(得分:0)
我曾经在DOS 5时代写过批量游戏(像文字冒险一样)。然后,我选择将游戏中的每个位置设置为磁盘上的单独文件夹。每个位置都有自己的bat文件来初始化位置,比如显示其描述并初始化可以从那里移动的位置。
对象和人有自己的bat文件。所以当与一个人交谈时,该人的蝙蝠文件需要处理,并保存对话信息。拾取对象就像将object.bat从location目录移动到inventory目录一样简单。
这样,我不仅可以轻松地向游戏添加位置,对象和人物,而且大部分信息都是自动保存的,因为状态保存在文件内或文件位置。通过将相关值保存到在加载时运行的批处理文件来保存其余部分,其方式与Mat在答案中描述的方式类似。
我必须说,我当时并不知道所有for循环技巧和字符串操作的可能性,如果它们甚至可能是MSDOS 5,否则它可能会更容易一些,更不用说更快了。 ;)
答案 5 :(得分:0)
试试这个:
(echo items=%items%) >> gamesave.txt
(echo money=%money%) >> gamesave.txt
等
答案 6 :(得分:0)
为保存创建文件路径:
`If not exist "%userprofile%\Saves" md "%userprofile%\saves"`
将变量分配给文件夹文件路径:
`set saveLoc="%userprofile%\saves"`
在目标位置创建空白文件:
`If not exist "%saveLoc%\data.sav" break>%saveLoc%\data.sav"`
为您的文件路径分配一个变量
`set Gamesave="%saveLoc%\data.sav`
为了高效编码... 将所有数据阻止到一个变量中,并以字符作为前缀。
`set data=+%var1%+%var2%+%var3%+%var4%`
保存时间:
`ECHO %data% >%Gamesave%`
为了高效编码... 为For / F循环组件分配一个变量,以预订要检索的每个令牌...
`Set lo=For /f "usebackq tokens=`
`Set ad= delims=+" %%a IN (%Gamesave%) DO SET`
加载时:
`%lo%1%ad% var1=%%a`
`%lo%2%ad% var2=%%a`
`%lo%3%ad% var3=%%a`
`%lo%4%ad% var4=%%a`
这种方法可以节省很多打字。