2016-09-26 4 views
-2

현재 설득 시스템이있는 게임을 만들고 있습니다. 나는 시스템 중 하나에 대한 모든 코드를 설정했지만, 그 다음에 2 개를 더 설정하고 나에게 '(숫자)가 이번에는 예상되지 않았다'는 오류를 내게했습니다. 두 번째 선택은 2, 세 번째 선택은 3입니다.시간에 예상치 못한 결과가 발생했습니다.

코드는 다음과 같습니다.

@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

나는 편집을 만들었고, num을 변경하고, CheckR과 Y를 설정하여/a를 대신 설정했습니다. 그러나 그것은 여전히 ​​나에게 오류를 준다. – QuantumPrimus

+3

'@echo off'를 주석 처리하여 실제로 어떤 일이 발생하는지 확인하십시오. 배치 파일을 두 번 클릭하지 말고 명령 프롬프트 창을 열고 경로를 입력하여 실행하십시오. – aschipfl

+0

예를 들어,'% bleu %'는'bleu'가 없기 때문에': res'에서 빈 문자열입니다 ': CheckY' 또는': CheckR' 또는': Convo' (이 목록은 불완전 할 수도 있음) 중 하나를 통해 설정됩니다. 따라서'% % bleu % GEQ % num % goto Succeed'가'GEQ 3 goto Success ... '와 같은 결과를 얻었습니다 ... 분명히 잘못된 구문 ... – JosefZ

답변

1

먼저 FOR 앞에 a)를 넣어 FOR 루프를 닫습니다.

'이번에는 예상하지 못함'오류 때문에 빈 변수를 뭔가와 비교하는 경우가 있습니다. 예를 들어 CheckY를 따라 Yel을 설정 한 다음 Res로 진행하여 Bleu를 선택합니다. Bleu는 설정되지 않았기 때문에 비어 있습니다. 바이너리 GEQ 연산자 옆에 아무것도 넣지 않으므로 불평을하는 것입니다.

팁 :

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

또 다른 문제 : 디버깅이 같은 ECHO 문을 삽입하려고 SET를 사용하는 경우 공백으로 = 서라운드하지 않습니다. SET /a은 /의 특성 때문에 공백 =와 함께 작동하지만 일반 SET는 그렇지 않습니다. 변수 이름에 공백을 추가하고 값 앞에 공백을 추가합니다. 이는 원하는 것이 아닙니다.

다른 팁 : RANDOM이 SET/a와 모듈러스 연산자를 통해 반환하는 것을 제약 할 수 있습니다.

SET /a red=%random% %% 11 

이 0에서 10 사이의 숫자로 빨간색 설정합니다, 그래서 거기에 문자열이 필요없고 고토 당신이 당신의 난수를 따기 후 사용하는 루틴.

또한 전체 CMD 환경이 아닌 배치 파일을 종료하려면 EXIT /b을 사용하십시오.

+0

먼저,'FOR' 루프 본문은'set name = Quantum' 바로 전에')'괄호로 닫혀 있습니다 ... – JosefZ

+0

고마워요. 이것은 많은 도움이되었습니다. @soja. – QuantumPrimus

관련 문제