2016-03-27 29 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

不,绝对不是!所有你需要做的就是在'':colorecho'之前插入'exit/B'或者'goto:EOF' *,同样在[this comment]中建议(http://stackoverflow.com/questions/36254078/call-function - 未加工/ 36254368#comment60140753_36254078)。 – aschipfl