我一直在编写一个基于文本的精灵宝可梦之战,它一直告诉我我有一个丢失的操作符。下面是ive缩小范围的脚本。
set /a attacks=%random% * 3 / 32768 + 1
if %attacks%==1 set /a %ph%==%ph% - %random% * 10 / 32768 + 1
if %attacks%==2 set /a %ph%==%ph% - %random% * 30 / 32768 + 1
if %attacks%==3 set /a %ph%==%ph% - %random% * 50 / 32768 + 1
if %attacks%==3 echo Squirtle used water bolt!
if %attacks%==2 echo Squirtle used Tackle!
if %attacks%==1 echo Squirtle used Water Pulse!如有任何帮助,我们不胜感激!谢谢!
发布于 2016-12-01 15:51:10
正如SomethingDark所说,您将希望使用set /a ph=。请注意,这里有一个等号,它表示“获得值”,而不是两个等号,它与if一起使用,表示“等于?”(作为比较)。另外,通过设置%ph%=...可以设置一个与变量ph的值同名的新变量。换句话说,如果ph设置为1,则将名为1的变量设置为数学运算的结果。或者,如果ph为空,您可能丢失了操作数(我想这就是您想说的)。不管怎样,我肯定这不是你想要的。
此格式将起作用:
if %attacks%==1 set /a ph=%ph% - %random% * 10 / 32768 + 1我还有几个建议。
首先,这可能是一个风格上的选择,但我喜欢使用随机的mod (%)运算符。这使得它更容易阅读。如下所示:
set /a ph=%ph% - %random% %% 10 + 1这个( %% 10部分)在0到9之间选择一个数字,然后+ 1使用模算法(即除以这个数字,然后返回余数)将它变成1到10。它只是更容易阅读IMO。请注意,您只需要在批处理文件中使用双%%。在cmd中,只需使用%。
其次,当使用与if的比较时,如果您的一个操作数为空,它将终止您的脚本。相反,应该用引号将操作数括起来,这样即使是一个空变量也不会破坏您的脚本。如果您的变量从不为空,则不是严格要求,但可能值得这样做。
if "%attacks%"=="3" echo Squirtle used water bolt!我希望这能有所帮助。
https://stackoverflow.com/questions/40901766
复制相似问题