2016-04-10 10 views
0

Ich spielte kürzlich das Spiel "Diktator" und wollte es in einem Batch-Skript neu erstellen. Ich habe gerade angefangen, es zu erstellen, als ich auf ein Problem stieß. Ich habe Programme gemacht, die es dem Benutzer erlauben, seinen Fortschritt zu speichern und ihn zu laden. Ich habe diesen Code aus einem anderen Programm kopiert und in meinen geschrieben. Das Speichern scheint zu funktionieren, aber wenn ich die Sicherungsdatei (.cmd) bearbeite und eine der gespeicherten Variablen bearbeite, scheint nichts zu passieren, sobald ich diese Datei geladen habe. Zum Beispiel habe ich eine Datei mit dem Namen key.cmd gespeichert und bearbeitet, um die Variable "pol" gleich 100 zu machen. Sobald ich diese Datei geladen habe, hat sie geladen, aber die Variable pol wurde immer noch auf den Standardwert (10) gesetzt. Ich verstehe nicht, wie ich einen Ordner mit dem Namen save and key.cmd gemacht habe. Ich habe meinen Speicher- und Ladecode in der Vergangenheit mehrfach verwendet und hatte nie Probleme. Bitte helfen Sie! Hier ist mein Code:Konnte keine .cmd aus einer Batch-Datei laden

:Setup 
@echo off 
title Dictator 
color 0a 

:Save Variables 
set pol=10 
set bui=10 
set low=10 
set cor=10 
set peo=10 
set cri=10 

:Main 
cls 
echo 1 - Save 
echo 2 - Load 
echo 3 - Police - %pol% 
echo 4 - Buissnes Men - %bui% 
echo 5 - Lower Government - %low% 
echo 6 - Corruption - %cor% 
echo 7 - People - %peo% 
echo 8 - Criminals - %cri% 
choice /c 12345678 /n /m ">>> " 
if %errorlevel% equ 1 goto Save 
if %errorlevel% equ 2 goto load 

:Save 
cls 
set /p pin="PIN: " 
(
echo set pol=%pol% 
echo set bui=%bui% 
echo set low=%low% 
echo set cor=%cor% 
echo set peo=%peo% 
echo set cri=%cri% 
) >> saves\%pin%.cmd 
echo SAVED 
pause >nul 
goto main 


:Load 
cls 
set /p pin="PIN: " 
if exist saves\%pin%.cmd (
    call saves\%pin%.cmd 
    echo %pol% 
    echo LOADED 
    pause >nul 
) else (
    echo INCORRECT PIN 
    pause >nul 
) 
goto main 
+3

Sie die fiel in [Expansion Falle verzögert] (http://stackoverflow.com/a/30284028/2152082) – Stephan

Antwort

0

Bei :Load benötigen Sie Leerzeichen im Dateinamen zu ermöglichen. Die meisten Benutzer werden diese Schwäche nicht kennen, aber damit Leerzeichen (und ein paar andere 'spezielle' Zeichen) in den Benutzereingaben gelesen werden können, ohne sie zu unterbrechen, müssen Sie setlocal enableextensions enabledelayedexpansion am Anfang Ihrer Batch-Datei hinzufügen und Machen Sie die set /p pin="PIN: " Anweisung in set /p "pin=PIN: " und ersetzen Sie die % mit !, wo es %pin% fordert. Am Ende sollte Ihr Code wie folgt aussehen:

:Setup 
setlocal enableextensions enabledelayedexpansion 
@echo off 
title Dictator 
color 0a 

:Save Variables 
set pol=10 
set bui=10 
set low=10 
set cor=10 
set peo=10 
set cri=10 

:Main 
cls 
echo 1 - Save 
echo 2 - Load 
echo 3 - Police - %pol% 
echo 4 - Buissnes Men - %bui% 
echo 5 - Lower Government - %low% 
echo 6 - Corruption - %cor% 
echo 7 - People - %peo% 
echo 8 - Criminals - %cri% 
choice /c 12345678 /n /m ">>> " 
if %errorlevel% equ 1 goto Save 
if %errorlevel% equ 2 goto load 

:Save 
cls 
set /p "pin=PIN: " 
(
echo set pol=%pol% 
echo set bui=%bui% 
echo set low=%low% 
echo set cor=%cor% 
echo set peo=%peo% 
echo set cri=%cri% 
) >> saves\!pin!.cmd 
echo SAVED 
pause >nul 
goto main 


:Load 
cls 
set /p "pin=PIN: " 
if exist saves\!pin!.cmd (
    call saves\!pin!.cmd 
    echo %pol% 
    echo LOADED 
    pause >nul 
) else (
    echo INCORRECT PIN 
    pause >nul 
) 
goto main 
+0

Auch in Ihrem Code, Sie falsch geschrieben "Business Men" als "Buissnes Men". –

+0

danke für die Hilfe mit dem Tippfehler, P aber die Ladefunktion in meinem Spiel scheint immer noch nicht zu funktionieren. Ich habe sogar den ganzen Code über meinen eingefügt und habe immer noch nicht funktioniert. Das eine, das es funktioniert hat, ist, als ich% pol% zu! Pol! Änderte. Irgendwelche Vorschläge, warum dies der Fall ist oder wie man es umgehen kann? – Vansh03

+0

@MatthewHorvath Sie haben '% pin%' in '! Pin!' Geändert, aber das ist nicht notwendig. Die einzige Variable in diesem Code, die eine verzögerte Erweiterung benötigt, ist 'pol' innerhalb der Unterroutine ': load' – Stephan