Игра Сохранить и загрузить .bat - PullRequest
9 голосов
/ 07 октября 2011

Я делаю текстовую игру, написанную на bat, и игра завершена (или более того, хорошая ее часть, такая как команды, и на той стадии, когда вы можете в нее играть); тем не менее, я хочу добавить силу, чтобы сохранить вашу игру, и загрузить ее снова.

Я думаю, что это можно сделать, если в файле .bat записать переменные, которые необходимо сохранить (например, переменные элемента); Однако я не знаю, как это сделать. Любая помощь будет оценена, спасибо.

Я должен был сказать, я могу загрузить его, используя:

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

Однако я не знаю, как заставить .bat записать в файл и, таким образом, "сохранить".

Ответы [ 6 ]

8 голосов
/ 07 октября 2011

Вы также можете сохранять / загружать только с такими значениями, как

(
  echo %highscore%
  echo %playername%
  echo %points%
) > savegame.sav

и загружать их с

< savegame.sav (
  set /p highscore=
  set /p playername=
  set /p points=
)

Первая часть просто перенаправляет выходные данные echo в файл.
Загружаемая часть использует также перенаправление файла, но в этом случае в качестве источника ввода.
set /p Команды в блоке могут последовательно читать строки из файла.

6 голосов
/ 07 октября 2011

Попробуйте что-то вроде этого:

@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 немного сложнее.)

1 голос
/ 19 марта 2015

Вот тот, над которым я сейчас работаю.

Вы используете INI-файлы для сохранения игр и загружаете их с помощью команды dir.

Вот так я и загрузил списокиз сохраненных игр в. "."разделитель таков, что не будет показывать расширение .ini, чтобы не запутывать пользователей.Это, однако, не позволяет пользователям ставить точки в именах сохраненных игр.

set randomDirIndex=%random%dirindex
dir /b savegames\>%temp%\%randomDirIndex%
for /f "delims=." %%a in (%temp%\%randomDirIndex%) do (
    echo %%a
)

Вот пример INI-файла сохраненной игры:

[PlayerStats]
health=100
energy=75
mana=50
[Inventory]
sword=1
key=0
[Info]
name=John Doe

Я также использовал этот вопрос (проверьте первый ответ), чтобы получить загрузочный скрипт 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-файл.(см. ответы других людей.)

1 голос
/ 27 декабря 2012

Или


@ echo off
> savegame.bat echo. SET ITEMS =% ITEMS%
>> savegame.bat echo. SET HEALTH =% HEALTH%
>> savegame.bat echo. SET MONEY =% MONEY%
>> savegame.bat echo. SET LEVEL =% LEVEL%


Слова, выделенные жирным шрифтом, являются переменными, которые должны быть записаны в файле bat.

«savegame.bat» - это то место, куда вы положите имя файла, в который будут сохранены переменные.

И, наконец, стрелка> означает, что она удалит все и начнется с начала файла, поскольку стрелка >> говорит, что она добавляет эту строку в самый конец всей записи в самом низу файла..

Надеюсь, это поможет, а также поможет всем, кто имеет такой же вопрос: D

0 голосов
/ 23 июля 2013

Попробуйте это:

 (echo items=%items%) >> gamesave.txt
 (echo money=%money%) >> gamesave.txt

и т. Д.

0 голосов
/ 27 декабря 2012

Я когда-то писал пакетную игру (типа текстовых приключений) еще в эпоху DOS 5. Затем я решил сделать каждую локацию в игре отдельной папкой на диске. У каждого местоположения был свой собственный файл bat, чтобы инициализировать местоположение, например, показывать его описание и инициализировать, куда можно перемещаться.

У объектов и людей был свой собственный файл летучей мыши. Поэтому, когда вы разговариваете с кем-то, файл bat этого человека должен был обработать это и сохранить информацию о разговоре. Поднять объект так же просто, как переместить object.bat из каталога местоположений в каталог инвентаря.

Таким образом, я мог не только легко добавлять местоположения, объекты и людей в игру, но также и большая часть информации сохранялась автоматически, потому что статус сохранялся внутри файлов или в расположении файлов. Остальные были сохранены путем сохранения соответствующих значений в командный файл, который был запущен при загрузке, аналогично тому, как Мэт описал в своем ответе.

Должен сказать, я тогда не знал всех возможностей обмана цикла и манипулирования строками, если бы они были даже возможны в MSDOS 5, иначе это могло бы быть немного проще, не говоря уже о быстродействии. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...