Игра Сохранить и загрузить .bat - Ошибка с одним числом - PullRequest
1 голос
/ 11 октября 2011

В этом вопросе Сохранить и загрузить .bat игру Я использовал ответ Мата.

Но теперь у меня проблема с «сохранением» чисел с помощью указанного ответа.

Если переменная не является двузначным числом (например, 1 или 0), она «сохранит» переменную как «» и, таким образом, приведет к аварийному завершению игры всякий раз, когда вы делаете что-либо, для чего нужна эта переменная. Игра устанавливает переменную штраф до этого.

Например, если я беру тряпку, то набираю Inv, она скажет, что я держу тряпку. Если я потом сохраню и снова загрузлю, то наберу Inv, это не скажет, что я что-то держу!

Это также не будет отражать "Ничего", что должно делать, если %raghave% = 00

(у меня также есть файл сохранения, открытый в Notepad ++, и я вижу, что set RagHave=)

(Также, если я использую код Мата с пробелами, тогда переменная устанавливается как "set RagHave=1 "и поэтому добавляет пробел в конце)

1 Ответ

4 голосов
/ 11 октября 2011

Проблема в решении Мата! Для лучшего понимания я повторяю его решение

@echo @ECHO OFF           > savegame.cmd
@echo SET ITEMS=%ITEMS%   >> savegame.cmd
@echo SET HEALTH=%HEALTH% >> savegame.cmd
@echo SET MONEY=%MONEY%   >> savegame.cmd

На мой взгляд, у него есть несколько недостатков.
Префикс @ не обязателен.
Перенаправление повторяется для каждой строки (мне не нравится избыточность).
Нужны пробелы, так как без пробелов у вас проблемы с числами.

Образец с элементами = 1

@echo set ITEMS=1>>savegame.cmd

Это приводит не к записи set items=1, а к записи set items= в 1>>savegame.cmd 1 >> - стандартный поток.

Все проблемы можно решить с помощью

(
    echo @ECHO OFF
    echo SET "ITEMS=%ITEMS%"
    echo SET "HEALTH=%HEALTH%"
    echo SET "MONEY=%MONEY%"
) > savegame.cmd

Кавычки используются для гарантии того, что «скрытые» пробелы после набора игнорируются.

Btw. Плохо использовать такую ​​конструкцию, как if %raghave% = 00 (вам нужно два знака равенства), поскольку 00 не является нормальным числом, которое вы не можете сосчитать или рассчитать с ним, лучше вместо этого использовать 0.

Тогда также это должно работать

set /a items=0
set /a items=items+1
set /a items=items-1
if %items%==0 echo There are no items
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...