在我的代码*中,我有一个简单的随机数生成器和几个ifs来检查生成器生成的数字。但是,即使在另一个CMD实例,另一个批处理文件以及该批处理文件的另一个实例中运行,它仍会生成相同的数字:4。每次都是。我没有在循环中使用此代码,尽管它可以循环回到它的部分。但是,我确实有另一行代码可以在一组不同的参数中生成另一个数字,这些数字可以正常工作。
*我的代码:
:genClass
set /a class=(5 * !random!) / 32768 + 1
if !class!==1 (
set class=Knight
goto genKnightArmor
)
if !class!==2 (
set class=Warrior
goto genWarriorArmor
)
if !class!==3 (
set class=Archer
goto genArcherArmor
)
if !class!==4 (
set class=Thief
goto genThiefArmor
)
if !class!==5 (
set class=Mage
goto genMageArmor
)
:genKnightArmor
set /a armor=(2 * !random!) / 32768 + 1
if !armor!==1 set armor=Light Armor
if !armor!==2 set armor=Heavy Armor
echo !name!
echo !gender!
echo !class!
echo !armor!
pause
exit
:genWarriorArmor
set /a armor=(2 * !random!) / 32768 + 1
if !armor!==1 set armor=Light Armor
if !armor!==2 set armor=Heavy Armor
echo !name!
echo !gender!
echo !class!
echo !armor!
pause
exit
:genArcherArmor
set /a armor=(2 * !random!) / 32768 + 1
if !armor!==1 set armor=Light Armor
if !armor!==2 set armor=Heavy Armor
echo !name!
echo !gender!
echo !class!
echo !armor!
pause
exit
:genThiefArmor
set /a armor=(2 * !random!) / 32768 + 1
if !armor!==1 set armor=Light Armor
if !armor!==2 set armor=Heavy Armor
echo !name!
echo !gender!
echo !class!
echo !armor!
pause
exit
:genMageArmor
set /a armor=(3 * !random!) / 32768 + 1
if !armor!==1 set armor=Light Armor
if !armor!==2 set armor=Heavy Armor
if !armor!==3 set armor=Robes and Hood
echo !name!
echo !gender!
echo !class!
echo !armor!
pause
exit
编辑:使用Monacraft的解决方案,它现在可以生成2个数字,并且还可以无误地生成装甲类型。但是,生成类的代码仍然混乱,如前所述,继续生成数字2。
编辑:我再次编辑了代码以更改算术和字符串变量名称。虽然类生成器现在不断生成数字3,但这并没有明确任何结果。我注意到,编辑时,生成器生成一个新数字,但是,在第一代之后,它产生相同的数字。
编辑:修复了我的代码中的错误。例如匹配变量并将随机生成器中的数字4更改为5。
答案 0 :(得分:1)
好的,随机数生成器的主要问题是使用!
而不是%
。除非您使用for
循环,否则您将不需要这些。
而不是:
set /a num=(4 * !random!) / 32768 + 1
只需使用:
set /a num=(4 * %random%) / 32768 + 1
我在cmd中对此进行了测试,但效果很好。
要使用!
,您需要EnableDelayedExpansion
,然后使用它是for循环。
希望这有助于解决您的问题,
莫纳。
答案 1 :(得分:1)
set /a num=(4 * %random%) / 32768 + 1
if !class!==1 (
也许我错了,但set num
和if class
似乎不正确
答案 2 :(得分:0)
问题在于你的表达
set /a num=(4 * !random!) / 32768 + 1
批次数学仅为整数,因此会失败。
尝试
set /a num=(%random% %% 4) + 1
更好的是,尝试使用主要代码
call :roll armor 3
并在代码末尾添加
REM Roll 1..%2
:ROLL
set /a %1=(%random% %% %2) + 1
GOTO :EOF
请注意冒号的位置 - 它们很重要。
call :roll somevar n
会将随机数1 .. n
分配给变量somevar
答案 3 :(得分:0)
这是另一种选择方式:
@echo off
:genClass
set name=Slartibartfast
set gender=Alien
set /a num1=%random% %% 5 + 1
set /a num2=%random% %% 2 + 1
if %num1%==1 (
set class=Knight
if %num2%==1 set armor=Light Armor
if %num2%==2 set armor=Heavy Armor
)
set /a num2=%random% %% 2 + 1
if %num1%==2 (
set class=Warrior
if %num2%==1 set armor=Light Armor
if %num2%==2 set armor=Heavy Armor
)
set /a num2=%random% %% 2 + 1
if %num1%==3 (
set class=Archer
if %num2%==1 set armor=Light Armor
if %num2%==2 set armor=Heavy Armor
)
set /a num2=%random% %% 2 + 1
if %num1%==4 (
set class=Thief
if %num2%==1 set armor=Light Armor
if %num2%==2 set armor=Heavy Armor
)
set /a num2=%random% %% 3 + 1
if %num1%==5 (
set class=Mage
if %num2%==1 set armor=Light Armor
if %num2%==2 set armor=Heavy Armor
if %num2%==3 set armor=Robes and Hood
)
echo %name%
echo %gender%
echo %class%
echo %armor%
echo.
pause
goto :genclass