2016-03-27 15 views
0

Я делаю выбор своего приключенческого игра в пакетном режиме, и я хочу иметь статистику в нем, чтобы отслеживать, как вы делаете в игре. Я хочу отображать статистику, но я должен делать это каждый раз, когда у меня есть команда cls, и потому, что у меня будет эта команда часто, я сделал блок с именем :Stats, чтобы я мог называть его каждый раз, когда мне это нужно. Он отлично работает, но повествование после отображения статистики больше не работает. Я хочу сохранить блок :colorEcho, поэтому игрок может различать диалог, повествование и команды для ввода выбора. Есть какие нибудь идеи как это починить?Функция вызова не работает?

:Start 
::Game goes here. 
cls 
Echo Please enter your player name. 
set /p PlayerName="Player name: " 
cls 
call :Stats 
call :colorEcho 7 "You lay on the cold, hard ground, sleeping away. It's been 1 month since the Virus spread..." 
Echo. 
call :colorEcho 7 "The sun rises over the horizon, warming up your dirt-caked body." 
Echo . 
pause 
exit 

:Stats 
call :colorEcho A "Current Health = " 
call :colorEcho C " %Health%" 
Echo. 
call :colorEcho A "Hunger = " 
call :colorEcho C " %Food%" 
Echo. 
call :colorEcho A "Thirst = " 
call :colorEcho C " %Water%" 
Echo. 
call :colorEcho A "Infection = " 
call :colorEcho C " %Infection%" 
Echo. 
call :colorEcho A "Stamina = " 
call :colorEcho C " %Stamina%" 
Echo. 
Echo. 
pause 

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

Замечание: Я определил все переменные. Об этом я убедился.

Что должно произойти:

expected

Что происходит на самом деле:

actual

+1

Вы забыли 'выход/b' или 'goto: eof' в конце вашего ubroutine, поэтому ': Start' попадает в': colorEcho'. – dbenham

+0

Что это точно? –

ответ

-2

Вы забыли перезвонить в другой блок

@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" 
) 
title Ace 
set Health=100 
set Food=100 
set Water=100 
set Infection=100 
set Stamina=100 
color A 
Echo Welcome, %USERNAME% to Ace, a crudely made Choose-Your-Own-Adventure game. You must complete 

this in one try. 
call :colorEcho A "There is" 
call :colorEcho C " no saving" 
Echo . Are you ready? 
Echo Your options are: 
call :colorEcho C "=================" 
Echo. 
Echo 1. Yes 
Echo 2. No 
call :colorEcho C "=================" 
Echo. 
Echo Please enter the number corresponding to your answer. 
set /p Answer1="Enter your choice: " 
if "%Answer1%" == "1" goto Start 
if "%Answer1%" == "2" goto Quit 

:Quit 
Echo You have chosen to quit. 
pause 
exit 

:Start 
::Game goes here. 
cls 
Echo Please enter your player name. 
set /p PlayerName="Player name: " 
cls 
call :Stats 

Echo. 
call :colorEcho C "You lay on the cold, hard ground, sleeping away. It's been 1 month since the Virus 

spread" 
Echo. 
call :colorEcho C "The sun rises over the horizon, warming up your dirt-caked body." 
Echo. 
pause 
exit 

:Stats 
call :colorEcho A "Current Health = " 
call :colorEcho C " %Health%" 
Echo. 
call :colorEcho A "Hunger = " 
call :colorEcho C " %Food%" 
Echo. 
call :colorEcho A "Thirst = " 
call :colorEcho C " %Water%" 
Echo. 
call :colorEcho A "Infection = " 
call :colorEcho C " %Infection%" 
Echo. 
call :colorEcho A "Stamina = " 
call :colorEcho C " %Stamina%" 
EXIT /B 
Echo. 
Echo. 

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

Какова цель лейбла ': derp', на ваш взгляд? если вы попытаетесь вернуться к основной процедуре вроде этого, вы, вероятно, превысите предел вложенных вызовов ... – aschipfl

+0

лейбл derp необходим –

+1

Нет, это определенно нет! Все, что вам нужно сделать, это вставить 'exit/B' или' goto: EOF' * before * ': colorecho', также предлагаемый в [этот комментарий] (http://stackoverflow.com/questions/36254078/call-function -на-рабочие/36254368 # comment60140753_36254078). – aschipfl

Смежные вопросы