保存并加载.bat游戏

时间:2011-10-06 22:41:51

标签: batch-file

我正在制作一个用蝙蝠写的文字游戏,游戏已经完成,(或者更多,它的很大一部分,比如命令,以及你可以玩它的阶段);但是,我想添加保存游戏的能力,并重新加载它。

我认为可以通过让.bat文件写入需要保存的变量(例如项目变量)来做到这一点;但是,我不知道该怎么做。任何帮助将不胜感激,谢谢。

我应该说,我可以通过以下方式加载它:

 for /f "delims=" %%x in (config.txt) do (set "%%x")

但是,我不知道如何让.bat写入文件,所以“保存”。

7 个答案:

答案 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`

这种方法可以节省很多打字。