我正在开始最有可能成为我正在制作的批量游戏中最乏味的部分:地图。但是,我的位置检查系统存在一些问题。
:location_check_k
if %k_loc%==1 goto k_1
if %k_loc%==2 goto k_2
if %k_loc%==3 goto k_3
if %k_loc%==4 goto k_4
if %k_loc%==5 goto k_5
if %k_loc%==6 goto k_6
if %k_loc%==7 goto k_7
if %k_loc%==8 goto k_8
if %k_loc%==9 goto k_9
if %k_loc%==10 goto k_10
if %k_loc%==11 goto k_11
if %k_loc%==12 goto k_12
if %k_loc%==13 goto k_13
if %k_loc%==14 goto k_14
if %k_loc%==15 goto k_15
if %k_loc%==16 goto k_16
if %k_loc%==17 goto k_17
if %k_loc%==18 goto k_18
if %k_loc%=="" goto error
if %k_loc% GTR 18 goto error
:k_1
::Gate
set "dc="
type data\mapdata\maps\kinallen\maps\kinallen_ex_s
set\p dc=
if %dc%=up goto k_4
goto k_1
到目前为止,这就是我为系统所做的一切,但它每次都会崩溃。我已经尝试删除部分代码以找出错误发生的位置,但没有任何效果。这些变量都不是假的。我试过在这些行之前加入echo %k_loc%
。它应该返回“1”。 type
命令中提到的文件也存在。删除某些块也没有任何作用。摆脱:location_check_k
部分仍然会导致崩溃。仅使用:k_1
和echo good
替换pause
部分中的所有内容仍然会导致崩溃。
注意事项:
- k_(number)
是我用作地图位置值的内容。每个不同的数字都会输入相同的地图,并将您放在不同的位置。
- 变量dc
是我用于“方向命令”的缩写。
- 这是通过call
命令启动的。我通过这种方式保持代码更有条理。
- 其他位置(k_2
... k_18
)尚未写出。
不确定这些是否会影响任何事情,但无论如何我都会列出它们。关于我做错了什么的想法?
答案 0 :(得分:0)
代码中有更多错误:
if "%k_loc%"=="" goto error
永远不会执行goto
if not defined k_loc goto error
或更好
if %dc%=up goto k_4
提到了set / p,但是改变了
if /i "%dc%"=="up"
到
GoTo k_%k_loc% 2>Nul||GoTo error
如果你打算做打字练习的计划,你可以按照上面的方式进行,但是@Compo建议有18个goto命令的更有效的方法
For /l %%c in (1 1 18) Do If "%k_loc%"=="%%a" Goto k_%%a
或
{{1}}