这是我正在制作的游戏代码的一部分。
: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和%posY%== 3我试图让程序读取IF语句:
if "p13"=="#" set /a "posY=%posY%-1"
但我尝试过的任何东西似乎都没有用。我想知道是否有人能告诉我一个合适的方法。
答案 0 :(得分:2)
@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.)
这可能是最简单的。
请注意,CALLed是什么
set destsq=
%%
- %逃脱了%
的特殊含义
p
%posx%
- 评估为1
%posy%
- 评估为3
%%
- %逃脱了%
所以结果是 设置destq =%p13%
请注意,set/a
允许您在没有%
的情况下执行操作,并允许表单set /a var+=something
将%some%添加到var。
当然, set / a var + = something set / a var + =%something% set / a var = var + something set / a var =%var%+ something set / a var =%var%+%something% set / a var = var +%something%
所有人都做同样的事情。您选择使用哪种风格......
见
set /?
来自docco的提示。
答案 1 :(得分:2)
如果您正在批量编写游戏,那么程序的速度非常重要。
有三种方法可以将变量用作另一个变量的名称的一部分:使用CALL
命令,使用FOR
命令或使用延迟扩展。 CALL
是最慢的,延迟扩展最快。
始终尝试使用最短的方式编写任何命令。增加变量的最快方法是set /A var+=1
。
我强烈建议您使用方括号中包含下标的标准数组符号;这种形式更清晰。有关这一点的进一步说明,您可以阅读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
答案 2 :(得分:1)
好的,这是一个简单的例子,你可以看到它是如何工作的:
@echo off&setlocal enabledelayedexpansion
set "posX=1"
set "posY=3"
set "p13=#"
set "pos=p%posX%%posY%"
if "!%pos%!"=="#" echo "#" found.
..输出是:
"#" found.