0

我在这个网站上搜索了我的问题,但没有找到解决问题的方法。

系统会为玩家和电脑提供一个随机数,从 2 到 12。

这有 3 个部分,如果 X 大于 Y,如果 X 小于 Y,以及当 X 与 Y 相同时。

当我启动 时.bat,它工作得很好,我选择Play Game,我输入赌注(例如 20),但是当我启动这个过程时,窗口关闭,我无法阅读它写的内容。我可以看到一些闪烁的文本,我看到了“Your”和“syntax”,但它消失得很快。

我真的很确定它有效,因为当我删除这三if if if件事时,它会显示我的钱、赌注、统计数据和所有内容,我什至可以通过我写的“作弊”来减少或增加它。

所以,这里是:

set /p setbet=Please type a number to select bet: 
if "%setbet%"=="1" set bet=20
if "%setbet%"=="2" set bet=50
if "%setbet%"=="3" set bet=100
if "%setbet%"=="4" set bet=150
if "%setbet%"=="5" set bet=200
if "%setbet%"=="6" set bet=250
if "%setbet%"=="7" set bet=300
echo.
echo Your bet is %bet%.
echo.
pause
cls
set /a money-=bet
set /a playernum=%random% %%12 +2
set /a enemynum=%random% %%12 +2
echo.
echo You roll:        %playernum%
echo Enemy rolls:     %enemynum%
echo.
if %playernum% LSS %enemynum%
(
echo Enemy wins. Please try again.
echo Your current money is %money%.
echo You lost %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% LSS %playernum%
(
set /a money+=bet*2
echo You win.
echo Your current money is %money%.
echo You won %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% EQU %playernum%
(
set /a money+=bet
echo It's a tie.
echo You won the bet (%bet%), but your money didn't changed.
echo Your money is now %money%.
echo.
pause
goto INTRO

谢谢!

4

2 回答 2

3

1)你忘了关闭你的最后一个括号

2)语法错误在这里:

if %enemynum% EQU %playernum%
(

它应该是 :if %enemynum% EQU %playernum% (

3)money变量的值在显示时会出错。

这是由两个事实引起的: -> 在 FOR 或 IF 中,变量在命令执行之前而不是在命令执行期间被“扩展”。(扩展=变量被其值替换)

为了改变变量的值并在同一个循环中使用它,你应该使用延迟表达式。

您必须在代码的开头编写 SETLOCAL ENABLEDELAYEDEXPANSION 并且应该延迟扩展的变量应该用感叹号而不是百分号包围。

所以echo Your current money is %money%.成为echo Your current money is !money!.

4)如果出现 tie ,您必须转义括号: echo You won the bet ^(%bet%^) but your money didn't changed.

5)你没有贴标签 INTRO,所以你goto INTRO会失败

于 2013-08-25T15:28:36.743 回答
0

你应该搜索delayed expansion( setlocal enabledelayedexpansion) 并计算你的括号:每个左括号都需要一个右括号(我知道有例外,但这里没有)。后面的左括号if 必须在同一行,如if. if解析器将停在这里:因为%bet%)这是最后一次打开之后的第一个右括号。

于 2013-08-25T15:17:27.853 回答