我正在批量制作一个基于文本的游戏,我需要从武器/盔甲的成本中减去玩家的黄金......有人可以看看我的代码并告诉我他们是否发现了问题吗?
@echo off
set gold= 20
echo %gold%
pause >nul
goto blacksmith
:blacksmith
set /p weaponch= Purchase:
if %weaponch%==1s (
set weaponch= 10
set a/ gold=%gold%-10
echo.
echo Gold: %gold% You have purchased the Light Sword
pause
)
Run Code Online (Sandbox Code Playgroud)
您的代码中有两个问题。
第一个由 user328430s 的答案修复,您使用a/而不是/a,而且 -= 更容易。
另一个问题是,批处理一旦到达,就会立即填充 if 中的所有实例%gold%,因此直到之后它才能识别更改。我想这是为了优化,但它会导致问题。要修复它,您必须在程序中启用延迟扩展,然后在您必须提醒它对 gold 变量使用延迟扩展时。首先使用以下命令来完成此操作:
setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
然后切换
echo Gold: %gold% You have purchased the Light Sword
Run Code Online (Sandbox Code Playgroud)
和
echo Gold: !gold! You have purchased the Light Sword
Run Code Online (Sandbox Code Playgroud)
将其与修正后的减法线相加,即可得到:
@echo off
setlocal enabledelayedexpansion
set gold= 20
echo %gold%
pause >nul
goto blacksmith
:blacksmith
set /p weaponch= Purchase
if %weaponch%==1s (
set weaponch= 10
set /a gold-=10
echo.
echo Gold: !gold! You have purchased the Light Sword
pause
)
Run Code Online (Sandbox Code Playgroud)
我在我的电脑上测试了一下,输入1秒进行购买,一切正常。希望有帮助。
| 归档时间: |
|
| 查看次数: |
14555 次 |
| 最近记录: |