2016-09-26 4 views
-2

Ich mache gerade ein Spiel, das ein überzeugendes System enthält. Ich hatte den ganzen Code für eines der Systeme eingerichtet, aber dann habe ich 2 weitere eingerichtet, und es fing an, mir einen Fehler zu geben, der sagte: "(Nummer) wurde zu diesem Zeitpunkt nicht erwartet". wenn ich 2 für die zweite Wahl und 3 für die dritte Wahl einsetze.Zu dieser Zeit kam ich unerwartet.

Der Code ist wie folgt.

@echo off 
SETLOCAL EnableDelayedExpansion 
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (

set "DEL=%%a" 

) 
set name=Quantum 

cls 

color 0a 

Echo King Redwood: So 2000? 

pause >nul 

echo. 

call :colorText 09 "1. 2500" 

echo. 

call :colorText 0e "2. 3000" 
echo. 
call :colorText 0c "3. 4000" 
echo. 
echo 4. 2000 
echo. 
set /p "purs=Enter:" 
if /i %purs% == 1 ( 
goto CheckB) 
if /i %purs% == 2 ( 
goto CheckY) 
if /i %purs% == 3 (
goto CheckR) 
if /i %purs% == 4 ( 
goto Convo) 


:CheckB 
set bleu=%random:~-2,1% 
if %bleu% GTR 10 (
goto CheckB) 
if %bleu% LSS 0 (
goto CheckB) 
set /a num = 3 
set /a reward = 2500 
goto Res 
:CheckY 
set Yel=%random:~-2,1% 
if %Yel% GTR 10 (
goto CheckY) 
if %Yel% LSS 0 (
goto CheckY) 
set /a num = 5 
set reward = 3000 
goto Res 

:CheckR 
set red=%random:~-2,1% 
if %red% GTR 10 (
goto CheckB) 
if %red% LSS 0 (
goto CheckB) 
set /a num = 7 
set /a reward = 4000 
goto Res 

:Convo 
set /a reward = 2000 
Echo %name%: I think that is a reasonable price. 
Echo King Redwood: Very well. 
Echo King Redwood: We will now take you to make sure you are 
echo ready. 
pause >nul 


:Res 
if %bleu% GEQ %num% goto Succeed 
if NOT %bleu% GEQ %num% goto Fail 

:Succeed 
Echo %name%: I think that the struggles for such a long trip will be more then that 
Echo %name%: How about %reward%? 
Echo King Redwod: OK %reward% will work. 
pause >nul 
goto end 

:Fail 
Echo %name%: I think that you can give me %reward%. 
Echo %name%: You know, for the struggles that there will be along the way. 
echo If 2000 isn't good enough for you, I'll just have someone else do it. 
pause >nul 

:end 
exit 


:colorText 
echo off 
<nul set /p ".=%DEL%" > "%~2" 
findstr /v /a:%1 /R "^$" "%~2" nul 
del "%~2" > nul 2>&1i 
+0

Ich habe eine Bearbeitung gemacht, ich habe die Set-Nummer geändert und die Belohnung unter: CheckR und Y gesetzt, um stattdessen/a einzustellen. aber das gibt mir immer noch einen Fehler. – QuantumPrimus

+3

Kommentieren Sie @echo off, um zu sehen, was tatsächlich passiert; Doppelklicken Sie nicht auf die Stapeldatei, sondern führen Sie sie aus, indem Sie ein Eingabeaufforderungsfenster öffnen und den Pfad eingeben ... – aschipfl

+0

Zum Beispiel ist '% bleu%' eine leere Zeichenfolge unter ': res', weil' bleu' nicht ist durchgehen entweder ': CheckY' oder': CheckR' oder ': Convo' (diese Liste ist möglicherweise unvollständig). Daher führt 'if% bleu% GEQ% num% goto Succeed' zu etwas wie 'Wenn GEQ 3 zu Succeed' ... Scheinbar falsche Syntax ... – JosefZ

Antwort

1

Stellen Sie zuerst sicher, die FOR-Schleife zu schließen, indem Sie a) vor: CheckB.

Für den Fehler "war zu diesem Zeitpunkt nicht zu erwarten" vergleichen Sie manchmal eine leere Variable mit etwas. Wenn Sie zum Beispiel CheckY verfolgen, setzen Sie Yel, dann gehen Sie zu Res und prüfen Bleu, das leer ist, weil es nicht gesetzt wurde. Sie setzen nichts neben den binären GEQ-Operator und deshalb beschweren sie sich.

Tipp: zu debuggen, versuchen ECHO Aussagen wie diese eingefügt:

:Res 
echo bleu=%bleu%,num=%num% 

Ein weiteres Problem: Wenn SET verwenden, dürfen Sie umgeben nicht die = durch Leerzeichen. SET /a arbeitet mit Leerzeichen um =, nur wegen der Natur von/a, aber einfach SET wird nicht. Nun, es wird Ihren Variablennamen mit einem Leerzeichen anhängen und Ihren Wert mit einem Leerzeichen voranstellen, was nicht das ist, was Sie wollen.

Ein weiterer Tipp: Sie können einschränken, was RANDOM durch SET/a und den Modulo-Operator wie folgt zurückgibt.

SET /a red=%random% %% 11 

Dies wird auf eine Zahl zwischen 0 und 10, rot gesetzt, so gibt es keine Notwendigkeit für die Teilstrings und gehe zu Routinen, die Sie nach dem Pflücken Ihre Zufallszahl verwenden.

Verwenden Sie auch EXIT /b, um die Batch-Datei und nicht die gesamte CMD-Umgebung zu beenden.

+0

Zuerst wird der 'FOR' Loop Körper bereits durch') 'Klammern kurz vor' set name = Quantum' geschlossen ... – JosefZ

+0

Vielen Dank. Das hat mir sehr geholfen. @soja. – QuantumPrimus

Verwandte Themen