(批处理)如何使用两个变量来引用IF语句中的另一个变量?
这是我正在制作的游戏的代码的一部分。(批处理)如何使用两个变量来引用IF语句中的另一个变量?
:south
set "message=You take a step South"
set /a "posY=%posY%+1" //Moves player down one tile
if "%p%posX%%posY%%"=="#" set /a "posY=%posY%-1" //checks if the player has hit a wall. If this is the case, bring him back one tile.
goto renderMap
假设%POSX%== 1%波西%== 3,我试图让程序读取IF语句为:
if "p13"=="#" set /a "posY=%posY%-1"
但没有什么我试着似乎上班。我想知道是否有人能给我一个正确的方法来做到这一点。
@ECHO OFF
SETLOCAL
SET p13=#
SET posy=2
SET posx=1
SET /a posy=posy+1
CALL SET destsq=%%p%posx%%posy%%%
IF "%destsq%"=="#" (
ECHO hit wall - ouch!&SET /a posy-=1
) ELSE (ECHO moved south.)
这可能是最简单的。
注意,所谓是set destsq=
%%
- %逃脱的%
p
%posx%
的特殊意义 - 评价为1
%posy%
- 评估为3
%%
- %逃离的特殊意义的%
所以结果是 集destq =%P13%
注意set/a
允许你做业务没有%
并且还允许形式set /a var+=something
添加%的东西%至变种。
当然, 集/一个变种+ =东西 集/一个变种+ =%东西% 集/一个VAR = VAR +东西 集/一个VAR =%VAR%+东西 集/一个变种=%var%+%%% set/var = var +你选择哪种风格你用...
看到
set /?
从提示docco。
OK,这里是一个简单的例子,在那里你可以看到,它是如何工作:
@echo off&setlocal enabledelayedexpansion
set "posX=1"
set "posY=3"
set "p13=#"
set "pos=p%posX%%posY%"
if "!%pos%!"=="#" echo "#" found.
..输出为:
"#" found.
如果您在书面方式批游戏,那么你的程序速度很重要。
有三种方法使用一个变量作为另一个的名称的一部分:与
CALL
命令,使用命令FOR
,或使用延迟扩展。CALL
是最慢的和延迟扩展最快的。总是尝试使用最短的方式来编写任何命令。增加变量的最快方法是
set /A var+=1
。我强烈建议你使用标准的数组符号包围在广场braquets下标;这种形式更清晰。您可以阅读Arrays, linked lists and other data structures in cmd.exe (batch) script以获得关于这一点的进一步解释。
下面是你相同的代码上面,但包括前面的点:
setlocal EnableDelayedExpansion
:south
set "message=You take a step South"
set /a posY+=1 //Moves player down one tile
if "!p[%posX%][%posY%]!" == "#" set /a posY-=1 //checks if the player has hit a wall. If this is the case, bring him back one tile.
goto renderMap
嗯,看,这更先进的东西我还没有真正得到进入然而 – Covrt 2013-04-11 08:00:33
我只是得到一个“ ELSE(此时出乎意料)“此错误来自 – Covrt 2013-04-11 08:29:22
'ELSE'和'('之间必须有一个空格,并且')ELSE('必须位于同一条物理线路上 – Magoo 2013-04-11 08:48:54