所以,我和一个朋友正在制作批量RPG,我们的战斗系统基于随机数b / w 1& 10.代码段是:
SET /A RANval=%RANDOM% * 10 / 32768 + 1
echo %RANval%
pause
if %RANval% GTR 5 goto O_Battle
if %RANval% LSS 5 goto O_NoBattle
if %RANval% == 5 goto O_RareBattle
但问题是:它一直在崩溃,“5此时出乎意料” 有人可以帮我这个吗?
编辑:问题似乎是在我更改LSS 5和GTR 5下的5时,即如果我将其设为“LSS 3”和“GTR 3”,则表示“3此时出乎意料” (对不起,这是我第一次使用stackoverflow)
答案 0 :(得分:0)
如果我将以下内容放在批处理文件中,它对我有用,那么你的goto标签可能有问题吗?
SET /A RANval=%RANDOM% * 10 / 32768 + 1
echo %RANval%
if %RANval% GTR 5 goto O_Battle
if %RANval% LSS 5 goto O_NoBattle
if %RANval% == 5 goto O_RareBattle
:O_Battle
echo "Battle"
goto end
:O_NoBattle
echo "No Battle"
goto end
:O_RareBattle
echo "Rare"
goto end
:end
答案 1 :(得分:0)
如果您输入错误消息5 was unexpected at this time
正是您在Windows(XP和7,至少)下看到的内容:
if GTR 5 echo blah
这让我相信if
语句中的变量名称不正确,因为类似于:
if %no_such_var% GTR 5 echo blah
会导致变量被替换为(a)并且发生错误。
因此,请检查您是否在1
语句中使用l
(wun)而不是if
(ell)做了一些愚蠢的事情。如果需要,请使用一个很难出错的简单变量,例如r
: - )
(a)有趣的是,这似乎只发生在批处理文件中,而不是来自命令行。这两者可能有不同的规则,但如果您正在测试,请确保您在批处理文件中执行此操作。
答案 2 :(得分:0)
(这是LufiaGuy2000,它不会让我在学校电脑上使用G +登录> :() 我修复了它,我只需要删除代码周围的括号。我想我不得不解决不使用括号的问题。除非别人想出解决方案。谢谢你们的答案! :)
答案 3 :(得分:0)
因为你在()
内,所以你需要使用延迟扩展。
要使用延迟展开,请使用!
代替%
作为变量。
试试这个:
@echo off
setlocal enabledelayedexpansion
IF "A"=="A" (
SET /A RANval=%RANDOM% * 10 / 32768 + 1
echo !RANval!
pause
if !RANval! GTR 5 goto O_Battle
if !RANval! LSS 5 goto O_NoBattle
if !RANval! == 5 goto O_RareBattle
)
答案 4 :(得分:0)
尝试使用延迟扩展。在批处理文件的开头,输入:
setlocal enableDelayedExpansion
另外,使用!
而不是%
包围变量,如下所示:
if !RANval! GTR 5 goto O_Battle
if !RANval! LSS 5 goto O_NoBattle
if !RANval! == 5 goto O_RareBattle
这应该可以解决问题。