批量隐藏文本/禁用或启用值?

时间:2014-05-25 18:50:04

标签: batch-file cmd command

我正在批量制作RPG游戏,我需要制作它,以便如果玩家没有购买某种武器,它就不会显示为使用选项。目前,我有一个战斗系统,你可以按一个键来使用你拥有的武器。但是,我不知道怎么做,所以如果你没有某种武器,就不能使用它。

我也想要它,即使文本没有显示,如果没有它,用户仍然无法使用它。例如,如果你没有剑,但你知道要使用它,你按s,我不希望它工作,除非你有它。这样人们不能只是作弊。

请帮忙!

以下是代码:

if %sword1% equ true echo 2-Tachi

set /p e="Weapon to equip:"
pause

我不希望用户只输入2并拥有Tachi。我想要它以便他们必须这样做 有武器使用它。

2 个答案:

答案 0 :(得分:2)

@echo off
setlocal enabledelayedexpansion

set w1=sword
set w2=bow
set w3=axe
set w4=machinegun
set w5=warbow

set w1?=true
set w2?=false
set w3?=true
set w4?=false
set w5?=false

:loop
echo ----------
for /L %%i in (1,1,9) do (
  if !w%%i?!==true echo %%i - !w%%i!
)
set /p e="Weapon to equip: "
if !w%e%?!==true ( 
 echo you have choosed: !W%e%!
) else (
 echo you don't have one.
 goto :loop
)
echo now, that you have a !W%e%!, go and fight!
echo Bamm - Wush - Ouch
if %random% lss 10000 ( 
  echo Congratulations, you have found a %w4%.
  set "w4?=true"
)
pause
goto :loop

编辑(对代码的解释)

set的第一个区块只设置了武器的名称。

set的第二个区块设置它们可供玩家使用。 (在游戏中,通常一开始只有一个可用,其他人可以在游戏中找到或购买)。 变量名中的?没什么特别的,只有像任何字母一样的字符。如果它让您感到困惑,您还可以使用类似B的内容(例如b oolean):set w5B=false

for - 循环是此代码的核心。它会显示所有可用的武器(它会w1w9。您可以对其进行调整以处理数百甚至数千个项目(从1开始,增加1,直到9为止。 true))

如果可用(%%i),它会回显数字(!w%%i?!)和武器名称。

w%%i?有点棘手。 %%我是"循环计数器" (1,2,3,...,9),因此w4?会转换为(例如)w%%i(以及w4转换为%

因为您需要具有该名称的变量,所以您必须将其置于%%i之间,但由于delayed expansion已经是变量的一部分,解释器会感到困惑。为此,我们使用!(在stackoverflow中搜索它,发现的结果比您可以阅读的多),因此可以使用%而不是!w%%i?!,因此完整变量名为{ {1}}(请记住:?只是一封信)。 (不要沮丧,如果你没有第一次得到它,只要玩弄它,有一天它会对你有意义。)

if检查后set /p e="Weapon to equip: ",如果武器可用(true),如果是,则很好,如果没有那么错误/再试一次。

if %random% ...部分向您展示了如何使项目可用(true)。您也可以通过将标记设置为false来使其中一个不可用。)如果您像在战斗中或在商店(买/卖)中那样发现,那么这样做也是一样。

我确定,您已经猜到,您必须使用某些代码替换echo Bamm - Wush - Ouch进行战斗。

答案 1 :(得分:0)

我觉得很难找到解决方案,因为用户无论如何都可以编辑.bat文件?用C ++或C#编写它不是更好吗?