我一直在编写一个基于文本的口袋妖怪战斗,它一直告诉我,我有一个失踪的操作员。这是脚本我把它缩小到了。
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!
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
正如SomethingDark所说,您将要使用set /a ph=
。请注意,有一个等号,这意味着"得到值",而不是两个等号,它与if
一起使用,意味着"等于?" (作为比较)。此外,您通过设置%ph%=...
所做的是设置一个与变量ph
的值名称相同的新变量。换句话说,如果将ph
设置为1,则您将一个名为1的变量设置为数学运算的结果。或者,如果ph
为空,那么您可能正在获得Missing操作数(我认为这就是您的意思)。无论哪种方式,我都确定这不是你想要的。
此格式适用:
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!
我希望有所帮助。